еу

еу

Xalion

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

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

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


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

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

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

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

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

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

Каждый сегмент не зависит друг от друга.
Они расширяются или уменьшаются без ошибок


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

Report Page