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

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

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

아니면 더 일반적으로 "공간"(또는 루프) 전환이 발생하면 어떻게 되나요? 비용이 많이 드는 이유는 무엇입니까(Minix의 주요 문제점 중 하나)?

이 질문은 아래 댓글에 있습니다.이것답변.

답변1

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

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

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

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

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

관련 정보