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

Современные операционные системы
Управление памятью  Управление памятью

Управление памятью

Память представляет собой очень важный ресурс, требующий четкого управления. Несмотря на то что в наши дни объем памяти среднего домашнего компьютера в десятки тысяч раз превышает ресурсы IBM 7094, бывшего в начале 60-х годов самым большим компьютером в мире, размер компьютерных программ растет быстрее, чем объем памяти. Закон Паркинсона можно перефразировать следующим образом: «Программы увеличиваются в размерах, стремясь заполнить всю память, доступную для их размещения». В этой главе мы рассмотрим, как операционные системы создают из памяти абстракции и как они этими абстракциями управляют.

Управление памятью читать полное описание.


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

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

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

MOV REGISTER1.1000

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

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


Управление памятью  Запуск нескольких программ без абстракций памяти

Запуск нескольких программ без абстракций памяти

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

Запуск нескольких программ без абстракций памяти читать полное описание.


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

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

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

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

После загрузки программы читать полное описание.


Управление памятью  Абстракция памяти: адресные пространства

Абстракция памяти: адресные пространства

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

Абстракция памяти: адресные пространства читать полное описание.