Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Системное программное обеспечение. Учебник

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
81
Глава 3. Управление памятью
кэш-памятью. Содержимое кэш-памяти представляет собой совокупность записей обо всех загруженных в нее элементах данных. Каждая запись об элементе данных включает адрес, который этот элемент данных имеет в оперативной памяти, и управляющую информацию: признак модификации и при­знак обращения к данным за некоторый последний период вре­мени [4, 6].
Для идентификации переменных и команд используются символьные имена (метки), виртуальные адреса и физические адреса.
Символьные имена присваивает пользователь при написа­нии программы на алгоритмическом языке или ассемблере.
Виртуальные адреса вырабатывает транслятор, переводя­щий программу на машинный язык. Так как во время транс­ляции в общем случае неизвестно, в какое место оперативной памяти будет загружена программа, то транслятор присваи­вает переменным и командам виртуальные (условные) адре­са, обычно считая по умолчанию, что программа будет разме­щена начиная с нулевого адреса. Совокупность виртуальных адресов процесса называется виртуальным адресным про- странством. Каждый процесс имеет собственное виртуальное адресное пространство. Максимальный размер виртуального адресного пространства ограничивается разрядностью адре­са, присущей данной архитектуре компьютера, и, как прави­ло, не совпадает с объемом физической памяти, имеющимся в компьютере.
Физические адреса соответствуют номерам ячеек оператив­ной памяти, где в действительности расположены или будут расположены переменные и команды. Переход от виртуальных адресов к физическим может осуществляться двумя способами. Первый способ состоит в том, что замену виртуальных адресов на физические делает специальная системная программа – пе­ремещающий загрузчик. Перемещающий загрузчик на осно­вании имеющихся у него исходных данных о начальном адресе физической памяти, в которую предстоит загружать програм­му, и информации, предоставленной транслятором об адрес­но-зависимых константах программы, выполняет загрузку программы, совмещая ее с заменой виртуальных адресов фи-
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
82
зическими. Второй способ заключается в том, что програм­ма загружается в память в неизмененном виде в виртуальных адресах, при этом операционная система фиксирует смещение действительного расположения программного кода относи­тельно виртуального адресного пространства. Во время вы­полнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в фи­зический. Второй способ является более гибким, он допускает перемещение программы во время ее выполнения, в то время как перемещающий загрузчик жестко привязывает программу к первоначально выделенному ей участку памяти. Вместе с тем использование перемещающего загрузчика уменьшает наклад­ные расходы, так как преобразование каждого виртуального адреса происходит только один раз во время загрузки, а во вто­ром случае – каждый раз при обращении по данному адресу [1, 4, 6].
3.3. Организация памяти
Под организацией памяти мы понимаем то, каким образом представляется и используется память. Одну или несколько программ помещать в память? Одинаковое количество ячеек выделять каждой из нескольких программ или разбивать па­мять на части? Разбивать основную память жестким образом на длительное время либо предусмотреть более динамичное разбиение, позволяющее вычислительной машине реагиро­вать на изменения программ (их потребности в ресурсах)? Бу­дем ли делить память на блоки, размещаемые в любых свобод­ных участках (дырах) основной памяти? Существуют схемы систем, построенных по каждому из указанных выше принци­пов [1, 2, 5]. Какая же стратегия должна быть применена для достижения оптимальных характеристик?
Стратегии управления памятью определяют, каким обра­зом будет изменена ситуация при различных подходах к ре­шению следующих вопросов [1, 3, 5]: когда помещать новую программу в память; помещать ее, когда система запросит, или предупреждать вопросы; будем ли мы размещать програм­мы более плотно или более быстро, чтобы свести к минимуму
83
Глава 3. Управление памятью
потери машинного времени; если нужно поместить в память новую программу, то какую программу выводить из памяти; замещать программы, которые дольше всех находятся в памя­ти, или те, которые дольше всего не использовались?
Стратегии управления памятью определяют, каким обра­зом будет изменена ситуация при различных подходах к ре­шению следующих вопросов [1, 3, 5]: когда помещать новую программу в память? Помещать ее, когда система запросит, или предупреждать вопросы? Будем ли мы размещать про­граммы более плотно или более быстро, чтобы свести к ми­нимуму потери машинного времени? Если нужно поместить в память новую программу, то какую программу выводить из памяти? Замещать ли программы, которые дольше всех на­ходятся в памяти, или те, которые дольше всего не использо­вались?
Для эффективного использования ресурсов необходимо правильно управлять памятью. Стратегии управления памя­тью направлены на то, чтобы обеспечить наилучшее использо­вание ресурсов основной памяти. Стратегии делятся на следу­ющие категории:
1) стратегии выборки: а) стратегии выборки по запросу (требованию); б) стратегии упреждающей выборки;
2) стратегии размещения;
3) стратегии замещения.
Рассмотрим стратегии выборки. Выборка по запросу рабо­тающей программы долго считалась наиболее целесообразной, то есть блок программы или данных загружается в основную память, когда его запрашивает работающая программа. Позд­нее стали считать, что упреждающая (с прогнозированием дальнейшего хода программы) выборка может обеспечить по­вышение быстродействия системы.
Стратегия размещения ставит целью определить, в какое место основной памяти следует помещать поступающую про­грамму.
Стратегии замещения определяют, какой блок программы или данных следует вывести из основной программы («вытол­кнуть»).
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
84
3.4. Связное и несвязное распределение памяти
При связном распределении памяти каждая программа должна занимать один сплошной блок ячеек памяти (в первых вычислительных машинах). С появлением мультипрограмми­рования с разделами переменного размера стало ясно, что бо­лее эффективным может быть несвязное распределение па­мяти. При несвязном распределении программа разбивается на ряд блоков или сегментов, которые могут быть размещены в основной памяти в участках, не обязательно соседствующих друг с другом. Операционной системе сложнее обеспечивать несвязное распределение памяти, но преимущество в том, что если есть ряд небольших свободных участков вместо одного большого, то операционная система может загрузить и вы­полнить программу, которой в противном случае пришлось бы ждать [1, 3, 6].
В мультипрограммных системах несколько пользователей одновременно «состязаются» за обладание машинными ресур­сами. При этом задание, ожидающее в текущий момент завер­шения операций ввода-вывода, будет уступать центральный процессор другому заданию, готовому для выполнения вычисле­ний. То есть одновременно выполняются операции и ввода-вы­вода, и вычисления. Это повышает коэффициент использования центрального процессора и производительность системы. Но по­тенциальные возможности мультипрограммирования можно использовать только в том случае, если в основной памяти ком­пьютера размещается сразу несколько заданий.
В основном все методы управления памятью могут быть разделены на два класса: методы, которые используют переме­щение процессов между оперативной памятью и диском, и ме­тоды, которые не делают этого.
Наиболее простым способом управления оперативной па­мятью является ее деление на несколько разделов фиксиро- ванной величины. При очевидном преимуществе – простоте реализации, данный метод имеет существенный недостаток – жесткость. Так как в каждом разделе может выполняться только одна программа, то уровень мультипрограммирования
85
заранее ограничен числом разделов, независимо от того, ка­кой размер имеют программы. Даже если программа имеет не­большой объем, она будет занимать весь раздел, что приводит к неэффективному использованию памяти. С другой стороны, даже если объем оперативной памяти машины позволяет вы­полнить некоторую программу, разбиение памяти на разделы не позволяет сделать этого.
Глава 3. Управление памятью
3.5. Распределение памяти разделами переменной величины
При распределении памяти разделами переменной вели­чины память машины не делится заранее на разделы. Сначала вся память свободна. Каждой вновь поступающей задаче выде­ляется необходимая ей память. Если достаточный объем памя­ти отсутствует, то задача не принимается на выполнение и сто­ит в очереди. После завершения задачи память освобождается, и на это место может быть загружена другая задача. Таким об­разом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера.
По сравнению с методом распределения памяти фиксиро­ванными разделами данный метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток – фраг-
ментация памяти.
Фрагментация – это наличие большого числа несмежных
участков свободной памяти очень маленького размера (фраг­ментов). Настолько маленького, что ни одна из вновь посту­пающих программ не может поместиться ни в одном из участ­ков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти.
Одним из методов борьбы с фрагментацией является пе­ремещение всех занятых участков в сторону старших либо в сторону младших адресов, с тем чтобы вся свободная па­мять образовывала единую свободную область. В дополнение к функциям, которые выполняет ОС при распределении па­мяти переменными разделами, в данном случае она должна
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
86
еще время от времени копировать содержимое разделов из од­ного места памяти в другое, корректируя таблицы свободных и занятых областей. Эта процедура называется сжатием. Сжа­тие может выполняться либо при каждом завершении задачи, либо только тогда, когда для вновь поступившей задачи нет свободного раздела достаточного размера. В первом случае тре­буется меньше вычислительной работы при корректировке та­блиц, а во втором – реже выполняется процедура сжатия. Так как программы перемещаются по оперативной памяти в ходе своего выполнения, то преобразование адресов из виртуальной формы в физическую должно выполняться динамическим спо­собом.
В первых мультипрограммных системах основная па­мять разбивалась на ряд разделов фиксированного размера. В каждом разделе могло размещаться одно задание. Транс­ляция и загрузка модулей производилась в абсолютных адре­сах с расчетом на выполнение только в конкретном разделе. Реализация операционной системы была простой, но неэф­фективно использовались ресурсы [1, 3, 5]. Использовалось мультипрограммирование с фиксированными разделами, но трансляция и загрузка осуществлялась с перемещаемыми мо­дулями, которые могут работать в любом свободном разделе (раньше приходилось готовому заданию ждать, если раздел был занят). Это было сложнее, но эффективнее.
При мультипрограммировании с переменными разделами заданиям выделяется такой объем памяти, какой они требуют, но в том случае, если механизмы планирования операционной системы решают, что их необходимо выполнить. В основной па­мяти здесь также остаются «дыры», то есть свободные участки.
Существует метод уплотнения памяти, состоящий в пере­мещении всех занятых участков к одному или другому краю основной памяти. Однако это отнимает ресурсы системы, ко­торые можно было бы использовать более продуктивно.
3.6. Мультипрограммирование со свопингом
Все рассмотренные выше системы мультипрограммиро­вания предполагают, что программы пользователя остаются в основной памяти до момента завершения. Существует схема,
87
Глава 3. Управление памятью
называемая свопингом, которая не накладывает подобного требования. Здесь в каждый момент времени в основной памя­ти размещается только одна программа и работает она до тех пор, пока не произойдет одно из следующих событий [1, 2, 3]:
• выдан запрос ввода-вывода;
• появился сигнал таймера;
• программа завершилась.
Область свопинга для этой программы копируется во внеш­нюю память. Образ оперативной памяти для следующей про­граммы загружается в область свопинга, и эта программа рабо­тает до тех пор, пока не уступит место следующей программе, и т.д.
При реализации систем с разделением времени, особенно первых, применялся свопинг. На основе систем со свопингом, существовавших в начале 1960-х годов, были созданы системы со страничной организацией памяти. Затем были разработаны более сложные системы со свопингом, которые позволяли раз­мещать в основной памяти прикладные программы сразу не­скольких пользователей.
3.7. Организация виртуальной памяти
Итак, термин «виртуальная память» связан с возможно­стью адресовать пространство памяти, превышающее емкость реальной физической памяти. Существуют два способа реали­зации виртуальной памяти: страничная и сегментная. Иногда применяется комбинация этих способов. В целом считается, что наиболее распространенными способами реализации вир­туальной памяти являются страничное, сегментное и странич­но-сегментное распределения памяти, а также свопинг [6].
Суть концепции виртуальной памяти заключается в том, что адреса, к которым обращается выполняющийся процесс, отделяются от адресов, реально существующих в первичной памяти. Те адреса, на которые делает ссылки выполняющий­ся процесс, называются виртуальными адресами, а те адреса, которые существуют в первичной памяти, называются реаль- ными (или физическими) адресами. Диапазон виртуальных адресов, к которым может обращаться выполняющийся про­цесс, называется пространством виртуальных адресов V этого
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
88
процесса. Диапазон реальных адресов, существующих в кон­кретной вычислительной машине, называется пространством реальных адресов R этого компьютера.
Во время выполнения процесса виртуальный адрес необ­ходимо преобразовать в реальный адрес. Причем это нужно делать быстро, ибо в противном случае производительность вычислительной машины будет снижаться до неприемлемого уровня. Для установления соответствия между виртуальны­ми и реальными адресами разработаны разные способы. Рас­пространен способ с применением механизма динамического преобразования адресов (ДАТ). В этом случае преобразование виртуальных адресов в физические происходит во время вы­полнения процесса. Смежные адреса виртуального адресного пространства процесса при этом не обязательно будут смежны­ми в реальной памяти.
Широкое применение находит многоуровневая организация виртуальной памяти. В мультипрограммном режиме с совмест­ным использованием (разделением) ресурсов реальной памяти многими пользователями необходимо обеспечить средства хра­нения программ и данных в большой вспомогательной памяти. Обычно реализуется двухуровневая схема построения памяти.
Первый уровень – это реальная память, в которой находят­ся выполняемые процессы и в которой должны размещаться данные, чтобы процесс во время работы мог к ним обращаться.
Второй уровень – это внешняя память большой емкости, способная хранить программы и данные, которые не могут сразу уместиться в реальной памяти ограниченной емкости.
Механизм динамического преобразования адресов должен вести таблицы, показывающие, какие ячейки виртуальной па­мяти в текущий момент времени находятся в реальной памяти и где именно. Если бы такое отображение осуществлялось по­словно или побайтно, то информация об отображении занима­ла бы много места. Поэтому используется поблочное отображе- ние. Элементы информации группируются в блоки, и система следит за тем, в каких местах реальной памяти размещаются различные блоки виртуальной памяти. Чем больше размер бло­ка, тем меньшую долю емкости реальной памяти приходится затрачивать на хранение информации отображения.
89
Номер блока b Смещение d
Глава 3. Управление памятью
Формат виртуального адреса в системе табличного отобра­жения имеет следующий вид:
Виртуальный адрес: V = (b, d).
Если блоки имеют одинаковый размер, то они называются
страницами, а организация виртуальной памяти называется страничной. Если блоки могут быть разных размеров, они на-
зываются сегментами, а организация виртуальной памяти соот­ветственно сегментной. В некоторых системах оба этих подхода комбинируются, то есть сегменты реализуются как объекты пе­ременных размеров, формируемые из страниц фиксированного размера. Адреса в системе поблочного отображения являются двухкомпонентными («двумерными»). Чтобы обратиться к кон­кретному элементу данных, программа указывает блок, в кото­ром этот элемент располагается, и смещение этого элемента от­носительно начала блока. Преобразование адреса виртуальной памяти V = (b, d) в адрес реальной памяти r осуществляется та­ким образом, как это показано на рис. 3.2.
Регистр начального адреса таблицы блоков
+
Рис. 3.2. Преобразование виртуального адреса
Адрес блока в реальной памяти
I
Длина
bʹ
Номер блока b
Смещение d
+
Виртуальный адрес
V
= (b, d)
r
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Номер страницы p Смещение d
90
Каждый процесс имеет собственную таблицу отображения блоков, которые система ведет в реальной памяти. Реальный адрес a этой таблицы загружается в специальный регистр цен­трального процессора, называемый регистром начального адреса таблицы блоков. Таблица отображения блоков содер­жит по одной строке для каждого блока процесса, причем эти строки идут в последовательном порядке: блок 0, блок 1 и т.д. Номер блока b суммируется с базовым адресом a таблицы, об­разуя реальный адрес строки таблицы для блока b. Эта строка содержит реальный адрес b′ блока b в реальной памяти. К это­му начальному адресу b′ прибавляется смещение d, и образует­ся нужный реальный адрес: r = b′ + d.
При страничной организации формат виртуального адреса следующий:
Виртуальный адрес: V = f(p, d).
Реальная память разделяется на страничные кадры, кото­рые нумеруются. Динамическое преобразование адресов в си­стеме со страничной организацией осуществляется следующим образом: механизм отображения страниц ищет номер страни­цы p в таблице отображения страниц и определяет, что эта стра­ница p находится в страничном кадре с номером p′. Адрес реаль­ной памяти формируется затем путем конкатенации p′ и d. Есть и более сложные способы преобразования адресов страниц.
Коллективное использование программ и данных в систе­ме со страничной организацией осуществляется в мультипро-
граммных вычислительных машинах, чаще всего в системах с разделением времени, когда многие пользователи выполняют одни и те же программы. Эти программы обычно состоят из от­дельных частей, области данных и области процедур. Бывают изменяемые и неизменяемые процедуры и данные. Изменяе-
мые данные коллективно использовать нельзя, а неизменяемые данные (таблицы) можно. Решение проблемы коллективного
использования программ и данных состоит в том, чтобы коллек­тивно (совместно) использовать (разделять) те страницы, кото­рые можно разделять [1, 4, 5].
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]