<<
>>

Виртуальная память 11Ы1Х

Модель памяти 1Ж1Х довольно проста. Каждый процесс имеет три сегмента: код, данные и стек, как показано на рис. 6.26. В машине с линейным адресным пространством код обычно располагается в нижней части памяти, а за ним следуют данные.
Стек помещается в верхней части памяти. Размер кода фиксирован, а данные и стек могут увеличиваться или уменьшаться. Такую модель легко реализовать практически на любой машине. Она используется в операционной системе Бокпз.

Рис. 6.26. Адресное пространство одного процесса в UNIX

Более того, если машина поддерживает страничную память, то все адресное пространство может быть разбито на страницы совершенно прозрачно для пользовательских программ. Им будет известно только то, что размер программы может превышать размер физической памяти машины. Те системы UNIX, которые не поддерживают страничную организацию памяти, обычно подкачивают целые процессы между памятью и диском, чтобы параллельно могло выполняться произвольное число процессов.

Данное ранее описание системы UNIX (виртуальная память с подкачкой страниц по требованию) в целом соответствует версии Berkeley UNIX, однако версии Sysytem V и Solaris имеют некоторые особенности, позволяющие пользователям управлять виртуальной памятью.

Самой важной является способность процесса отображать файл или часть файла на часть адресного пространства процесса. Например, если файл размером 12 Кбайт отображается на виртуальный адрес 144К, то в ячейке с адресом 144К будет находиться первое слово этого файла. Таким образом, можно выполнять ввод-вывод файла без системных вызовов. Поскольку размер некоторых файлов превышает размер виртуального адресного пространства, можно отображать не весь файл, а только его часть. Для отображения сначала нужно открыть файл и получить дескриптор файла fd (file descriptor).
Дескриптор используется для идентификации отображаемого файла. Затем процесс совершает вызов

paddr = mmap(virtual_address, length, protection, flags, fd, file_offset)

Этот вызов отображает length байт, начиная со смещения file_offset в файле, на виртуальное адресное пространство, начиная с адреса virtual_address. Параметр flags требует, чтобы система выбрала виртуальный адрес, который затем возвращается в параметре paddr. Отображаемая область должна быть выровнена в границах страницы и содержать целое число страниц. Параметр protection определяет уровень защиты, включая возможность чтения, записи и выполнения (в любой комбинации). Отображение можно в дальнейшем удалить с помощью команды unmap.

Несколько процессов могут одновременно выполнять отображение одного и того же файла. Есть два варианта разделения. В первом варианте общими являются все страницы, поэтому записи, сделанные одним процессом, доступны всем другим процессам. Эта возможность обеспечивает высокоскоростное взаимодействие между процессам. Во втором варианте страницы остаются общими для всех процессов до тех пор, пока ни один из процессов их не меняет. Как только какой-нибудь процесс попытается произвести запись в страницу, он получит ошибку защиты, в результате которой операционная система предоставит ему собственную копию этой страницы для записи. Такая схема, которая называется копированием при записи (copy on write), используется в том случае, когда для каждого из нескольких процессов нужно создать иллюзию, что только он выполняет отображение файла.

<< | >>
Источник: Таненбаум Э.. Архитектура компьютера. 5-е изд. 2007

Еще по теме Виртуальная память 11Ы1Х:

  1. Виртуальное послесловие
  2. ГЛАВА 11 ПРАВОВЫЕ ПРОБЛЕМЫ ВИРТУАЛЬНОЙ СРЕДЫ ИНТЕРНЕТ
  3. Виртуальное сексуальное насилие над детьми
  4. Память прошлого и память будущего
  5. ПАМЯТЬ: КЛАССИФИКАЦИЯ
  6. Понимание и память
  7. Понимание и память
  8. ПАМЯТЬ КРАТКОВРЕМЕННАЯ
  9. ПАМЯТЬ ОПЕРАТИВНАЯ
  10. ПАМЯТЬ ГЕНЕТИЧЕСКАЯ
  11. Память рода
  12. ПАМЯТЬ: МЕХАНИЗМ ФИЗИОЛОГИЧЕСКИЙ
  13. ПАМЯТЬ ОБРАЗНАЯ
  14. ПАМЯТЬ МГНОВЕННАЯ
  15. ПАМЯТЬ БУФЕРНАЯ
  16. ПАМЯТЬ
  17. ПАМЯТЬ ЭМОЦИОНАЛЬНАЯ
  18. ПАМЯТЬ ИКОНИЧЕСКАЯ