[x86] CPU 권한 링 : 링 1과 2가 사용되지 않는 이유는 무엇입니까?

x86 CPU 권한 링과 관련된 몇 가지 질문 :

  • 대부분의 운영 체제에서 링 1과 2를 사용하지 않는 이유는 무엇입니까? 다른 아키텍처와의 코드 호환성을 유지하기위한 것입니까, 아니면 더 나은 이유가 있습니까?

  • 실제로 이러한 링을 사용하는 운영 체제가 있습니까? 아니면 완전히 사용되지 않았습니까?



답변

애호가 인 운영 체제 작성자로서 저는 페이징 (현대 보호 모델의 주요 부분)이 특권 (링 0,1,2) 및 비 특권이라는 개념 만 가지고 있기 때문에 링 1과 2에 대한 이점이 크게 줄어든다는 것을 발견했습니다.

링 1과 2를 갖는 인텔의 의도는 OS가 장치 드라이버를 해당 수준에 배치하는 것이므로 권한이 부여되지만 나머지 커널 코드와는 다소 분리됩니다.

링 1과 2는 어떤면에서 “대부분”특권이 있습니다. 감독자 페이지에 액세스 할 수 있지만 권한있는 명령을 사용하려고하면 링 3과 같은 GPF가 사용됩니다. 따라서 인텔이 계획 한 드라이버에게는 나쁜 곳이 아닙니다 …

즉, 일부 디자인에서 확실히 사용됩니다. 사실, 항상 OS에 의해 직접적으로는 아닙니다. 예를 들어, 버추얼 하는 가상 머신은 , 풋은 나 또한 생각해야합니다 일부 운영 체제는 그들의 메이크업의 사용을 링 1에 게스트 커널 코드는, 난 그냥이 순간에 인기있는 디자인입니다 생각하지 않습니다.


답변

OS 디자인의 관점에서 다중 권한 링을 갖는 것은 x86의 이상합니다. 대부분의 다른 CPU에는 두 가지 모드 (감독자 및 사용자) 만 있습니다. 따라서 여러 권한 모드를 요구하도록 OS를 설계하면 즉시 다른 CPU로 이식되는 것을 방지 할 수 있습니다. 또한 많은 최신 가상화 패키지는 0 및 3 이외의 권한 수준을 올바르게 에뮬레이트하지 않으므로 이러한 수준을 사용하는 OS는 테스트하기가 훨씬 더 어렵습니다.


답변

링 보안 에 대한 Wikipedia 페이지에 따르면 링 1과 2는 드라이버 (링 1), 게스트 운영 체제 (링 1) 및 I / O 권한 코드 (링 2)에 사용되며 하이퍼 바이저는 -1/0 (에 따라 하이퍼 바이저) 이전에 언급했듯이 1이 아닙니다.

그러나 여분의 두 개의 링은 실제로 도움이되지 않았기 때문에 거의 사용되지 않았습니다. TBH, 링 1과 2를 사용하는 대부분의 코드는 원래 사용 (예 : 하이퍼 바이저)에서 반 용도로 사용되었습니다. 요즘 대부분의 Windows 코드는 커널 영역에 들어오고 나가는 것과 관련된 오버 헤드로 인해 시스템을 두 수준 (커널과 사용자)으로 만 취급하는 것 같습니다.


답변