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

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

Память без использования абстракций




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

MOV REGISTER1.1000

компьютер просто перемещал содержимое физической ячейки памяти 1000 в REG-ISTER1. Таким образом, модель памяти, предоставляемая программисту, была простой физической памятью, набором адресов от 0 до некоторого максимального значения, где каждый адрес соответствовал ячейке, содержащей какое-нибудь количество бит, которое обычно равнялось восьми.

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

Даже в условиях, когда в качестве модели памяти выступает сама физическая память, возможны несколько вариантов использования памяти. Три из них показаны на рис. 3.1. Операционная система может, как показано на рис. 3.1, а, размещаться в нижней части адресов, в оперативном запоминающем устройстве (ОЗУ), или, по-другому, в памяти с произвольным доступом — RAM (Random Access Memory), или она может размещаться в постоянном запоминающем устройстве (ПЗУ), или, по-другому, в ROM (Read-Only Memory), в верхних адресах памяти, как показано на рис. 3.1, б, или же драйверы устройств могут быть в верхних адресах памяти, в ПЗУ, а остальная часть системы — в ОЗУ, в самом низу, как показано на рис. 3.1, в. Первая модель прежде использовалась на универсальных машинах и мини-компьютерах, но на других машинах использовалась довольно редко. Вторая модель использовалась на некоторых КПК и на встроенных системах. Третья модель использовалась на ранних персональных компьютерах (например, на тех, которые работали под управлением MS-DOS), где часть системы, размещавшаяся в ПЗУ, называлась базовой системой ввода-вывода — BIOS (Basic Input Output System). Недостаток моделей айв заключается в том, что ошибка в программе пользователя может затереть операционную систему и, возможно, с весьма пагубными последствиями (такими, как порча содержимого диска).

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

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



Полное описание: Память без использования абстракций




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


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

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

Загрузка компьютера
В кратком изложении загрузка компьютера на базе процессора Pentium происходит следующим образом. У каждого компьютера Pentium есть материнская плата (которую теперь в США, в результате распространения политкорректности на компьютерную индустрию, называют родительской платой). На материнской плате находится программа, которая называется базовой системой ввода-вывода — BIOS (Basic Input Output System). BIOS содержит низкоуровневое программное обеспечение ввода-вывода, включая процедуры считывания ... Читать

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

Страничная организация памяти
Большинство систем виртуальной памяти использует технологию под названием страничная организация памяти (paging), к описанию которой мы сейчас и приступим. На любом компьютере программы ссылаются на набор адресов памяти. Когда программа выполняет следующую команду MOV REG.1000 она осуществляет копирование содержимого ячейки памяти с адресом 1000 в REG (или наоборот, в зависимости от компьютера). Адреса могут генерироваться с использованием индексной адресации, базовых регистров, сегментных регис ... Читать