Главная.
Новости.
Программы.
Файлы.
Контакты.
Чат "Пиво".
Форум.
Статьи.
Ссылки.
Гостевая.
|
Организация памяти.
Организация памяти представляет собой аппаратный механизм, позволяющий операционной системе создавать для выполняющихся программ упрощенную среду. Например, при одновременном выполнении нескольких программ каждой из них должно быть дано независимое адресное пространство. При разделении всеми этими программами одного и того же адресного пространства каждая из них должна была бы выполнять сложные и занимающие много процессорного времени проверки, чтобы избежать влияния на другие программы.
Организация памяти состоит из сегментации и подкачки страниц. Сегментация служит для того, чтобы дать каждой программе несколько независимых, защищенных адресных пространств. Подкачка страниц используется для поддержки среды, в которой большие адресные пространства моделируются на базе небольшой области оперативной памяти и некоторой дисковой памяти. Разработчики систем могут использовать как оба этих механизма, так и любой из них. При одновременном выполнении нескольких программ для защиты программ от влияния на них других программ можно использовать любой механизм.
Сегментация позволяет иметь полностью неструктурированную и простую память, подобную модели памяти 8-битового процессора, либо высоко структурированную память, с использованием трансляции адресов и защиты. Средства организации памяти работают с единицами, которые называются сегментами. Каждый сегмент представляет собой независимое, защищенное адресное пространство. Доступ к сегментам управляется данными, в которых описаны их размер, уровень привилегированности, который нужен для доступа к ним, типы ссылок к памяти, применимые к этому сегменту (выборка команды, помещение или извлечение из стека, операция чтения, операция записи и т.д.), а также его присутствие в памяти.
Сегментация служит для управления доступом к памяти, что полезно для нахождения ошибок при разработке программы и для повышения надежности конечного продукта. Она также используется для упрощения компоновки объектных модулей кода. Механизм сегментации делает ненужным создание кодов, независимых от позиции в памяти, поскольку все ссылки к памяти могут выполняться относительно базового адреса кодового сегмента и сегмента данных модуля. Сегментация может быть использована для создания ПЗУ-резидентных программных модулей, в которых фиксированные адреса (фиксированные в том смысле, что они не могут быть изменены) представляют собой смещения относительно базового адреса сегмента. Различные программные системы могут иметь модули ПЗУ в различных физических адресах, по скольку механизм сегментации в любом случае позволяет правильно направить все ссылки к памяти.
В случае простой архитектуры памяти все адреса относятся к одному и тому же адресному пространству. Это модель памяти, используемая 8-битовыми микропроцессорами, такими как 8080, где логический и физический адреса совпадают. Процессор i486 может быть использован подобным же образом посредством отображения всех сегментов в одном и том же адресном пространстве и запрещения подкачки страниц памяти. Такая модель может понадобиться при адаптации старых разработок для 32-разрядной машины без учета новых архитектурных средств этой машины.
Прикладная программа также частично может использовать механизм сегментации. Частая причина отказа программного обеспечения состоит в том, что стек растет и "вклинивается" в область командных кодов или данных программы. Для того, чтобы предотвратить такого рода ошибку, можно воспользоваться мехнизмом сегментации. Стек можно поместить в другое адресное пространство, нежели то, где находятся кодовый сегмент и сегмент данных. Адреса стека всегда будут относиться к памяти стекового сегмента, тогда как адреса данных всегда будут относиться к памяти, распределенной сегменту данных. Стековый сегмент будет иметь максимальный размер, принудительно установленный аппаратным обеспечением. Любая попытка увеличить размер стека за установленное значение приведет к возникновению исключения.
Сложная программная система может использовать все средства, предоставляемые сегментацией. Например, система, в которой программы разделяют данные в режиме реального времени, может иметь возможность очень точно управлять доступом к этим данным. Когда программа делает попытку неверного доступа к данным, такая ошибка приводит к генерированию исключения. Это может служить как вспомогательное отладочное средство при разработке программы, а также может использоваться для запуска восстановительных процедур при ошибке в системах, предназначенных для конечного пользователя.
Аппаратное обеспечение сегментации транслирует сегментированный (логический) адрес в адрес непрерывного, несегментированного адресного пространства, который называется линейным адресом. Если разрешена подкачка страниц, то аппаратное обеспечение подкачки транслирует линейный адрес в физический адрес. Если подкачка страниц не разрешена, то в качестве физического адреса используется сразу линейный адрес. Физический адрес подается на выходящую из процессора адресную шину.
Подкачка страниц представляет собой механизм, который служит для моделирования большого несегментированного адресного пространства при помощи малого фрагментированного адресного пространства и некоторого объема дисковой памяти. Подкачка страниц обеспечивает доступ к структурам данных, превышающим по размеру доступное пространство оперативной памяти, благодаря тому, что часть таких структур держится в оперативной памяти, а часть - на диске.
Подкачка выполняется по блокам размером в 4К, которые и называются страницами. Когда программа пытается обратиться к странице, которая в этот момент находится на диске, в программе происходит специальное прерывание. В отличие от прочих исключений и прерываний, исключение, генерируемое при транслировании адреса, восстанавливает содержимое регистров процессора в значения, позволяющие повторить выполнение команды, вызвавшей данное исключение. Такие специальные действия носят названия перезапуска команды. Это позволяет операционной системе прочесть страницу с диска, обновить отображение линейных адресов в физические адреса для данной страницы и перезапустить программу. Такой процесс прозрачен для программы.
Если операционная система никогда не устанавливает бит 31 регистра CR0 (бит PG), механизм подкачки страниц никогда не будет разрешен. Тогда линейные адреса будут одновременно являться и физическими адресами. Это может быть в тех случаях, когда разработка, которая была сделана для 16-разрядного процессора, адаптируется для использования 32-разрядного процессора. Операционная система, написанная для 16-разрядного процессора, не использует механизма подкачки страниц, поскольку размер ее адресного пространства настолько мал (64Кбайт), что гораздо более эффективным является механизм свопинга между оперативной памятью и диском целых сегментов, нежели отдельных страниц памяти.
Подкачка страниц должна быть разрешена для операционных систем, которые могут поддерживать виртуальную память с подкачкой страниц по требованию, например UNIX. Подкачка страниц прозрачна для прикладного программного обеспечения, поэтому операционная система, которая должна поддерживать прикладные программы, написанные для 16-битовых процессоров, может выполнять эти программы с разрешенной подкачкой страниц. В отличие от подкачки, сегментация не прозрачна для прикладных программ. Программы, использующие сегментацию, должны выполняться с теми сегментами, которые были назначены для использования при разработке этих программ.
>>
|