2010-04-29 1 views

답변

-7

어떤 OS 커널이 있습니까?

일부 OS 커널은 가상 메모리를 사용하지만 일부는 가상 메모리를 사용하지 않습니다. 현대의 많은 운영 체제에서는 에 더 이상 가상 메모리가 없습니다. VM은 C, C++ 또는 이와 유사한 포인터에 안전하지 않은 언어에 대해서만 필요하지만 오늘날 사용되는 대부분의 언어 및 플랫폼은 포인터 안전 (예 : JavaScript, Python, Ruby, PHP, Perl, Java, CLI 마이너스 unsafe)이므로 더 이상 VM을 사용할 필요가 없습니다.)

+1

특정 언어가 포인터를 제공하는지 또는 제공하는지 여부와 OS가 가상 메모리를 사용하는지/사용하는지는 완전히 다른 두 가지 개념입니다. –

+0

가상 메모리를 사용하지 않는 유스 케이스 별 OS (예 : Cisco IOS)가 있습니다. 플랫 메모리 모델을 가진 모 놀리 식 커널을 사용합니다. –

1

"가상 메모리 사용"은 다소 모호합니다. 광범위하게 해석하면 대답은 '예'입니다. 가상 메모리는 하나의 프로세스를 다른 프로세스로부터 보호하고 프로세스에 컴퓨터의 전체 메모리를 가지고 있다는 환상을주는 운영 체제의 기본 부분입니다. virtual memory에 대한 Wikipedia 기사는 이것이 어떻게 작동하는지에 대한 좋은 참고 자료입니다. (비록 공정하다고해도 리눅스는 가상 메모리없이 구성 될 수 있으며 그것을 사용하지 않는 다른 맞춤형 또는 실시간 시스템이 있습니다.)

이제 더 자세한 질문이 있다면 운영체제는 커널 데이터 구조를 가지고있는 메모리를 페이징 할 것이고, 나는 리눅스 커널 만이 대답 할 수있다. 메모리가 크면 요즘에는 커널 데이터 구조를 페이징하여 얻은 추가 메모리가 추가 된 복잡성이나 페이지 폴트의 비용을 정당화하지 못합니다.

0

NT 커널 및 장치 드라이버는 저장소로 안전하게 페이징 할 수있는 데이터 구조 및 개체에 가상 메모리를 사용합니다. 예를 들어, 드라이버는 usermode 프로그램처럼 가상 메모리를 요청할 수 있습니다.

그러나 커널은 다음과 같은 장점이 있습니다. 1) 효율성상의 이유로 메모리에 항상 유지되어야합니다. 2) 메모리에 유지해야합니다. 페이지 폴트를 처리 할 수 ​​없습니다.. 일반적인 예는 ISR (인터럽트 서비스 루틴) (예 : 페이지 오류 처리 코드 자체)을 입력하는 것입니다. 이 유형의 코드와 데이터는 항상 실제 메모리에 보관되며 NT 커널에서는 비 페이징 풀이라고합니다.

후자는 비 페이징 메모리 주소가 직접 참조된다는 것을 의미하지 않습니다. 이들은 커널 메모리 관리자에 의해 항상 물리적 주소 (및 그 반대의 주소)로 변환됩니다.

나는 가상의 매핑없이 사용 된 유일한 물리적 주소는 시스템이 부팅 될 때 (보호 모드가 활성화 될 때까지 WinNT에서 NTLDR/NTDETECT.COM 단계까지) 첫 번째 1MB라고 생각합니다.