еу
XalionДве статьи назад, мы начали разбирать организацию памяти со стороны ОС.
Первая статья была про страничную память.
Страничная память — представление виртуальной памяти списком страниц. Он называется "виртуальное адресное пространство".
Вторая про механизмы вызова страниц. Часто, программы не помещаются в оперативку, поэтому часть программы остаётся на диске. Страницы медленно меняются друг с другом, с помощью двух алгоритмов: LRU или FIFO.
LRU — удаляет самую не востребованную страницу.
FIFO — удаляет страницы по принципу "первый пришёл — первый ушёл".
Сегментная память создаёт много виртуальных адресных пространств.
Эти пространства называются сегментами. В сегменте хранятся однотипные элементы: тип переменных программы, стек, буфер.
Сегментная память нужна для постоянно меняющихся структур. В сегментах удобно хранить стек вызовов для программы, потому что он не будет выходить за границы сегмента.
Хранить стек в странице не получится по одной из двух причин:
Первая — стек не сможет записать новые вызовы.
Вторая — стек начнёт записывать новые вызовы в страницу с количеством переменных.
Сегменты расширяются и уменьшаются без ошибок, они расположатся так.
- В сегментах удобно хранить процедуры. Если программист перепишет процедуру, компилятору не придётся менять границы следующих процедур потому что они в разных сегментах.
- Если программы работают параллельно, то ОС не нужно создавать копию процедуры для каждой программы. Такой подход экономит память.
- Сегменты можно защищать. Например, разрешить только чтение для сегмента с количеством переменных или разрешить запись и чтение для сегмента со стеком.