Виртуальная память. Сегментная память

Виртуальная память. Сегментная память

Xalion

Две статьи назад мы начали разбирать организацию памяти со стороны ОС.

Первая статья была про страничную память.
Страничная память — представление виртуальной памяти списком страниц. Он называется "виртуальное адресное пространство".

Вторая про механизмы вызова страниц. Часто программы не помещаются в оперативку, поэтому часть программы остаётся на диске. Страницы медленно меняются друг с другом с помощью двух алгоритмов: LRU или FIFO.
LRU — удаляет самую не востребованную страницу.
FIFO — удаляет страницы по принципу "первый пришёл — первый ушёл".


Сегментная память создаёт много виртуальных адресных пространств.
Эти пространства называются сегментами. В сегменте хранятся однотипные элементы: тип переменных программы, стек, буфер.

Красный прямоугольник — выделенный кусочек памяти для программы

Сегментная память нужна для постоянно меняющихся структур. В сегментах удобно хранить стек вызовов для программы, потому что он не будет выходить за границы сегмента.

Хранить стек в странице не получится по одной из двух причин: 
Первая — стек не сможет записать новые вызовы.
Вторая — стек начнёт записывать новые вызовы в страницу с количеством переменных.

Красные прямоугольники — страницы

Сегменты расширяются и уменьшаются без ошибок, они расположатся так.

Каждый сегмент не зависит друг от друга


  1. В сегментах удобно хранить процедуры. Если программист перепишет процедуру, компилятору не придётся менять границы следующих процедур, потому что они в лежат разных сегментах.
  2. Если программы работают параллельно, то ОС не нужно создавать копию процедуры для каждой программы. Программы будут одновременно обращаться к процедуре в сегменте. Такой подход экономит память.
  3. Сегменты можно защищать. Например, разрешить только чтение для сегмента с количеством переменных или разрешить запись и чтение для сегмента со стеком.


В следующей статье разберём виртуализацию.

Report Page