나는 운영 체제와 x86 아키텍처를 연구하고 있으며, 분할 및 페이징에 대해 읽는 동안 현대 OS가 메모리 관리를 처리하는 방법이 자연스럽게 궁금했습니다. 내가 찾은 것으로부터 리눅스와 대부분의 다른 운영 체제는 본질적으로 페이징에 유리하게 세그먼트 화를 피했다. 내가 찾은 몇 가지 이유는 단순성과 이식성이었습니다.
세그먼트 화 (x86 또는 기타)를위한 실제적인 용도는 무엇이며이를 사용하는 강력한 운영 체제를 보거나 페이징 기반 시스템을 계속 선호 할 것입니다.
이제 이것이로드 된 질문이라는 것을 알고 있지만 새로 개발 된 운영 체제에서 분할이 어떻게 처리되는지 궁금합니다. 아무도 더 '분할 된'접근법을 고려하지 않도록 페이징을 선호하는 것이 이치에 맞습니까? 그렇다면 왜 그렇습니까?
그리고 'shun'세그먼트 화를 말할 때 Linux는 Linux가 필요한만큼만 사용한다는 것을 암시합니다. 사용자 및 커널 코드 / 데이터 세그먼트에 대해 4 개의 세그먼트 만 있습니다. 인텔 설명서를 읽는 동안 세그먼트가보다 강력한 솔루션을 염두에두고 설계되었다는 느낌을 받았습니다. 그런 다음 x86이 얼마나 복잡 할 수 있는지 여러 번 들었습니다.
나는 Linux에 대한 Linux Torvald의 원래 '발표'에 링크 된 후이 흥미로운 일화를 발견했습니다. 그는 이것을 몇 개의 포스트 후에 말했다 :
간단히 말해서 이식이 불가능하다고 말하고 싶습니다. 그것은 대부분 C 언어이지만 대부분의 사람들은 내가 C라고 부르는 것을 부르지 않을 것입니다. 그것은 386에 대해 가르쳐주는 프로젝트 였기 때문에 내가 찾은 386의 모든 가능한 기능을 사용합니다. 이미 언급했듯이 MMU를 사용합니다. 페이징 (아직 디스크 아님) 및 세분화 모두에 적용됩니다. 그것은 386에 의존하게 만드는 세분화입니다 (모든 작업에는 코드 및 데이터에 대한 64Mb 세그먼트가 있습니다-4Gb에서 최대 64 개의 작업. 64Mb / 작업-터프 쿠키가 필요한 사람).
내 자신의 x86 실험으로 인해이 질문을하게 된 것 같습니다. Linus에는 StackOverflow가 없었기 때문에이를 구현하기 위해 구현했습니다.