내 이해는 다음과 같습니다
사용자 코드는 프로세스 주소 공간의 프로세스/스레드 컨텍스트에서 사용자 모드로 실행되며 프로세스에 대해 정의된 사용자 코드/데이터만 처리할 수 있지만 권한 있는 명령에는 액세스할 수 없습니다.
운영 체제는 사용자가 만든 프로세스/스레드가 커널 공간 및 커널 모드가 아닌 사용자 공간 및 사용자 모드에 있다는 것을 어떻게 알 수 있습니까? 레지스터/CPU/하드웨어 설정에 의해 제어됩니까? 정확히 어떻게 작동하나요?
답변1
프로세서(CPU)에는 모드 비트(bit)가 있습니다. 특권 모드 ring-0에서 시작하면 컴퓨터는 모든 명령을 실행하고 모든 리소스에 액세스할 수 있습니다. 커널은 이 모드에서 실행됩니다. 사용자 모드 링-3(링-1 및 링-2 없음)으로 변경하는 등 모드 변경에 대한 지침이 있습니다.
권한 모드로 이동하는 지침은 더 복잡합니다. 인터럽트와 트랩은 다음과 같습니다. 하드웨어 인터럽트가 발생하거나 사용자 모드 프로그램이 소프트웨어 인터럽트를 실행하면 프로세서는 미리 등록된 주소를 찾아 모드를 변경하고 반환 주소를 스택에 넣은 다음 해당 주소로 점프합니다. 특권 모드에서만 이러한 주소를 등록할 수 있습니다(set-uid와 유사).
메모리의 경우: 두 모드 모두 사용자 메모리와 커널 메모리가 매핑됩니다. 그러나 사용자 모드에서는 커널 메모리가 비활성화됩니다. 커널 공간으로 이동할 때 빠르게 다시 활성화할 수 있습니다.
이는 링(x86에서 사용됨)을 언급하는 것 외에는 특정 CPU에만 국한되지 않습니다. CPU 작동 방식을 이해하고 싶다면 ARM은 가장 간단한 최신 프로세서 중 하나입니다. x86은 가장 복잡하지만 그다지 좋지는 않습니다.