온라인 리눅스 커널과 많은 x86 튜토리얼에서 두 코드 세그먼트와 두 개의 데이터 세그먼트를 사용하는 것이 좋습니다. 두 개의 코드 세그먼트가 필요하다는 것을 이해합니다. CPL이 DPL (일치하지 않는 세그먼트의 경우)과 정확히 일치해야하기 때문입니다.두 개의 겹치는 데이터 세그먼트 (예 : Linux 커널)가있는 이유는 무엇입니까?
그러나이 튜토리얼과 StackOverflow 관련 질문 중 특히 두 가지 데이터 세그먼트가 필요한 이유는 분명하지 않습니다. CPL = 0 인 프로세스는 DPL = 3 인 데이터 세그먼트에 액세스 할 수 있으므로 코드 세그먼트와 다르게 작동합니다.
두 개의 데이터 세그먼트가있는 단점은 서로 다른 권한 수준의 프로세스간에 전환하는 경우 DS, ES 등의 레지스터를 다시로드해야한다는 것입니다.
내 구체적인 질문입니다 : 플랫 메모리 모델을 사용하므로 모든 코드와 세그먼트가 완전히 겹치지 만 한 명의 사용자가 아닌 사용자와 커널 데이터 세그먼트를 갖는 목적은 무엇입니까? 데이터 세그먼트?