Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций 1 сем ос.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
457.73 Кб
Скачать

Занятие 3.Работа с памятью

Требования к управлению памятью

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

Защита: при работе программ должен быть механизм, который защищает область памяти программы, от вторжения в нее других программ.

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

оптимальное размещение: при размещении программ в памяти, необходимо разработать способ максимально эффективного ее использования

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

Распределение памяти в многозадачных системах

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

В первых ОС память размещалась очень просто – каждая программа начиналась с одного и того же адреса т.е. каждая следующая накладывалась на предыдущую. Если часть программы оставалась в памяти, то при следующей загрузке догружалась только недостающая часть. Например:

память

выполнение задачи 1

выполнение задачи 2

выполнение задачи 3

выполнение задачи 2

0 000 - 5 000

Система

Система

Система

10 000

задача 1

задача 2

задача 3

догрузка 2

15 000

задача 2

задача 2

20 000

25 000

свободная память

32000

свободная память

свободная память

свободная память

В этом примере для загрузки задачи 2 повторно не требуется загружать ее всю ( т.к. часть ее уже находится в памяти), а только недостающую часть, которую использовала задача 3 до этого..

Однако такое распределение неэффективно. Например, задачу3 можно было разместить в свободном участке и тогда задачу2 не пришлось бы повторно догружать. Поэтому появились другие системы распределения памяти:

раздел 8М

раздел 8М

раздел 8М

раздел 8М

...


Фиксированное распределение:

вся память делится на одинаковые части – разделы. Каждой программе отводится свой раздел. Однако для маленьких программ, большая часть раздела остается неиспользованной ( это называется внутренней фрагментацией), а для больших программ одного раздела недостаточно и приходится программисту использовать «оверлеи» т.е. распределять размещение данных в памяти в нескольких разделах, а затем позаботиться о переключении на использование то одного, то другого раздела, так как в каждый момент работы должен использоваться только один раздел. Т.е. программист сам должен позаботиться о распределении памяти, что сильно усложняет его работу и требует много времени на разработку программ. Бороться с этим можно путем использования фиксированных разделов разного размера:

16М

...

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

Динамическое распределение: для каждой программы выделяется строго необходимое ей место и не более. Однако при освобождении памяти образуются между разделами активных программ «дырки» от освободившихся мест и размеры их не всегда подходят для размещения следующих программ. Это называется внешней фрагментацией. Для решения этой проблемы приходится выполнять упаковку фрагментов памяти в сплошной поток с освобождением одного свободного пространства. Однако, это требует дополнительной загрузки процессора, что замедляет работу программ.

1 прогр

2 прогр

4 прогр

6пр

...

система «двойников»: это был компромисс между динамическим и фиксированным распределением, по которому память выделялась блоками размером 2к . Допустим вся память размером 1 М, тогда для размещения программы 100кБ подбирается блок следующим образом: вся память делится пополам ( т.е. на 2 части по 512 кБ), затем снова пополам ( по 128Кб) и отводится для программы кусок 128Кб т.к. при следующем делении программа уже не разместится. По такому же принципу размещаются остальные программы в оставшейся части памяти. При образовании двух подряд одинаковых свободных кусков они объединяются в один блок. Например, при запросе на размещение программ А( =100Кб) , В ( =186 Кб) и С( =52Кб) они будут размещены последовательно так:

А - 128

128 Кб

256 Кб

512 Кб

А - 128

128 Кб

В - 256

512 Кб

А - 128

С-64

64Кб

В - 256

512 Кб

Страничная организация: Вся память разбивается на небольшие блоки одинакового размера – страницы. Для каждой программы отводится необходимое ей количество страниц. При этом страницы могут находиться не подряд, а вразброс. Поэтому для каждой программы создается своя таблица страниц. Реальный адрес памяти формируется из логического адреса, который состоит из номера страницы и смещения внутри страницы. Преобразование адреса выполняет система невидимо для программиста. За счет малых размеров страниц внутренняя фрагментация небольшая, а внешняя отсутствует.

Сегментация: второй способ разбивки на блоки, но разбивается не оперативная память, а программа на сегменты. При этом они могут быть разного размера, но есть максимальный предел. Физический адрес вычисляется аналогично страничной памяти путем сложения номера сегмента и смещения внутри сегмента. В отличие от страниц, сегменты «видимы» для программиста и он в программе может распределять по ним код программы и данные.

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

Виртуальная память

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

Для работы с виртуальной памятью наиболее удобна страничная организация памяти: каждая загружаемая и выгружаемая на диск часть программы – это одна страница. Однако с виртуальной памятью работают и системы с сегментацией памяти.

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

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

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

Кэш – память

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

Вопросы на повторение:

  • Какие задачи стоят перед разработчиками ОС по управлению памятью. Как распределялась память в первых ОС. За счет чего получается ускорение работы с оперативной памятью при наличии кэш-памяти.

  • Принцип фиксированного и простого динамического распределения памяти.

  • Принцип работы страничной памяти и сегментированной ( в чем отличия). Как работает смешанная система страничной памяти и сегментированной

  • Назначение и принцип работы виртуальной памяти. Какой механизм разработан для ускорения работы виртуальной памяти.