프로세스 실행을 처리하는 데 "커널 모드"와 "사용자 모드"라는 두 가지 모드가 있다는 것을 읽었습니다. (Linux 커널에 대해 알아보기, 3판 ) 이것은 Linux(커널/사용자)가 제어하는 하드웨어 스위치입니까, 아니면 Linux 커널이 제공하는 소프트웨어 기능입니까?
답변1
커널 모드와 사용자 모드는 하드웨어 기능, 특히 프로세서 기능입니다. 중급 및 고급형 시스템(PC, 피처폰, 스마트폰, 가장 단순한 네트워크 장치를 제외한 모든 장치)용으로 설계된 프로세서에는 이 기능이 포함되어 있습니다. 커널 모드는 관리 모드, 권한 모드 등 다양한 이름을 가질 수 있습니다. x86(PC의 프로세서 유형)에서는 "링 0"이라고 하며 사용자 모드는 "링 3"이라고 합니다.
프로세서의 레지스터에는 커널 모드인지 사용자 모드인지를 나타내는 저장 비트가 있습니다. (이러한 모드가 2개 이상인 프로세서에서는 1비트 이상이 될 수 있습니다.) 특정 작업은 커널 모드에서만 수행할 수 있으며, 특히 제어 레지스터의 레지스터를 수정하여 가상 메모리 구성을 변경합니다.메모리 관리 유닛. 게다가 사용자 모드에서 커널 모드로 전환하는 방법은 거의 없으며 모두 커널 코드에 의해 제어되는 주소로 점프해야 합니다. 이를 통해 커널 모드에서 실행되는 코드가 사용자 모드에서 실행되는 코드가 액세스할 수 있는 메모리를 제어할 수 있습니다.
Unix 계열 운영 체제(및 프로세스 격리 기능을 갖춘 대부분의 다른 운영 체제)는 두 부분으로 나뉩니다.
- 커널은 커널 모드에서 실행됩니다. 커널은 모든 것을 할 수 있습니다.
- 프로세스는 사용자 모드에서 실행됩니다. 프로세스는 하드웨어에 액세스할 수 없으며 명시적으로 공유되지 않는 한 다른 프로세스의 메모리에도 액세스할 수 없습니다.
따라서 운영 체제는 하드웨어 기능(권한 모드, MMU)을 활용하여 프로세스 간 격리를 시행합니다.
마이크로커널운영 체제를 기반으로 하는 아키텍처는 커널 모드에서 실행되는 코드가 적고 더욱 세분화되었습니다.
사용자 모드 코드는시스템 호출: 커널 코드에서 미리 정의된 위치로 점프합니다.
하드웨어 주변 장치가 CPU의 주의를 요청해야 하는 경우 CPU를 커널 모드로 전환하고 커널 코드에서 미리 정의된 위치로 점프합니다. 이것은 ... 불리운다방해하다.
추가 읽기
답변2
"리눅스" 그 자체예커널만. 운영 체제로서 "Linux"에 관해 이야기할 때 그것은 커널과 모든다른함께 배포되는 소프트웨어리눅스 배포판.
명령을 생성할 때 사용자 모드와 커널 모드 간 전환이 발생합니다.시스템 호출, 이는 다음에 문서화된 함수입니다.매뉴얼 섹션 2. 즉, 그런 말을 해서 man 2 open
결과를 얻거나 페이지 제목에 접미사가 man creat
보이면 (2)
시스템 호출을 보고 있는 것이며 이는 커널에 의해 처리된다는 의미입니다.
(여기서 차이점은매뉴얼 섹션 3, 시스템과 같이 사용자 공간에서 완전히 구현되는 기능에 사용됩니다.표준 C 라이브러리.)
시스템 호출이 이를 호출한 사용자 코드로 반환되면 프로세스가 사용자 모드로 반환됩니다.
Linux 커널은 하드웨어 기능을 사용하여 실행되는 대부분의 프로세서에서 커널 모드와 사용자 모드를 구분합니다. 인텔보호환경계획이를 수행하는 한 가지 방법입니다. 그러나 다음과 같은 예외도 있습니다.μCLinuxMMU가 없는 소형 프로세서에서 실행되는 에는 보호 링이 없을 수도 있습니다. 매우 오래된 Unix 버전은 커널/사용자 보호 없이도 실행될 수 있습니다.
"사용자 모드 코드"에 대해 이야기할 때 우리는 주로 사용자 공간에서 실행되는 코드에 대해 이야기합니다.일부시스템 호출을 수행하므로 항상 커널 모드에서 실행되는 커널을 기다리는 데 시간이 걸립니다.