홈페이지 » 어떻게 » 왜 x86 CPU는 4 개의 링중 2 개만 사용합니까?

    왜 x86 CPU는 4 개의 링중 2 개만 사용합니까?

    운영 체제와 하드웨어가 작동하는 방식과 상호 작용하는 방식에 대해 자세히 알아볼 때 "리소스"가 이상하게 사용되거나 사용률이 낮은 것으로 보이는 것이 놀랄 수 있습니다. 그게 왜? 오늘의 수퍼 유저 Q & A 게시물에는 궁금한 독자의 질문에 대한 답변이 있습니다..

    오늘의 질문 및 답변 세션은 Q & A 웹 사이트의 커뮤니티 중심 그룹 인 Stack Exchange의 하위 부문 인 수퍼 유저의 도움으로 이루어졌습니다..

    사진 제공 : Lemsipmatt (Flickr).

    질문

    수퍼 유저 리더 AdHominem은 x86 CPU가 4 개의 링 중에서 2 개만 사용하는 이유를 알고 싶어합니다.

    Linux 및 Windows 기반 x86 시스템에서만 사용 반지 0 커널 모드 및 반지 3 사용자 모드 용. 왜 프로세서가 어쨌든 두 가지를 사용하면 결국 네 개의 다른 링을 구별 할 수 있습니까? AMD64 아키텍처로 변경되었습니다.?

    x86 CPU가 4 개의 링 중에서 2 개만 사용하는 이유는 무엇입니까??

    대답

    수퍼 유저 기고 가인 Jamie Hanrahan이 답변 해주었습니다.

    주된 두 가지 이유가 있습니다..

    첫 번째는 x86 CPU가 네 개의 링 보호 기능을 제공하지만 보호 기능의 세분성은 세그먼트 수준에서만 가능하다는 것입니다. 즉, 각 세그먼트는 쓰기 금지와 같은 다른 보호와 함께 특정 벨 (권한 수준)로 설정할 수 있습니다. 하지만 사용할 수있는 세그먼트 설명자가별로 없습니다. 대부분의 운영 체제는 개별 페이지에 대한 ...보다 미세한 메모리 보호 수준을 원합니다..

    따라서 페이지 테이블 기반 보호를 입력하십시오. 대부분은 아니지만, 현대의 x86 운영 체제는 대부분 분할 메커니즘을 무시합니다 (가능한 한 많이). 페이지 테이블 항목의 하위 비트에서 사용할 수있는 보호 기능에 의존합니다. 이 중 하나는 "특권"비트라고합니다. 이 비트는 프로세서가 페이지에 액세스하기 위해 "특권"레벨 중 하나에 있어야하는지 여부를 제어합니다. '특권'레벨은 PL 0, 1 및 2. 그러나 페이지 단위 보호 수준에서 메모리 보호와 관련하여 사용할 수있는 "모드"의 수는 단지 두 가지입니다. 한 페이지는 비 특권 모드에서 액세스 할 수 있는지 여부는 알 수 없습니다. 따라서, 단지 두 개의 고리. 각 페이지에 대해 네 개의 가능한 링을 가지려면 세그먼트 설명자와 마찬가지로 네 개의 가능한 링 번호 중 하나를 인코딩하기 위해 각 페이지 테이블 항목에 두 개의 보호 비트가 있어야합니다. 그러나 그들은.

    다른 이유는 운영 체제 이식성에 대한 욕망입니다. 그것은 단지 x86에 관한 것이 아닙니다. 유닉스는 운영체제가 다중 프로세서 아키텍처에 비해 상대적으로 이식성이 있다는 것과 좋은 점이라고 가르쳐 주었다. 일부 프로세서는 두 개의 링만 지원합니다. 아키텍처의 다중 링에 의존하지 않음으로써 운영 체제 구현 자들은 운영 체제를 더 이식 가능하게 만들었습니다.

    Windows NT 개발과 관련된 세 번째 이유가 있습니다. NT의 디자이너 (DEC Cutler와 그의 팀, Microsoft가 DEC Western Region Labs에서 고용 한 팀)는 VMS에 대한 광범위한 경험을 가지고있었습니다. 실제로 커틀러 (Cutler)와 그 외 몇 명은 VMS의 독창적 인 디자이너 중 한 명이었습니다. 그리고 VMS가 설계된 VAX 프로세서에는 4 개의 링이 있습니다 (VMS는 4 개의 링을 사용합니다).

    그러나 VMS에서 실행되는 구성 요소 반지 1과 2 (레코드 관리 서비스 및 CLI)는 NT 디자인에서 제외되었습니다.. 반지 2 VMS는 실제로 운영 체제 보안에 관한 것이 아니라 사용자의 CLI 환경을 한 프로그램에서 다른 프로그램으로 보존하는 것에 관한 것이 었습니다. Windows에는 그러한 개념이 없었습니다. CLI는 일반 프로세스로 실행됩니다. VMS의 경우 반지 1, 에있는 RMS 코드 반지 1 전화해야했다. 반지 0 꽤 자주, 그리고 링 전환은 비쌉니다. 그냥 가려면 훨씬 더 효율적이라고 밝혀졌습니다. 반지 0 많은 것을 가지기보다는 그것으로 끝내라. 반지 0 전환 반지 1 코드 (다시 말하지만, NT에는 RMS와 같은 것이 없습니다).

    운영 체제가 사용하지 않는 동안 x86이 4 개의 링을 구현 한 이유에 대해서는 x86보다 훨씬 더 최근의 운영 체제에 대해 이야기하고 있습니다. x86의 많은 시스템 프로그래밍 기능은 NT 나 진정한 유닉스 커널이 구현되기 오래 전에 설계되었으며, 운영체제가 무엇을 사용할 지 실제로 알지 못했다. 우리가 진정한 Unix-ish 또는 VMS 같은 커널을 구현할 수있는 x86 페이징을 얻을 때까지는 아니 었습니다..

    현대 x86 운영 체제는 세그먼트 화를 거의 무시할뿐만 아니라 기본 주소가 0이고 크기가 4GB 인 C, D 및 S 세그먼트를 설정하고 F 및 G 세그먼트는 때때로 주요 운영 체제 데이터 구조를 가리키는 데 사용됩니다 ), 그들은 또한 "task state segments"와 같은 것을 대부분 무시합니다. TSS 메커니즘은 스레드 컨텍스트 스위칭을 위해 명확하게 설계되었지만 너무 많은 부작용이있는 것으로 밝혀졌습니다. 따라서 현대의 x86 운영 체제에서는 "손으로"수행합니다. x86 NT가 하드웨어 작업을 변경하는 유일한 시간은 이중 오류 예외와 같은 일부 예외적 인 조건입니다.

    x64 아키텍처와 관련하여 이러한 많은 기능이 생략되었습니다. AMD는 실제로 운영 체제 커널 팀과 이야기하고 x86에서 필요로하는 것, 필요하지 않거나 원하지 않는 것, 추가 할 내용을 물었습니다. x64의 세그먼트는 흔적 형태라고 할 수있는 것, 작업 상태 전환이 존재하지 않는 것 등에 만 존재하며 운영 체제는 계속해서 두 개의 링만 사용합니다..


    설명에 추가 할 것이 있습니까? 의견에서 소리가 나지. 다른 기술에 정통한 Stack Exchange 사용자의 답변을 더 읽고 싶습니까? 전체 토론 스레드를 여기에서 확인하십시오..