Главная страница  Межпроцессное взаимодействие (состязание) 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 [ 109 ] 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

Глава 4

Управление памятью

Память представляет собой важный ресурс, требующий тщательного управления. Несмотря на то что в наши дни память среднего домашнего компьютера в тысячи раз превышает ресурсы IBM 7094 - машины, бывшей в начале 60-х годов самой мощной в мире, - программы все равно превосходят в росте компьютерную память. Перефразированный закон Паркинсона гласит: Программное обеспечение увеличивается в размерах до тех пор, пока не заполнит всю доступную на данный момент память .

В этой главе мы рассмотрим, как операционная система управляет памятью. В идеале каждый программист хотел бы иметь неограниченную по объему и скорости память, при этом также являющуюся энергонезависимой, то есть сохраняющую свое содержимое при выключении электричества - отключении от источников питания. Раз уж мы взялись за эту тему, то почему бы заодно не помечтать о дешевой памяти? К сожалению, технологии не могут обеспечить подобные пожелания. Вследствие этого память в компьютерах имеет иерархическую структуру. Небольшая часть ее представляет собой очень быструю, дорогую, энергозависимую (то есть теряющую информацию при выключении питания) кэш-память. Кроме того, компьютеры обладают десятками мегабайтов средне-скоростной, средней ценовой категории, также энергозависимой оперативной памяти ОЗУ (RAM) и десятками или сотнями гигабайтов медленного, дешевого, энергонезависимого пространства на жестком диске. Одной из задач операционной системы является координация использования всех этих составляющих.

Часть операционной системы, отвечающая за управление памятью, называется модулем управления памятью или менеджером памяти. Он следит за тем, какая часть памяти используется в данный момент, а какая - свободна; при необходимости выделяет память процессам и по их завершении освобождает ресурсы; управляет обменом данных между оперативной памятью и диском, если та слишком мала для того, чтобы вместить все процессы.

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

Ближе к началу книги мы обращали внимание на то, что в компьютерном мире история имеет тенденцию к повторениям, и хотя простейшие схемы управления памятью больше не используются в настольных ПК, они все еще работают в карманных компьютерах, встроенных системах и смарт-картах. Именно по этой причине их до сих пор стоит изучать.



4.1. Простые способы управления памятью

Системы управления памятью можно разделить на два класса: перемещающие процессы между оперативной памятью и диском во время их выполнения и те, которые этого не делают. Второй вариант проще, поэтому начнем с него, а способы с подкачкой (подкачка процессов полностью - swapping или страничная - paging) мы изучим во вторую очередь. Читая главу 4, следует помнить, что обычный и постраничный варианты подкачки в значительной степени являются искусственными процессами, вызванными отсутствием достаточного количества оперативной памяти для одновременного хранения всех программ. Если же когда-нибудь оперативная память настолько увеличится в размерах, что ее будет достаточно для любых целей, аргументы в пользу той или иной схемы управления могут потерять актуальность.

4.1.1. Однозадачная система без подкачки на диск

Самая простая из возможных моделей управления памятью заключается в том, что в каждый конкретный момент времени работает только одна программа, при этом память разделяется между профаммами и операционной системой. На рис. 4.1 показаны три варианта такой схемы. Операционная система может находиться в нижней части памяти, то есть в ОЗУ (оперативное запоминающее устройство, RAM (Random Access Memory - память с произвольным доступом)); см. рис. 4.1, а.

Программа пользователя

Операционная система в ПЗУ

OxFFF

Операционная система в ПЗУ

Программа пользователя

Драйверы устройств в ПЗУ

Программа пользователя

Операционная система в ПЗУ

Рис. 4.1. Три простейшие модели организации памяти при наличии операционной системы и одного пользовательского процесса. Существуют также и другие возможные варианты

Или же операционная система может располагаться в самой верхней части памяти - в ПЗУ (постоянное запоминающее устройство, ROM (Read-Only Memory - память только для чтения)), как продемонстрировано на рис. 4.1, б. И третий способ: драйверы устройств могут размещаться в ПЗУ, а остальная часть системы - ниже в ОЗУ, как показано на рис. 4.1, в. Первая модель раньше



применялась на мэйнфреймах и мини-компьютерах, но в настоящее время практически не употребляется. Вторая схема сейчас используется в некоторых карманных компьютерах и встроенных системах, а третья модель устанавливалась на ранних персональных компьютерах (например, работающих с MS-DOS), при этом часть системы в ПЗУ носила название bios (Basic Input Output System - базовая система ввода/вывода).

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

4.1.2. Многозадачность с фиксированными разделами

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

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

Когда задание поступает в память, его можно расположить во входной очереди к наименьшему разделу, достаточно большому для того, чтобы вместить это задание. Так как в данной схеме размер разделов одинаков, все не используемое работающим процессом пространство в разделе пропадает. На рис. 4.2, а показано, как выглядит система с фиксированными разделами и отдельными очередями входных заданий.

Недостаток упорядочения входящих заданий по отдельным очередям становится очевидным, когда к большому разделу очередь отсутствует, в то время как к маленькому выстроилось в нетерпении довольно много задач; в нашем примере на рис. 4.2, а это разделы 1 и 3. Небольшие задания должны ждать своей очереди, чтобы попасть в память, и это все несмотря на то, что память в основном свободна. Альтернативная схема заключается в организации одной общей очереди для всех разделов, как показано на рис. 4.2, б: как только раздел освобождается, задачу, ближайшую к началу очереди и подходящую для выполнения в этом разделе, можно загрузить в него и начать ее обработку. Поскольку нежелательно тратить большие разделы на маленькие задачи, существует другая стратегия. Она состоит в том, что каждый раз после освобождения раздела происходит по-



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 [ 109 ] 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

© 2000 - 2018 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.