Linux 모듈/드라이버는 커널 공간에 속합니까, 아니면 사용자 공간에 속합니까?

Linux 모듈/드라이버는 커널 공간에 속합니까, 아니면 사용자 공간에 속합니까?

일부 기사에서는 모듈/드라이버가 커널 형성에 참여하기 때문에 커널 공간에 속한다고 말합니다(참조:http://www.freesoftwaremagazine.com/articles/drivers_linux)

다른 사람들은 하드웨어와 직접 상호 작용하는 Ring0만 커널 공간이라고 부를 수 있다고 말합니다(모듈/드라이버는 Ring2에 있으므로 제외). (인용하다:http://jaseywang.me/2011/01/04/vfs-kernel-space-user-space-2/)

어떤 견해가 올바른지 말해 줄 수 있는 사람이 있나요?

답변1

AMD64 및 해당 클론, ix86에서 Linux는 링 0과 3만 사용합니다. 어쨌든 다른 일반적인 아키텍처에는 "링"이 없으므로 이를 완전히 사용하는 것은 완전히 이식성이 없습니다. 게다가 리눅스는 모놀리식이다. 전체 링의 아이디어는 마이크로커널을 링 0에서 실행할 수 있고 서비스 프로세스가 더 높은 링에서 실행되어 마이크로커널이 엉망이 되지 않도록 하고 마지막으로 사용자 공간이 가장 높은 링에서 실행되도록 하는 것입니다. 그럴 수 없습니다. 피해가 엄청납니다.

답변2

참고 자료를 제공해 주실 수 있나요? 나는 당신이 (내가 아는 한) 링 0(커널)과 3(사용자)만 사용하는 Linux에 대해 이야기하고 있다고 가정합니다.

편집하다:

운영 체제의 설계에 따라 다르다고 생각합니다. 마이크로커널 아키텍처에서는 내부 루프를 사용할 수 있습니다. 특정 시스템(예: Linux)에 대해 문의하시나요? 이 질문은 특정 운영 체제에서만 답변할 수 있다고 생각합니다. 그러나 대부분의 경우 x86 기반 운영 체제는 "커널"(0)과 "사용자"(3)만 사용합니다.

답변3

가상화 상태에서 실행되지 않는 기존 운영 체제의 경우 커널 공간과 ring0은 권한 측면에서 동의어입니다. 그러나 차이점과 공통점을 강조하기 위해 별도로 설명해야 합니다.

Kernel space- 운영 체제에는 일반적으로 커널 공간과 사용자 공간이라는 두 가지 실행 모드가 있습니다. 커널 공간은 운영 체제의 권한 있는 코드(예: 스케줄러, 장치 드라이버 등)가 상주하는 곳입니다. 그 임무는 전체 시스템을 관리하고 안정적인 작동을 보장하는 것입니다. 사용자 공간에는 커널 공간에서 제공하는 기능을 사용하는 웹 브라우저 등의 프로세스가 포함됩니다.

Rings- Intel 프로세서에는 4가지 수준의 작동 권한이 있습니다. 이것을 링이라고 합니다. 링 0은 가장 높은 권한을 가지며, 링 3은 가장 낮은 권한을 갖습니다. 컴퓨터 메모리의 모든 영역에는 이러한 수준이 표시될 수 있습니다. 링0에 의해 액세스용으로 표시된 메모리 영역은 링0에 있는 코드만 액세스할 수 있는 반면, 링3에 의해 액세스용으로 표시된 메모리 영역은 모든 링에서 액세스할 수 있습니다. 이는 낮은 권한 수준(높은 링)에서 신뢰도가 낮은 코드를 실행하고 더 높은 권한 수준(낮은 링)에서 신뢰도가 높은 코드를 실행하는 경우 전자가 후자에 영향을 미칠 수 없도록 보장하는 메커니즘을 제공합니다. 어떤 코드가 어떤 링에서 실행되는지 프로그래밍 방식으로 설정할 수 있습니다(권한 수준).

설계를 단순화하고 코드 이식성을 높이기 위해(ARM과 같은 비 Intel CPU에는 4링 아키텍처가 없음) 대부분의 운영 체제는 4개의 링 중 2개만 사용합니다. 이들은 일반적으로 ring0과 ring3입니다. 커널은 ring0에서 실행되며 커널 공간을 구성합니다(내일 운영 체제 개발자가 커널을 ring0 대신 ring1에서 실행하도록 허용하면 ring1이 커널 공간을 구성하게 됩니다). 애플리케이션은 ring3에서 실행되며 사용자 공간을 구성합니다.

이는 대부분의 운영 체제에서 따르는 규칙입니다. 그러나 내가 운영 체제 개발자라면 원하는 방식으로 링 아키텍처를 자유롭게 사용할 수 있습니다. 다음 시나리오를 고려하십시오
. (캔자스=커널 공간,우리를=사용자 공간,DD=장치 드라이버 또는 커널 모듈,RX= 링X)

  1. 캔자스r0에서는,우리를r3에서 - 가장 일반적으로 사용됩니다. 예를 들어. 리눅스, 윈도우 등
  2. 캔자스r1에서는,우리를r3 - 가상화 설정에서 하이퍼바이저는 Ring0에서 실행됩니다.
  3. 캔자스r0에서는,DDr1에서는,우리를r3 - 일부 연구 프로젝트에서는 결함이 있는 장치 드라이버로부터 커널을 보호하기 위해 이 구성을 사용합니다.
  4. 캔자스r0에서는,DDr3에서는,우리를r3에서 마이크로커널은 이 구성을 사용합니다.
  5. 캔자스r0에서는,우리를r0에서는 모든 것이 동일한 링에 있습니다. 일부 연구 운영 체제(예: Microsoft의 Singularity)에서는 이 구성을 사용합니다. 미국으로부터 KS를 보호하려면 다른 메커니즘을 사용하십시오. (MS DOS, Windows 98 등과 같은 이전 운영 체제에서는 이 기능을 사용합니다. KS는 미국에서 보호되지 않으므로 운영 체제 충돌이 자주 발생합니다.)
  6. 캔자스r3에서는,우리를r0에서 - 말도 안 돼요. 미국에 더 많은 특권을 부여하면 미국이 KS를 부패시킬 수 있습니다. 그러한 구성을 본 적이 없지만, 그러한 운영 체제를 작성하고 싶다면 아무것도 막을 수 없을 것입니다.

참고: x86 아키텍처 Intel CPU를 호출하는 등 작성 시 몇 가지 단순화를 수행했습니다. 이제 복잡한 일로 고민하지 마세요.

관련 정보