Память и отображения, виртуальное адресное пространство. Непрерывные распределения.
С другой
стороны, существует понятие физическом оперативной памяти, собственно с
которой и работает процессор, извлекая из нее команды и данные и помещая в нее
результаты вычислении. Физическая память представляет
собой упорядоченное множество ячеек, и все они пронумерованы, то есть к каждой
из них можно обратиться, указан ее порядковый номер (адрес). Количество ячеек
физической памяти ограничено и фиксировано.
Системное
программное обеспечение должно связать каждое указанное пользователем имя с
физической ячейкой памяти, то есть осуществить отображение пространства имен па
физическую память компьютера. В общем случае это отображение осуществляется в
два этапа (рис. 2.5): сначала системой программирования, а затем операционной
системой (с помощью специальных программных модулей управления памятью и
использования соответствующих аппаратных средств вычислительной системы). Между
этими этапами обращения к памяти имеют форму виртуального или
логического адреса. При этом можно сказать, что множество всех допустимых
значений виртуального адреса для некоторой программы определяет ее виртуальное
адресное пространство или виртуальную память. Виртуальное
адресное пространство программы прежде всего зависит от архитектуры процессора
и от системы программирования и практически не зависит от объема реальной
физической памяти, установленной в компьютер. Можно еще сказать, что адреса
команд и переменных в готовой машинной программе, подготовленной к
выполнению системой программирования, как раз и являются виртуальными адресами.
Одним из частных
случаев отображения пространства имен на физическую память является
тождественность виртуального адресного пространства физической памяти. При этом
нет необходимости осуществлять второе отображение. В данном случае говоря г, ч
то система программирования генерирует абсолютную двоичную программу, в
этой программе все двоичные адреса таковы, что программа может исполняться
только в том случае, если ее виртуальные адреса будут точно соответствовать
физическим. Часть программных модулей любой операционной системы обязательно
должна быть абсолютными двоичными программами. Эти программы размещаются по
фиксированным адресам и с их помощью уже можно впоследствии реализовывать
размещение остальных программ, подготовленных системой программирования таким
образом, что они могут работать на различных физических адресах (то есть на
тех адресах, па которые их разместит операционная система).
Другим частным
случаем этой общей схемы трансляции адресного пространства является
тождественность виртуального адресного пространства исходному пространству
имен. Здесь уже отображение выполняется самой ОС, которая во время исполнения
использует таблицу символьных имен. Такая схема отображения используется
чрезвычайно редко, так как отображение имен на адреса необходимо выполнять для
каждого вхождения имени (каждого нового имени) и особенно много времени
тратится на квалификацию имен. Данную схему можно было встретить в
интерпретаторах, в которых стадии трансляции и исполнения практически
неразличимы. Это характерно для простейших компьютерных систем, в которых
вместо операционной системы использовался встроенный интерпретатор (например, Basic).
непрерывное распределение
Простое
непрерывное распределение — это самая пропан схема, согласно которой вся
память условно может быть разделена на три части:
□ область, занимаемая операционном системой;
□ область, и
которой размещается исполняемая задача;
□ незанятая ничем (свободная) область памяти.
Изначально
являясь самой первой схемой, она продолжает и сегодня быть достаточно
распространенной. Эта схема предполагает, что ОС не подчеркивает
мультипрограммирование, поэтому не возникает проблемы распределения памяти
между несколькими задачами. Программные модули, необходимые для всех программ,
располагаются в области самой ОС, а вся оставшаяся память может быть
предоставлена задаче. Для область памяти при этом получается непрерывной, что
облегчает работу системы программирования. Поскольку и различных однотипных
вычислительных комплексах может быть разный состав внешних устройств (и,
соответственно, они содержат различное количество драйверов), для системных
нужд могут быть отведены отличающиеся объемы оперативной памяти, и получается,
что можно не привязывать жестко виртуальные адреса программы к физическому
адресному пространству. Эта привязка осуществляется па этапе загрузки задачи в
память.
Чтобы для задач
отнести как можно больший объем памяти, операционная система строится таким
образом, что постоянно в оперативной памяти располагается только самая нужная
ее часть. Эту часть ОС стали называть ядром. Остальные модули ОС могут быть
обычными диск-резидентными (или транзитными), то есть загружаться в оперативную
память только по необходимости, и после своего выполнения вновь освобождать
память.
Такая схема
распределения влечет за собой два вида потерь вычислительных ресурсов — потеря
процессорного времени, потому что процессор простаивает, пока задача ожидает
завершения операций ввода/вывода, и потеря самой оперативной памяти, потому
что далеко не каждая программа использует всю память, а режим работы в этом
случае однопрограммный. Однако это очень недорогая реализация и можно
отказаться от многих функций операционной системы. В частности, такая сложная
проблема, как защита памяти, здесь почти не стоит.
|