OSDev
http://osdev.su/

Сегменты или страницы?
http://osdev.su/viewtopic.php?f=5&t=421
Страница 1 из 3

Автор:  418ImATeapot [ 29 май 2011, 13:35 ]
Заголовок сообщения:  Сегменты или страницы?

Приветствую всех!

Вопрос у меня такой:
Как я понял, во всех современных ОС используется страничный механизм. И один-два дескриптора на всю GDT.
Смысл в этом?
Ведь написать, скажем, шеллкод под страничную систему относительно просто. А при сегментной адресации он принципиально не возможен.
ОСь при сегментной адресации меньше и работает она надежнее.
Организовать свопинг проще чем пейджинг и работать он будет быстрее и аппаратная часть будет проще.
Или я чего-то сильно не понимаю?

Автор:  Himik [ 29 май 2011, 14:46 ]
Заголовок сообщения:  Re: Сегменты или страницы?

Я согласен, что сегментная модель является золотой серединой между двумя крайностями - монолитной и микроядерной. Беда в том, что в AMD-64 их отменили, а ведь именно высокая производительность современных процессоров и наличие большой памяти позволила бы работать этой модели эффективно.

Автор:  418ImATeapot [ 29 май 2011, 14:57 ]
Заголовок сообщения:  Re: Сегменты или страницы?

Но почему тогда используется только страничная? Из каких соображений?

Автор:  Himik [ 29 май 2011, 15:02 ]
Заголовок сообщения:  Re: Сегменты или страницы?

Сегментная модель это ведь усложнение системы, некоторое увеличение размера программ и некоторое падение производительности от частых манипуляций сегментами - на старых компьютерах это имело большое значение.

Автор:  SII [ 29 май 2011, 16:23 ]
Заголовок сообщения:  Re: Сегменты или страницы?

Страничная организация очень проста и эффективна, ею легко управлять, с её помощью возможна реализация эффективной виртуальной памяти. Сегментами управлять намного сложней, их использование резко повышает накладные расходы (перезагрузка сегментных регистров -- чрезвычайно дорогая операция независимо от того, находится ли целевой сегмент в памяти или нет). Наконец, они банально неудобны при разработке прикладных программ, и использование языков высокого уровня лишь частично скрывает сей недостаток.

Кстати говоря, к монолитности/микроядерности особенности аппаратуры управления памятью вообще не имеют не малейшего отношения.

Автор:  Himik [ 29 май 2011, 16:48 ]
Заголовок сообщения:  Re: Сегменты или страницы?

Даже без сегментной модели, во всех системах с плоской памятью, перезагрузка сегментных регистров происходит тысячи раз в секунду (из-за смены уровней привилегий во время системных вызовов, исключений и прерываний) - и ни каких проблем. Мне кажется, что "чрезвычайная дороговизна перезагрузки сегментов" несколько преувеличена.

Автор:  SII [ 29 май 2011, 17:02 ]
Заголовок сообщения:  Re: Сегменты или страницы?

Она может происходить и миллионы раз в секунду, но за аналогичное время процессор успел бы выполнить миллиарды обычных команд. Зачем тратить время на ерунду, если без этого можно обойтись, причём без какого-либо реального ущерба и дополнительных сложностей (скорей, наоборот)? Перезагрузка же сегментных регистров в связи с переключением задач и т.п. -- это неизбежное зло на архитектуре ИА-32, и от этого никуда не деться...

Автор:  Himik [ 29 май 2011, 17:28 ]
Заголовок сообщения:  Re: Сегменты или страницы?

SII писал(а):
Зачем тратить время на ерунду, если без этого можно обойтись, причём без какого-либо реального ущерба и дополнительных сложностей (скорей, наоборот)?

Тут предполагается (смотри первое сообщение), что сегментная модель даёт дополнительную защиту.

В целях защиты была придумана микроядерная модель, а я хотел добавить, что лучше бы они сегментную модель развивали, а не эмулировали разделение адресов с помощью страничного механизма, господа извращенцы.

Автор:  SII [ 29 май 2011, 17:45 ]
Заголовок сообщения:  Re: Сегменты или страницы?

Сегментация никаких реальных преимуществ не даёт, а вот управление памятью усложняет вполне себе реально. Во всяком случае, я преимуществ у неё не вижу (и, кстати, понятия не имею, что такое шеллкод). Если Вы таковые видите, то я не возражал бы от заслушивания всего списка :)

Микроядерная архитектура защиту, вообще говоря, не улучшает. Она улучшает изоляцию модулей системы друг от друга и тем самым в теории уменьшает негативные последствия от их сбоев и упрощает поиск ошибок, но не более того. Хотя косвенно защита может улучшиться, но происходит это вследствие потенциального уменьшения числа ошибок и их влияния на другие компоненты системы, а не от архитектуры как таковой.

АДД. Относительно первого сообщения. Про шеллкод уже сказал: я не знаю, что это такое; гуглить и читать нагугленное лениво, а посему и прокомментировать не могу.

Цитата:
ОСь при сегментной адресации меньше и работает она надежнее.


Оба содержащихся здесь утверждения неверны. Надёжность вообще не зависит от того, какая организация памяти используется, она зависит исключительно от качества проектирования и реализации самой системы. Управление же памятью с сегментацией а-ля ИА-32 сложней, чем управление с помощью страниц -- хотя бы в силу того, что размеры у сегментов могут быть произвольными, а страницы имеют фиксированные размеры (ну или один из нескольких размеров, причём по выбору системы).

Цитата:
Организовать свопинг проще чем пейджинг и работать он будет быстрее и аппаратная часть будет проще.


Тоже неверно. Обмениваться с диском порциями фиксированного размера проще, чем переменного (не нужно вводить дополнительные проверки и т.д. и т.п.). Скорость в среднем получается выше при страничной организации, и в первую очередь за счёт того, что сегмент приходится выбрасывать из памяти или загружать обратно целиком, а это могут быть гигабайты. Что же касается страниц, то там производится выгрузка/загрузка небольших порций данных, причём именно тех, которые действительно нужны или почти наверняка не нужны. Что немаловажно, такая "оптимизация" получается сама собой, без усилий со стороны программиста-прикладника (он лишь может ещё больше увеличить эффективность, располагая совместно используемые данные поближе друг к другу и так же поступая с кодом), а вот в случае с сегментацией от программиста зависит очень и очень много. В частности, в условиях не слишком большого объёма физической памяти неграмотное разбиение на сегменты может вообще в миллиарды раз уронить производительность (представьте себе подкачку сегмента размером 1 Гбайт через каждые 20-30 машинных команд).

Автор:  phantom-84 [ 29 май 2011, 19:11 ]
Заголовок сообщения:  Re: Сегменты или страницы?

Цитата:
Ведь написать, скажем, шеллкод под страничную систему относительно просто. А при сегментной адресации он принципиально не возможен.
??? Из-за того, что данные не могут исполняться? Так сейчас эта проблема решена и в пэйджинге. Кроме того, существуют методы защиты от исполнения данных в стеке на основе сегментов без отказа от FLAT-адресации и пэйджинга.

Цитата:
ОСь при сегментной адресации меньше и работает она надежнее.
Очень сомнительное утверждение. Кроме того, сегментация накладывает существенные ограничения на размер "подпространств", их количество. При использовании "подпространств" переменной длины возникают большие проблемы с фрагментацией.

Цитата:
Организовать свопинг проще чем пейджинг и работать он будет быстрее и аппаратная часть будет проще.
??? Я бы сказал, организовать свопинг при помощи пейджинга проще и работать он будет быстрее :) Подкачка сегментов - это вообще полный...

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/