Составители:
29
Итак, виртуальное адресное пространство процесса делится на части —
сегменты, размер которых определяется с учетом смыслового значения
содержащейся в них информации. Отдельный сегмент может представлять собой
подпрограмму, массив данных и т. п. Деление виртуального адресного
пространства на сегменты осуществляется компилятором на основе указаний
программиста или по умолчанию, в соответствии с принятыми в системе
соглашениями. Максимальный размер сегмента определяется разрядностью
виртуального адреса, например при 32-разрядной организации процессора он
равен 4 Гбайт. При этом максимально возможное виртуальное адресное
пространство процесса представляет собой набор из N виртуальных сегментов,
каждый размером по 4 Гбайт. В каждом сегменте виртуальные адреса находятся в
диапазоне от 0000000016 до FFFFFFFF16. Сегменты не упорядочиваются друг
относительно друга, так что общего для сегментов линейного виртуального адреса
не существует, виртуальный адрес задается парой чисел: номером сегмента и
линейным виртуальным адресом внутри сегмента. (Реентерабельность
(reentrantable) — свойство повторной входимости кода, которое позволяет
одновременно использовать его несколькими процессами. При выполнении
реентерабельного кода процессы не изменяют его, поэтому в память достаточно
загрузить только одну копию кода.)
При загрузке процесса в оперативную память помещается только часть его
сегментов, полная копия виртуального адресного пространства находится в
дисковой памяти. Для каждого загружаемого сегмента операционная система
подыскивает непрерывный участок свободной памяти достаточного размера.
Смежные в виртуальной памяти сегменты одного процесса могут занимать в
оперативной памяти несмежные участки. Если во время выполнения процесса
происходит обращение по виртуальному адресу, относящемуся к сегменту,
который в данный момент отсутствует в памяти, то происходит прерывание. ОС
приостанавливает активный процесс, запускает на выполнение следующий
процесс из очереди, а параллельно организует загрузку нужного сегмента с диска.
При отсутствии в памяти места, необходимого для загрузки сегмента,
операционная система выбирает сегмент на выгрузку, при этом она использует
критерии, аналогичные рассмотренным выше критериям выбора страниц при
страничном способе управления памятью.
На этапе создания процесса во время загрузки его образа в оперативную память
система создает таблицу сегментов процесса (аналогичную таблице страниц), в
которой для каждого сегмента указывается:
− базовый физический адрес сегмента в оперативной памяти;
− размер сегмента;
− правила доступа к сегменту;
− признаки модификации, присутствия и обращения к данному сегменту, а
также некоторая другая информация.
Если виртуальные адресные пространства нескольких процессов включают
один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки
на один и тот же участок оперативной памяти, в который данный сегмент
загружается в единственном экземпляре.
Итак, виртуальное адресное пространство процесса делится на части —
сегменты, размер которых определяется с учетом смыслового значения
содержащейся в них информации. Отдельный сегмент может представлять собой
подпрограмму, массив данных и т. п. Деление виртуального адресного
пространства на сегменты осуществляется компилятором на основе указаний
программиста или по умолчанию, в соответствии с принятыми в системе
соглашениями. Максимальный размер сегмента определяется разрядностью
виртуального адреса, например при 32-разрядной организации процессора он
равен 4 Гбайт. При этом максимально возможное виртуальное адресное
пространство процесса представляет собой набор из N виртуальных сегментов,
каждый размером по 4 Гбайт. В каждом сегменте виртуальные адреса находятся в
диапазоне от 0000000016 до FFFFFFFF16. Сегменты не упорядочиваются друг
относительно друга, так что общего для сегментов линейного виртуального адреса
не существует, виртуальный адрес задается парой чисел: номером сегмента и
линейным виртуальным адресом внутри сегмента. (Реентерабельность
(reentrantable) — свойство повторной входимости кода, которое позволяет
одновременно использовать его несколькими процессами. При выполнении
реентерабельного кода процессы не изменяют его, поэтому в память достаточно
загрузить только одну копию кода.)
При загрузке процесса в оперативную память помещается только часть его
сегментов, полная копия виртуального адресного пространства находится в
дисковой памяти. Для каждого загружаемого сегмента операционная система
подыскивает непрерывный участок свободной памяти достаточного размера.
Смежные в виртуальной памяти сегменты одного процесса могут занимать в
оперативной памяти несмежные участки. Если во время выполнения процесса
происходит обращение по виртуальному адресу, относящемуся к сегменту,
который в данный момент отсутствует в памяти, то происходит прерывание. ОС
приостанавливает активный процесс, запускает на выполнение следующий
процесс из очереди, а параллельно организует загрузку нужного сегмента с диска.
При отсутствии в памяти места, необходимого для загрузки сегмента,
операционная система выбирает сегмент на выгрузку, при этом она использует
критерии, аналогичные рассмотренным выше критериям выбора страниц при
страничном способе управления памятью.
На этапе создания процесса во время загрузки его образа в оперативную память
система создает таблицу сегментов процесса (аналогичную таблице страниц), в
которой для каждого сегмента указывается:
− базовый физический адрес сегмента в оперативной памяти;
− размер сегмента;
− правила доступа к сегменту;
− признаки модификации, присутствия и обращения к данному сегменту, а
также некоторая другая информация.
Если виртуальные адресные пространства нескольких процессов включают
один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки
на один и тот же участок оперативной памяти, в который данный сегмент
загружается в единственном экземпляре.
29
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »
