사용자 공간에서 커널 공간으로의 전환

사용자 공간에서 커널 공간으로의 전환

물리적(하드웨어, 링)과 논리적(소프트웨어) 모두에서 사용자 공간에서 커널 공간으로의 전환이란 무엇입니까? 그 반대.

아니면 더 일반적으로 "공간"(또는 링) 전환이 발생할 때 무슨 일이 발생합니까? 그리고 비용이 많이 드는 이유는 무엇입니까(Minix의 주요 문제 중 하나)?

이 질문은 아래의 의견에 이어집니다.이것답변.

답변1

운영 체제의 관점에서 사용자 공간은 프로세스의 코드 실행이고, 커널 공간은 커널의 코드 실행입니다. 사용자 공간에서 커널 공간으로의 전환은시스템 호출, 커널 공간에서 사용자 공간으로의 전환은 시스템 호출의 반환입니다.

프로세서의 관점에서 볼 때 사용자 공간과 커널 공간은 권한 수준입니다. "링 3"과 "링 0"은 Intel x86 프로세서에서 사용되는 이름입니다(링 1과 2가 있지만 대부분의 유닉스에서는 많이 사용되지 않기 때문에 사용하지 않습니다). 다른 CPU 유형은 다른 이름을 사용합니다(예: ARM의 사용자 모드 및 권한 있는(또는 시스템) 모드).

모드 간 전환은 프로세서 모드를 변경하고 다른 주소로 점프하는 명령을 통해 수행됩니다. 이러한 지침의 세부 사항은 CPU 유형에 따라 크게 달라집니다. 프로세서 모드를 전환하고 다른 주소로 점프하는 것 외에도 모드 전환 명령은 일반적으로 몇 가지 레지스터의 값을 교환하는 등의 다른 작업을 수행합니다(이 역시 CPU에 따라 다릅니다).

사용자 모드에서 커널 모드로 전환하려면 커널에 의해 설정된 고정 주소로 점프해야 합니다. 시스템의 보안을 유지하기 위해 사용자 모드의 코드는 어떤 상황에서도 안전하게 작동하도록 특별히 제작된 코드 조각(시스템 호출 진입점)을 호출하는 경우를 제외하고 프로세서를 커널 모드로 전환하는 것을 허용할 수 없습니다. 사용자 모드 코드가 수행되었습니다. 시스템 호출 진입점은 먼저 레지스터 값을 지정된 메모리 영역에 저장하고 기타 필요한 기록 작업을 수행한 다음 시스템 호출 매개변수를 읽고 시스템 호출을 적절한 함수에 전달합니다. 프로세서 유형에 따라 장부에 설정이 포함될 수 있습니다.MMU적절하게 테이블. 커널은 언제든지 호출 프로세스를 일시 중지하고 다른 프로세스를 예약하기로 결정할 수 있습니다.

커널 모드에서 사용자 모드로의 전환은 커널이 적합하다고 판단하는 모든 곳에서 발생할 수 있습니다. 커널은 저장된 레지스터, MMU 구성 및 기타 필요한 모든 것을 복원하고 시스템 호출의 반환 값을 쓴 다음 마지막으로 시스템 호출 후 프로세스의 명령어로 다시 점프합니다.

관련 정보