2012-01-29 3 views
5

운영 체제 사용자 모드 응용 프로그램의 가상 주소 공간이 비공개이므로 한 응용 프로그램이 다른 응용 프로그램에 속한 데이터를 변경할 수 없습니다. 각 응용 프로그램은 독립적으로 실행되며 응용 프로그램이 충돌하는 경우 충돌은 해당 응용 프로그램으로 제한됩니다. 다른 응용 프로그램과 운영 체제는 충돌의 영향을받지 않습니다.커널 모드 및 메모리 보호

커널 모드 OS에서 메모리를 보호하지 않고 BOSD가 발생하는 이유는 무엇입니까 ??

+0

왜 화제가되지 않습니까 ?? –

+0

이것은 on-topic osdev 질문과 같습니다. – bdonlan

답변

8

먼저 어느 수준에서 항상 실패 할 수없는 구성 요소가 있습니다. 이 구성 요소가 손상되면 복구 할 수 없습니다. 예를 들어, 실행중인 프로세스의 테이블을 휴지통으로 만들면 다시 부팅하지 않고이 프로세스를 다시 작성할 수 없습니다. 따라서이 구성 요소의 충돌을 메모리 보호로 제한하는 경우에도 BSOD (또는 이와 동등한)가 발생할 수 있습니다.

하지만 중요한 점은 종종 의 구성 요소가 치명적인 오류없이 재설정되어야한다는 것입니다. 드라이버 (예 : 네트워킹 스택). 사실,이 수준에서 보호 기능을 수행하는 OS가 있습니다. 이들은 microkernel architectures이라고합니다.

그러나 마이크로 커널의 문제점은 성능입니다. x86 CPU에서 메모리 보호는 Current Privilege Level (CPL 또는 'ring'), 0 (최대 액세스)과 3 (사용자 모드) 사이의 숫자와 Page Table의 두 가지 항목으로 이루어집니다. 페이지 테이블은 가상 주소를 실제 주소에 매핑하고 각 페이지 (4096 바이트 메모리 블록)에 대한 액세스 제한을 설정합니다. 각 프로세스에는 고유 한 페이지 테이블이 있으며 페이지 테이블의 각 페이지는 최대 CPL, 읽기 전용 플래그, 실행 취소 플래그 또는 액세스 금지 플래그를 설정하여 제한 할 수 있습니다.

CPL을 변경하는 것은 비교적 빠른 작업입니다 (허용되는 방법과시기에 보안 제한이 있음에도 불구하고). 그러나 페이지 테이블을 변경하는 것은 CPU 캐시를 지우려면 Translation Lookaside Buffer (TLB)이라고해야하므로 비용이 많이 듭니다.

일반적으로 일반 OS에서 OS는 사용자 프로세스에 대해 최소 XGB의 메모리를 예약합니다 (일반적으로 3GB는 32 비트 아키텍처에서 선택된 번호 임). 상단 (4 - X) GB는 물리적 메모리의 첫 번째 (4 - X) GB에 직접 매핑되며 CPL 0 ('링 0')으로 만 제한됩니다. 따라서 커널은 자신의 개인 데이터 구조를 상위 1GB 정도의 공간에 배치 할 수 있으며 실행중인 프로세스에 관계없이 항상 동일한 가상 주소에서 액세스 할 수 있습니다. 프로세스가 여섯 개의 하위 시스템에 무언가를해야하는 시스템 호출을 만들면 아무런 문제가 없습니다. 단지 그들 사이에서 함수를 호출 할 수 있습니다.

그러나 마이크로 커널 시스템에서 각 커널 하위 시스템은 자체 페이지 테이블과 자체 주소 매핑을 가져옵니다. 사용자 호출을 처리하기 위해 CPU에서 페이지 테이블을 몇 번 변경해야 할 수 있으며이 성능이 증가합니다. 또한 각 하위 시스템은 종속성의 실패를 처리 할 준비가되어 있어야 시스템의 복잡성이 증가합니다. 이러한 문제로 인해, 마이크로 커널은 연구 및 장난감 OS (예 : minix, GNU HURD)로만 사용되었습니다.

그러나 최근 몇 년 사이에 매크로 커널과 마이크로 커널 사이에 약간의 선이 흐려져 왔습니다. 예를 들어, Windows 7에서 그래픽 드라이버 은 실제로는 나머지 커널과 분리 된입니다. 충돌이 발생하면 시스템을 복구 할 수 있습니다. Linux와 OS X에서 FUSE은 사용자 공간에 파일 시스템 드라이버를로드 할 수 있습니다. 실제로이 시스템의 NTFS 드라이버는이 메커니즘을 사용합니다.

+0

감사합니다. bdonlan.but 제 질문은 간단합니다. "운영 체제가 커널 모드에서 (각 구성 요소와 KMD에 대해) 메모리를 격리하지 않는 이유는 무엇입니까?" –

+0

@AS, 나는 그것을 설명했다. 마이크로 커널은 실제로 메모리를 격리합니다. 그것 때문에 그저 느리다. – bdonlan

관련 문제