Я изучаю операционные системы и архитектуру x86, и пока я читал о сегментации и разбиении на страницы, мне, естественно, было любопытно, как современные ОС управляют управлением памятью. Из того, что я обнаружил, Linux и большинство других операционных систем по существу избегают сегментации в пользу подкачки. Несколько причин, которые я нашел, были простота и портативность.
Какие практические применения существуют для сегментации (x86 или иным образом), и когда-нибудь мы увидим надежные операционные системы, использующие ее, или они будут продолжать отдавать предпочтение системе на основе подкачки.
Теперь я знаю, что это загруженный вопрос, но мне любопытно, как будет обрабатываться сегментация в недавно разработанных операционных системах. Имеет ли смысл отдавать предпочтение пейджингу, чтобы никто не рассматривал более «сегментированный» подход? Если так, то почему?
И когда я говорю «избегать» сегментации, я подразумеваю, что Linux использует его только настолько, насколько это необходимо. Только 4 сегмента для пользовательского и ядра кода / сегментов данных. Читая документацию Intel, я только почувствовал, что сегментация была разработана с учетом более надежных решений. С другой стороны, мне много раз говорили, насколько сложным может быть x86.
Я нашел этот интересный анекдот после того, как связался с оригинальным «анонсом» Linux Торвальда для Linux. Он сказал это несколькими постами позже:
Просто я бы сказал, что портирование невозможно. Это в основном на C, но большинство людей не стали бы называть то, что я пишу C. Он использует все мыслимые возможности 386, которые я смог найти, так как это был также проект, чтобы рассказать мне о 386. Как уже упоминалось, он использует MMU , как для подкачки (пока не на диск), так и для сегментации. Именно сегментация делает ее по-настоящему зависимой от 386 (каждая задача имеет сегмент размером 64 МБ для кода и данных - максимум 64 задачи в 4 ГБ. Любой, кому нужно более 64 МБ / задача - жесткие файлы cookie).
Я полагаю, что мои собственные эксперименты с x86 заставили меня задать этот вопрос. У Линуса не было StackOverflow, поэтому он просто реализовал его, чтобы попробовать.