사용자 공간 메모리로 인해 시스템이 통제 불능 상태가 될까요?

사용자 공간 메모리로 인해 시스템이 통제 불능 상태가 될까요?

그래서 저는 Brian Ward의 "How Linux Works"를 읽고 있습니다. 그는 사용자 공간 애플리케이션 중 하나에서 발생한 오류로 인해 시스템이 중단되지는 않을 것이라고 말했습니다.

그림 1-1. Linux 시스템이 구성되는 방식과 커널 및 사용자 프로세스가 실행되는 방식에는 주요 차이점이 있습니다. 즉, 커널은 커널 모드에서 실행되는 반면 사용자 프로세스는 사용자 모드에서 실행됩니다. 커널 모드에서 실행되는 코드는 프로세서와 주 메모리에 무제한으로 액세스할 수 있습니다. 이는 커널 프로세스가 전체 시스템을 쉽게 충돌시킬 수 있게 하는 강력하지만 위험한 권한입니다. 커널만이 접근할 수 있는 영역을 커널 공간이라 한다.

대조적으로, 사용자 모드는 (보통 작은) 메모리 하위 집합과 안전한 CPU 작업에 대한 액세스를 제한합니다. 사용자 공간은 사용자 프로세스가 접근할 수 있는 메인 메모리 부분을 의미합니다. 프로세스 오류 및 충돌이 발생하는 경우 결과는 제한적이며 커널에 의해 해결될 수 있습니다. 이는 웹 브라우저가 충돌하더라도 며칠 동안 백그라운드에서 실행되는 과학 계산을 중지하지 않을 수 있음을 의미합니다.

이론적으로 사용자 프로세스가 제어를 벗어나더라도 시스템의 나머지 부분에 심각한 손상을 초래해서는 안 됩니다. 실제로 일부 프로세스는 다른 프로세스보다 더 많은 작업을 수행할 수 있으므로 "심각한 손상"을 고려하는 항목과 프로세스의 특정 권한에 따라 달라집니다. 예를 들어, 사용자 프로세스가 디스크의 데이터를 완전히 삭제할 수 있습니까? 올바른 권한이 있으면 이것이 매우 위험하다고 생각할 수도 있습니다. 그러나 이러한 일이 발생하지 않도록 보호 장치가 마련되어 있으며 대부분의 프로세스에서는 이러한 방식으로 혼란을 일으키는 것을 허용하지 않습니다.

예를 들어, 웹 서버가 사용자 공간에서 실행된다는 내용을 읽었으며 웹 서버가 시스템 메모리를 모두 소비하고 서버가 강제로 충돌하는 것을 보았습니다. 그러나 저자의 말은 이와 모순된다.

제가 글쓴이의 뜻을 잘못 이해한 것인지 모르겠습니다. 나는 매우 미안 해요.

사용자 공간 응용 프로그램이 시스템을 손상시킬 수 있는지, 그리고 그 이유를 설명할 수 있습니까?

겸손한 도움에 감사드립니다.

답변1

특별히 오해하신 부분은 없는 것 같아요. 예, 당신이 읽은 두 가지 내용은 일관성이 없는 것 같습니다. 저자(Brian Ward)가 다루지 않은 주제는 다음과 같습니다.서비스 거부 공격, 이름이 아니더라도언제나악의 있는. 때로는 우연히 발생합니다.

서버가 되는 것을 목격했습니다.포크 폭탄. 물론, 서버는 기술적으로 여전히 실행 중이지만 다른 서비스에 액세스할 수 없으며 우발적인 포크 폭탄은 약 1조년 동안 지속될 것으로 예상됩니다. 대부분의 사람들은 그것을 붕괴라고 부를 것입니다.

서비스 거부 공격은 다음과 같이 구성되므로 다릅니다.너무 많은기타 허용되는 조치. 예를 들어, 허용되는 웹사이트의 홈 페이지를 요청할 수 있습니다. 이제 백만 대의 컴퓨터가 모두 수억 번 요청한다면 문제가 발생할 것입니다.

이제 커널에는 생각보다 수행하기 어려운 몇 가지 보호 기능이 있습니다. 그러나 기본 원칙은 많은 스레드를 실행하는 사용자가 특정(제한된) 리소스를 사용할 수 있으므로 다른 스레드(다른 사용자의)가 이를 사용할 수 없다는 것입니다.굶주리는, 리소스를 사용할 수 없습니다.

관련 리소스에 따르면 커널은 다음과 같은 도구를 사용하여 이러한 일이 발생하는 것을 방지할 수 있습니다.cgroup. 그러나 시스템 관리자/소프트웨어 개발자가 무언가를 제한하지 않는 보다 일반적인 상황에 대해 이야기하면 웹 서버가 작동하지 않고 사용 가능한 모든 리소스를 사용하는 것과 같은 예를 찾을 수 있습니다.

특별히 언급할 가치가 있는 자원 중 하나는 기억입니다. 메모리와 스왑 공간이 완전히 소진되면 커널은 프로세스 종료를 시작합니다. 따라서 일부 사람들이 믿는 것과는 달리 프로세스가 커널이 다른 프로세스를 강제로 종료하도록 하는 것이 가능합니다.이는 번거로운 프로세스가 종료된다는 것을 보장하지 않습니다..

이는 제어되지 않는 사용자 공간 프로그램이 궁극적으로 커널이 완전히 관련되지 않은 프로그램을 종료하도록 하는 작업을 수행할 수 있음을 의미합니다. 시스템이 제대로 작동하더라도 나는 여전히 이 상황을 "대혼란을 일으키는 상황"이라고 부르고 싶습니다.

관련 정보