Современные операционные системы

Современные операционные системы
Управление памятью / После загрузки программы

После загрузки программы




После загрузки программы могут быть запущены на выполнение. Поскольку у них разные ключи памяти, ни одна из них не может навредить другой. Но проблема имеет иную природу. При запуске первой программы будет выполнена команда JMP24 и, как и ожидалось, осуществлен переход к другой команде. Эта программа будет успешно работать.

Но после того как первая программа проработает достаточно долго, операционная система может принять решение на запуск второй программы, которая была загружена над первой программой, начиная с адреса 16384. Первой исполняемой командой будетJ MP 28, осуществляющая переход к команде ADD первой программы вместо того, чтобы перейти к предполагаемой команде СМР. Скорее всего, это приведет к сбою программы на первой же секунде.

В данном случае суть проблемы состоит в том, что обе программы ссылаются на абсолютный адрес физической памяти, что совершенно не соответствует нашим желаниям. Нам нужно чтобы каждая программа ссылалась на свой собственный, занимаемый ею набор адресов. Давайте вкратце рассмотрим, как это достигается. На IBM 360, например, в процессе загрузки буквально на лету осуществлялась модификация второй программы, при этом использовалась технология, известная как статическое перемещение. Она работала следующим образом: когда программа загружалась с адреса 16384, в процессе загрузки к каждому адресу в программе прибавлялось постоянное значение 16384. При всей исправности работы этого механизма он был не самым универсальным решением, которое к тому же замедляло загрузку. Более того, это решение требовало дополнительной информации обо всех исполняемых программах, служащей признаком, в каких словах содержатся, а в каких не содержатся перемещаемые адреса. В результате чего «28» на рис. 3.2, б должно было подвергнуться перемещению, а инструкция вроде MOV REGISTER1.28

которая помещает число 28 в REGISTERS должна была остаться нетронутой. Нужен был какой-нибудь способ, позволяющий сообщить загрузчику, какое из чисел относится к адресу, а какое — к константе.

И наконец, как отмечалось в главе 1, в компьютерном мире истории свойственно повторяться. Хотя прямая адресация физической памяти, к сожалению, осталась в прошлом, в устаревших устройствах памяти универсальных компьютеров, мини-компьютеров, настольных компьютеров и ноутбуков, дефицит абстракций памяти — вполне обычное явление во встроенных системах и смарт-картах. В наши дни устройства вроде радиоприемников, стиральных машин и микроволновых печей заполнены программным обеспечением (в ПЗУ), и в большинстве случаев их программы используют адресацию к абсолютной памяти. Все это неплохо работает, поскольку все программы известны заранее, и пользователи не могут запускать на бытовых устройствах какие-нибудь собственные программы.

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



Полное описание: После загрузки программы




С этим описанием рассматриваются следующие темы:


Базовый и ограничительный регистры
В простом решении используется весьма примитивная версия динамического перераспределения памяти. При этом адресное пространство каждого процесса просто проецируется на различные части физической памяти. Классическое решение, примененное на машинах от CDC 6600 (первого в мире суперкомпьютера) до Intel 8088 (сердца первой модели IBM PC), заключается в оснащении каждого центрального процессора двумя специальными аппаратными регистрами, которые обычно называются базовым и ограничительным регистрами. ... Читать

Память без использования абстракций
Простейшей абстракцией памяти можно считать полное отсутствие какой-либо абстракции. Ранние универсальные машины (до 1960 года), ранние мини-компьютеры (до 1970 года) и ранние персональные компьютеры (до 1980 года) не использовали абстракции памяти. Каждая программа просто видела физическую память. Когда программа выполняла следующую команду MOV REGISTER1.1000 компьютер просто перемещал содержимое физической ячейки памяти 1000 в REG-ISTER1. Таким образом, модель памяти, предоставляемая программи ... Читать

Виртуальная память
Виртуальная память (которая будет рассмотрена в главе 3) позволяет запускать программы, размер которых превышает объем установленной на машине физической памяти, за счет перемещения фрагментов адресного пространства между оперативной памятью и диском. Она прошла похожий путь развития, появившись впервые на универсальных машинах, затем переместившись на мини- и микрокомпьютеры. Виртуальная память также позволяла программам во время работы динамически компоноваться с библиотеками, вместо того чтоб ... Читать

Понятие адресного пространства
Чтобы допустить одновременное размещение в памяти нескольких приложений без создания взаимных помех, нужно решить две проблемы, относящиеся к защите и перемещению. Примитивное решение первой из этих проблем мы уже рассматривали на примере IBM 360: участки памяти помечались защитным ключом, и ключ выполняемого процесса сличался с ключом каждого выбранного слова памяти. Но этот подход не решал второй проблемы, хотя она могла быть решена путем перемещения программ в процессе их загрузки, но это был ... Читать

Запуск нескольких программ без абстракций памяти
Тем не менее даже в отсутствие абстракций памяти одновременный запуск нескольких программ вполне возможен. Для этого операционная система должна сохранить все содержимое памяти в файле на диске, а затем загрузить и запустить следующую программу. Поскольку одновременно в памяти присутствует только одна программа, конфликтов не возникает. Эта концепция называется заменой данных (или свопингом) и будет рассмотрена чуть позже.