Сегментная организация памяти.
Программисты при страничной организации памяти в процессе выделения памяти не вмешивается и его реализует ОС.
При сегментной организации памяти программист формирует отдельные части программы в виде сегментов, каждый из которых может быть либо сегментом данных, либо сегментом кодов, либо сегментом управляющей структуры, буфер, стек, РСВ.
При сегментной организации памяти каждый сегмент приобретает свой тип и размер, т.е. у него есть некоторый базовый адрес и размер сегмента (bas addr+size).
С компиляцией программ связаны два базовых понятия: адрес начала сегмента и размер этого сегмента.
Механизм работы осуществляется следующим образом: когда процессор обращается к памяти, он имеет свое собственное пространство, состоящее из адреса и размера сегмента.
Адрес сегмента берется из таблицы сегментов (которые в данный момент свободны), при этом табличный сегмент, если его адрес свободен и существует в таблице сегментов состоит из виртуального адреса и размера, записываемого в табличный сегмент.
Если адресация оказывается больше, тогда фиксируется ошибка (да).
Если адресация оказывается меньше – выделяется тот кусок физической памяти, который соответствует этому сегменту.
При этом выделенный адрес сегмент получает из табличных сегментов.
Адресация идет за счет смещения внутри сегмента.
При этом, предварительная проверка перед выделением физической памяти для процесса, гарантирует, что нет ошибок при выделении памяти.
Удобстводанного метода состоит в том, что каждый процесс может содержать любое количество сегментов под выполняемый код, данные, стеки, очереди, буфера для обмена ввода-вывода. При этом каждый процесс может содержать сегменты. Тогда строится таблица сегментов, в ней самое главное – это выделенный адрес сегмента.
Однако в данном случае получается ситуация, когда мы не можем заранее сказать сколько в рамках данной задачи требуется выделить сегментов, также неизвестен их размер, Механизм реализации:
На уровне HARDWARE (реализации) выделяется STBR (Segment table base register) – таблица базовых адресов регистров, содержащая базовый адрес сегмента. Остальные адреса находятся в ОП, на них ссылается базовый адрес.
Удобство:не важно, сколько сегментов в процессе.
Каждый сегмент имеет адрес и размер. Алгоритмически, до упрощения операции получения адреса в ОП, вместо суммирования: адрес+размер, происходит операция конкатенации, то есть для получения адреса к старшим разрядам адреса сегмента добавляются младшие разряды смещения.
Механизм выделения памяти позволил развивать ОС дальше.
Замечание: на практике сегментное выделение памяти комбинируют со страничным выделением. Это позволяет избежать внешней сегментации памяти, то есть остается только внутристраничная фрагментация.
Достоинство:
- Каждый сегмент может получать тип выделения памяти, то есть может
быть сегмент, имеющий статус выполняемого кода, только для чтения, для чтения и записи. Что позволяет в ОП организовать копии выполняемых процессов в одном экземпляре.
- Области данных, используемые разными процессами
Если запущены два процесса, например, два раза вызвали текстовый редактор. Каждый процесс имеет начальный адрес и смещение.
В ОП грузятся процессы (через пересчет адреса, процесс занимает место в ОП)
После загрузки первого сегмента, грузится следующий сегмент.
Адрес i = адрес 1, а Размер i = размер 1.
Следовательно, процесс Word лежит в ОП в одном экземпляре.
Такой механизм требует от ОП использования одного и того же исполняемого кода с данными, которые берутся из разных сегментов данных.
PSP (segment prefix) – описание сегмента, требующееся для выполнения процесса.
При завершении процесса ОС должна освободить все сегменты ОП, связанные с ним.
Максимальный объем программы, выполняемой в WINDOWS (адресное пространство) равно 4Гб.