WYOS - Выпуск №8
Управление памятью
commrade, Среда, 30 Июнь 2004, 16:38

Напиши свою ОС! #8
Здравствуйте, уважаемые подписчики!

В сегоднешнем выпуске речь пойдет об управлении памятью. Управление памятью - это один из основных моментов работы любой ОС. Для начала необходимо отметить, что память можно разделить на два типа: физическая (реальная) и виртуальная. Эти два типа тесно взаимосвязанны, но подход к управлению памятью немного разный. Так как тему управления памятью одним выпуском не охватить, то в этом выпуске будет рассмотренно управление физической памятью, а в следующем - виртуальной.

Физическая память

Физическая память делится на три части:

<ul>
<li><i>основная памя</i> - это где происходит непосредственно выполнение прогрммы или обращение к данным.
<li><i>вторичная памя</i> - это то место, где храняться данные ("" диск и т. п.).
<li><i>кэш памя</i> - программы хранящиеся в основной памяти, для своего выполнения передаются
в сверхскоростную кэш-память поскольку это обеспечивает значительный выигрыш во времени выполнения.
</ul>

Большинство современных устройств хранения данных (вторичная память) в своем распоряжение имеет кэш для более быстрого доступа программ к данным.
Организация памяти

<p>Чтобы программы можно было выполнять, а к данным можно было обращаться, они должны размещаться
в основной памяти. Программы и данные, которые в настоящий момент не нужны, можно хранить во
вторичной памяти, а затем когда в этом возникнет необходимость, переписывать в основную память
для выполненения и использования. Типовая иерархическая организация памяти представлена на рисунке 1
(данный рисунок взят из источника [1]).</p>
<p align='center'><img src='files/images/articles/wyos/Org_Memory.png' alt='
Org_Memory.png' width='512' height='384'></p>
<p>На самом деле организация работы памяти намного сложнее. Она зависит от многих праметров:
какая будет стратегия управлении памятью,
как распределяется память между программами,какая система однопользователская или многопользоватеьская,
однозадачная среда или многозадачная.</p>

Cтратегия управления памятью
Стратегии управления памятью делятся на следующие категории:

<ol>
<li>Стратегии выборки:
<ol style="list-style: lower-alpha">
<li>стратегии выборки по запросу
<li>стратегии упреждающей выборки
</ol>
<li>Стратегии размещения
<li>Стратегии замещения
</ol>
<i>Стратегии </i> ставят своей целью определять, когда следует "" очередной блок программы или данных
в основную память.<br>
<i>Стратегии размещения</i> ставят своей целью определить, в какое место основной памяти следует помещать поступающую программу.<br>
<i>Стратегии замещения</i> ставят своей целью определить, какой блок программы или данных следует вывести из основной памяти, чтобы
освободить место для записи поступающих программ или <br></p>

Распределение памяти

<p>В начале начал первые ЭВМ требовали, чтобы каждая программа занимала один сплошной блок ячеек памяти. Только когда появились
многозадачные ОС стало ясно, что такое распределение памяти мягко говоря не эффектино.</p>
<p>Существует три способа распределения памяти:<br>
<ul>
<li><i>Несвязанное распределение памя</i> - задача или процесс разбивается на ряд блоков, или сегментов, которые могут размещаться
в различных участках памяти, не обязательно соседних. Данный способ больше всего подходит для многозадачных ОС, так как позволяет
ОС загрузить и выполнить программу, которой в противном случае пришлось бы ждать, так как имеет не один большой участок памяти, а несколько.
Но тут появляется проблема свойственная современным ОС это фрагментация памяти.<br>
<li><i>Связанное распределение памя</i> - задача или процесс занимает один сплошной блок ячеек памяти.
<li><i>Страничное распределение памя</i> - вся адресуемая память (основная, вторичная) разбивается на фрагменты равной длины, называемые страницами. Это деление
не оказывает влияния на расположение задания в памяти. Более того, все страницы независимо перемещаются в основную память
и из нее, заданию могут быть выделены несмежные страницы, т.е. страницы одного задания могут располагаться в разных местах основной памяти.
</ul>
<p>Проблема фрагментации памяти решается различными способами. Наиболее перспективные методы: распределение перемещаемыми
разделами и страничная организация. При распределении перемещаемыми разделами производится перемещение разделов так, чтобы
свободные участки памяти стали смежными.</p>
<p>Для реализации метода страничного распределения используется специальный регистр, называемый таблицей страниц. Распределение страницами может быть реализованно программно
или с использованием аппаратных средств. Последние дают экономию на преобразовании адресов. Кстати говоря исследования, которые проводили на заре времен ЭВМ, показали, что
использование для реализации этих методов только программных средств неэффективно, а внекоторых случаях сводит все усилия к нулю.</p>

[size]Многопользоватеьность и многозадачность/size]

<p>Самые первые ОС как правило были однопользователскими и однозадачными и при этом были супер-громадных размеров, а пользователи
обходились без Explorer'ов, Far'ов и без (о ужас!!!!!!) Winamp'ов. Основные проблемы, которые возникают в современных ОС (многопользоватеских и
многозадачных), это проблема защита параллельно работающих программ друг от друга (будет рассмотренна в следующем разделе данной рассылки,
защита данных пользователей. Об защите данных пользователей можно сказать только, то что эта проблема решается еще на уровне файловой системы
и на уровне ядра ОС. Это проблеме посвящены целые диссертации и научные исследования. C моей же точки зрения данная проблема лучше
всего реализована в системах типа Unix, когда другой пользователь из своего акаунта не сможет просто физически получить доступ
к данным другого пользователя. А Win'98 наглядный пример как этого делать не нужно (сразу скажу, что ничего против Win'98 я не имею, в каком-то смысле
данная ОС мне сейчас ближе всего нежели Win'2000 или WinXP).</p>

Послесловие

<p>И напоследок хочу сказать, что при подговке данной статьи в основном я использовал сведения из книги
Дейтля "Введение в операционные " год издания 1984. Сразу предвидя камни брошенные в мою сторону по поводу
"" данной книги хочу сказать. что может она и не содержит наипоследнейшиесведения в области разработки
ОС, но она рассказывает об основных моментах этого дела и дает полное представление о работе ОС даже современных. Так я например
только прочитав ее некоторые главы понял некоторые моменты работы Win'98. Побольше бы таких книг. Если в этой статье
по вашему мнению я допустил ошибки
либо вы считаете, что я в корне не прав пишете на мыло - я постараюсь ответить.</p>

Источники литературы и интересные ссылки
<ol>
<li>Дейтель "Введение в операционные ", 1984 г.
<li>Г. Н. Лихачев, В. Д. Медведев, "Операционные ", изд: "", 1980 г.
<li><a href="http://www.nondot.org/~sabre/os/">http://www.nondot.org/~sabre/os/</a> - хороший источник информации, правда англоязычный, ну да это не беда
<li><a href="http://www.nondot.org/~sabre/os/articles/MemoryManagement/">Memory Management</a> - подробные сведения об различных видах управления памятью
</ol>


это контент от Центр информации по операционным системам
( http://www.osrc.info/plugins/content/content.php?content.12 )