КЛ16-17. Исправление ссылок и правки текста

* Правка картинок

* Правка текста

* Правка текста Л16

* Правки текста Л17

* Правки картинок в Л16
This commit is contained in:
Katic-05
2023-12-27 11:37:30 +03:00
committed by GitHub
parent 961613f267
commit 3738a1aca9
2 changed files with 64 additions and 60 deletions

View File

@@ -37,18 +37,18 @@
## Иерархия памяти ## Иерархия памяти
**Иерархия памяти** - это объединение разных типов памяти с целью получения большой, дешевой, и быстрой памяти, с чем можно более подробно ознакомиться на *(рис. 2)*. Наивысший уровень иерархии (**Cache**) обычно является наиболее быстрым и наименее емким, в то время как нижний уровень обычно имеет наибольший объем, но и наибольшую задержку (**Secondary (external) Memory**). **Иерархия памяти** это объединение разных типов памяти с целью получения большой, дешевой и быстрой памяти, с чем можно более подробно ознакомиться на *(рис. 2)*. Наивысший уровень иерархии (**Cache**) обычно является наиболее быстрым и наименее емким, в то время как нижний уровень обычно имеет не только наибольший объем, но и наибольшую задержку (**Secondary (external) Memory**).
![../.pic/Lectures/16.%20Cache%20memory/fig_02.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_02.jpg) ![../.pic/Lectures/16.%20Cache%20memory/fig_02.png](../.pic/Lectures/16.%20Cache%20memory/fig_02.png)
*Рис. 2. Схема расположения разных типов памяти и пирамида иерархии памяти.* *Рис. 2. Схема расположения разных типов памяти и пирамида иерархии памяти.*
**SRAM** (Static Random-Access Memory) - тип быстрой полупроводниковой памяти, который сохраняет данные без необходимости периодического обновления. Используется в кэш-памяти процессоров из-за своей высокой скорости. **SRAM** (Static Random-Access Memory) тип быстрой полупроводниковой памяти, который сохраняет данные без необходимости периодического обновления. Используется в кэш-памяти процессоров из-за своей высокой скорости.
**DRAM** (Dynamic Random-Access Memory) - тип полупроводниковой памяти, который требует периодического обновления для сохранения данных. **DRAM** (Dynamic Random-Access Memory) тип полупроводниковой памяти, который требует периодического обновления для сохранения данных.
**SSD** (Solid-State Drive) - устройство хранения данных, работающее на основе NAND-памяти. **SSD** (Solid-State Drive) устройство хранения данных, работающее на основе NAND-памяти.
**HDD** (Hard Disk Drive) - устройство хранения данных, использует магнитные диски для записи и чтения данных, имеет больший объем по сравнению с SSD, но скорость доступа к данным обычно ниже. **HDD** (Hard Disk Drive) устройство хранения данных, использует магнитные диски для записи и чтения данных, имеет больший объем по сравнению с SSD, но скорость доступа к данным обычно ниже.
Несмотря на то, что кэш-память во много раз быстрее основной памяти, она еще в большее число раз меньше её. Разумеется объем кэша меняется от процессора к процессору, но для определенности возьмем следующий пример: допустим, в процессорной системе кэш 32МБ, а объем оперативной памяти — 32ГБ. Получается, кэш меньше основной памяти в 1024 раза. Как же так получается, что обращаясь в кэш, процессор умудряется получать именно те данные, которые запрашивал? Ведь если вероятность того, что кэш содержит нужные процессору данные составляет 1/1024-ую, то он будет ухудшать производительность системы, а не улучшать ее. Этому способствует такое явление как **локальность данных**. Несмотря на то что кэш-память во много раз быстрее основной памяти, она еще в большее число раз меньше её. Разумеется, объем кэша меняется от процессора к процессору, но для определенности возьмем следующий пример: допустим, в процессорной системе кэш 32МБ, а объем оперативной памяти — 32ГБ. Получается, кэш меньше основной памяти в 1024 раза. Как же так получается, что, обращаясь в кэш, процессор умудряется получать именно те данные, которые запрашивал? Ведь если вероятность того, что кэш содержит нужные процессору данные, составляет 1/1024-ую, то он будет ухудшать производительность системы, а не улучшать ее. Этому способствует такое явление как **локальность данных**.
## Локальность данных ## Локальность данных
@@ -67,7 +67,7 @@
- Где могут быть размещены данные в кэш-памяти? ([**Размещение строки в разных видах кэшах-памяти**](#существует-3-вида-кэш-памяти)) - Где могут быть размещены данные в кэш-памяти? ([**Размещение строки в разных видах кэшах-памяти**](#существует-3-вида-кэш-памяти))
- Как найти данные в кэш-памяти? ([**Идентификация строки**](#идентификация-строки)) - Как найти данные в кэш-памяти? ([**Идентификация строки**](#идентификация-строки))
- Какие данные нужно заместить, при заполненной кэш-памяти? ([**Алгоритмы замещение строки**](#алгоритмы-замещения-данных)) - Какие данные нужно заместить при заполненной кэш-памяти? ([**Алгоритмы замещение строки**](#алгоритмы-замещения-данных))
- Что происходит при записи в кэш-память? ([**Стратегия записи**](#стратегии-чтения-и-записи-в-кэш)) - Что происходит при записи в кэш-память? ([**Стратегия записи**](#стратегии-чтения-и-записи-в-кэш))
## Характеристики кэш-памяти ## Характеристики кэш-памяти
@@ -79,10 +79,10 @@
*Порция перемещения данных между разными уровнями иерархии памяти.* *Порция перемещения данных между разными уровнями иерархии памяти.*
- Количество строк (блоков) ***B*** = C/b - Количество строк (блоков) ***B*** = C/b
- Степень ассоциативности ***N*** - Степень ассоциативности ***N***
*Количество места в кэш-памяти на которое претендует конкретная строка. Каждая ячейка может располагаться только в одном наборе, один набор может состоять из нескольких строк - это и есть степень ассоциативности.* *Количество места в кэш-памяти, на которое претендует конкретная строка. Каждая ячейка может располагаться только в одном наборе, один набор может состоять из нескольких строк это и есть степень ассоциативности.*
**Наборы в кэш-памяти**: **Наборы в кэш-памяти**:
Кэш дробится на подгруппы, которые называются наборами. Особенность наборов заключается в том, за каждой ячейкой памяти закреплен свой набор. Иными словами, ячейка памяти может быть загружена не в любое место кэша. Кэш дробится на подгруппы, которые называются наборами. Их особенность заключается в том, что каждая ячейка памяти закреплена за своим набором. Иными словами, ячейка памяти может быть загружена не в любое место кэша.
- Кэш ***состоит из S наборов***, каждый из которых содержит одну или несколько строк. - Кэш ***состоит из S наборов***, каждый из которых содержит одну или несколько строк.
- Взаимосвязь между адресом в памяти и расположением в кэш называется ***отображением***. - Взаимосвязь между адресом в памяти и расположением в кэш называется ***отображением***.
@@ -124,14 +124,14 @@
### Идентификация строки ### Идентификация строки
Каждая ячейка памяти претендует только на свой набор и имеет свой уникальный адрес. На *(рис. 5)* подробнее рассмотрим как уникальный адрес делится на несколько частей: Каждая ячейка памяти претендует только на свой набор и имеет свой уникальный адрес. На *(рис. 5)* подробнее рассмотрим, как уникальный адрес делится на несколько частей:
![../.pic/Lectures/16.%20Cache%20memory/fig_05.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_05.jpg) ![../.pic/Lectures/16.%20Cache%20memory/fig_05.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_05.jpg)
*Рис. 5. Схематичное представление разделения уникального адреса ячейки памяти на составляющие части.* *Рис. 5. Схематичное представление разделения уникального адреса ячейки памяти на составляющие части.*
где где
Первые 2 бита (**Byte Offset**) - смещение внутри слова Первые 2 бита (**Byte Offset**) смещение внутри слова
Следующие три бита (**Set**) указывают, на какой набор претендует ячейка памяти. Следующие три бита (**Set**) указывают, на какой набор претендует ячейка памяти.
Оставшиеся 10 бит представляют собой **Tag**, с помощью которого определяется, находится ли ячейка в кэш-памяти или нет. Оставшиеся 10 бит представляют собой **Tag**, с помощью которого определяется, находится ли ячейка в кэш-памяти или нет.
@@ -177,7 +177,7 @@ done:
*Рис. 7. Визуализация процесса выполнения ассемблерного кода, иллюстрирующая проблему вытеснения ячейки памяти с адресами 4 и 24.* *Рис. 7. Визуализация процесса выполнения ассемблерного кода, иллюстрирующая проблему вытеснения ячейки памяти с адресами 4 и 24.*
Соответственно **MR** в данном случае будет 100%: Соответственно, **MR** в данном случае будет 100%:
![../.pic/Lectures/16.%20Cache%20memory/formula_02.jpg](../.pic/Lectures/16.%20Cache%20memory/formula_02.jpg) ![../.pic/Lectures/16.%20Cache%20memory/formula_02.jpg](../.pic/Lectures/16.%20Cache%20memory/formula_02.jpg)
@@ -185,22 +185,22 @@ done:
Идея множественно-ассоциативного кэша заключается в наличии нескольких строк внутри одного набора. Увеличив ассоциативность, мы теперь имеем двухсекционный кэш (**Way 1** и **Way 0**) *(рис. 8)*. Каждая ячейка памяти может претендовать на любую из этих двух секций, и, в таком случае, вытеснения не произойдет. Идея множественно-ассоциативного кэша заключается в наличии нескольких строк внутри одного набора. Увеличив ассоциативность, мы теперь имеем двухсекционный кэш (**Way 1** и **Way 0**) *(рис. 8)*. Каждая ячейка памяти может претендовать на любую из этих двух секций, и, в таком случае, вытеснения не произойдет.
![../.pic/Lectures/16.%20Cache%20memory/fig_07.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_07.jpg) ![../.pic/Lectures/16.%20Cache%20memory/fig_08.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_08.jpg)
*Рис. 8. Структура множественно-ассоциативного кэша. Отображены две ассоциативные секции — Way 1 и Way 0 — внутри одного набора.* *Рис. 8. Структура множественно-ассоциативного кэша. Отображены две ассоциативные секции — Way 1 и Way 0 — внутри одного набора.*
Но такой кэш *(рис. 9)* сразу будет работать медленнее из-за появившегося мультиплексора на выходе, более сложен в реализации, увеличивается сложность вычислений. Но такой кэш *(рис. 9)* сразу будет работать медленнее из-за появившегося мультиплексора на выходе, он более сложен в реализации, кроме того, увеличивается сложность вычислений.
**Тот же пример:** **Тот же пример:**
![../.pic/Lectures/16.%20Cache%20memory/fig_09.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_09.jpg) ![../.pic/Lectures/16.%20Cache%20memory/fig_09.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_09.jpg)
*Рис. 9. При обращении к адресам 0x4 и 0x24 видно, что ячейки памяти могут быть распределены по разным секциям (Way 1 и Way 0), что предотвращает вытеснение.* *Рис. 9. При обращении к адресам 0x4 и 0x24 видно, что ячейки памяти могут быть распределены по разным секциям (Way 1 и Way 0), что предотвращает вытеснение.*
Теперь у нас будет два промаха в первом цикле, а уже на следующих, мы без проблем сможем обращаться к обеим ячейкам, таким образом теперь MR = 20% Теперь у нас будет два промаха в первом цикле, а уже на следующих мы без проблем сможем обращаться к обеим ячейкам. Таким образом, теперь MR = 20%
## Полностью ассоциативный кэш ## Полностью ассоциативный кэш
В полностью ассоциативном кэше *(рис. 10)* мы оставляем **только один набор**, то есть любая ячейка из памяти, может попасть в любую секцию, в таком варианте кэша отлично решается проблема вытеснения, но этим самым реализация становится крайне объемной и медленной, поэтому он находит применение в более специфических местах. В полностью ассоциативном кэше *(рис. 10)* мы оставляем **только один набор**, то есть любая ячейка из памяти может попасть в любую секцию. В таком варианте кэша отлично решается проблема вытеснения, однако реализация становится крайне объемной и медленной, поэтому он находит применение в более специфических местах.
![../.pic/Lectures/16.%20Cache%20memory/fig_10.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_10.jpg) ![../.pic/Lectures/16.%20Cache%20memory/fig_10.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_10.jpg)
@@ -208,17 +208,19 @@ done:
### Длина строки (блока) ### Длина строки (блока)
Если процессор не находит в кэше данные той ячейки памяти, к которой он обращался, он забирает эти данные из основной памяти, одновременно перемещая их в кэш. Как вы знаете, благодаря **пространственной локальности** высока вероятность того, что вскоре процессор обратится и к соседним ячейкам памяти. Поэтому эффективно будет переместить в кэш данные не только этой ячейки памяти, но и данные ячеек памяти, лежащих рядом с ней, образуя **блок данных**. Таким образом, кэш оперирует данными не на уровне ячеек памяти (**слов**), а на уровне блоков ячеек (**строк**). В простейшем случае, в одной строке находится одно слово, т.е. кэш загружает только ту ячейку памяти, к которой он обращался. Если процессор не находит в кэше данные той ячейки памяти, к которой он обращался, он забирает эти данные из основной памяти, одновременно перемещая их в кэш. Как вы знаете, благодаря **пространственной локальности** высока вероятность того, что вскоре процессор обратится и к соседним ячейкам памяти. Поэтому эффективно будет переместить в кэш данные не только этой ячейки памяти, но и данные ячеек памяти, лежащих рядом с ней, образуя **блок данных**. Таким образом, кэш оперирует данными не на уровне ячеек памяти (**слов**), а на уровне блоков ячеек (**строк**). В простейшем случае в одной строке находится одно слово, т.е. кэш загружает только ту ячейку памяти, к которой он обращался.
![../.pic/Lectures/16.%20Cache%20memory/fig_11.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_11.jpg) ![../.pic/Lectures/16.%20Cache%20memory/fig_11.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_11.jpg)
*Рис. 11. Схематическое представление деления адреса в контексте длины строки (или блока) кэша.* *Рис. 11. Схематическое представление деления адреса в контексте длины строки (или блока) кэша.*
Здесь *(рис. 11)* у нас есть адрес делится на чуть большее количество секций, байтовое смещение (**Bite Offsets**) для байта внутри одного слова, смещение блока (**Block Offsets**) т.е. смещение внутри строки, бит для выбора набора (**Set**) и 27 бит под **Tag**. Здесь *(рис. 11)* у нас адрес делится на чуть большее количество секций, байтовое смещение (**Bite Offsets**) для байта внутри одного слова, смещение блока (**Block Offsets**) т.е. смещение внутри строки, бит для выбора набора (**Set**) и 27 бит под **Tag**.
**Плюсы**: **Плюсы**:
При обращении к одной инструкции из кэша автоматически загружаются и следующие три инструкции, что обеспечивает быстрый доступ к большому объему данных. При обращении к одной инструкции из кэша автоматически загружаются и следующие три инструкции, что обеспечивает быстрый доступ к большому объему данных.
**Минусы**: Пропускная способность канала между процессором и памятью. Промах с длинной строкой будет стоить дороже, чем промах с одним словом.
**Минусы**:
Пропускная способность канала между процессором и памятью. Промах с длинной строкой будет стоить дороже, чем промах с одним словом.
**Вернемся к первому примеру:** **Вернемся к первому примеру:**
@@ -245,21 +247,23 @@ done:
## Алгоритмы замещения данных ## Алгоритмы замещения данных
- **LRU** (Least Recently Used) наиболее давнего использования + - **LRU** (Least Recently Used) наиболее давнего использования +
*Рассмотрим на примере двухсекционного кэша *(рис. 13)*, где у нас добавляется дополнительный бит (**U** - used) куда помещается номер секции, которая сейчас не использовалась. Т.е. если сейчас мы записываем в секцию 0 то в этот бит попадает 1, и если потребуется какую то из ячеек убрать, то устройство управления этим кэшем, выберет ту ячейку, которая указана в поле U.* *Рассмотрим на примере двухсекционного кэша *(рис. 13)*, где у нас добавляется дополнительный бит (**U** - used), куда помещается номер секции, которая сейчас не использовалась. Т.е. если сейчас мы записываем в секцию 0, то в этот бит попадает 1, и, если потребуется какую-то из ячеек убрать, устройство управления этим кэшем выберет ту ячейку, которая указана в поле U.*
![../.pic/Lectures/16.%20Cache%20memory/fig_14.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_14.jpg) ![../.pic/Lectures/16.%20Cache%20memory/fig_14.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_14.jpg)
*Рис. 13. Схема работы алгоритма замещения данных LRU на примере двухсекционного кэша.* *Рис. 13. Схема работы алгоритма замещения данных LRU на примере двухсекционного кэша.*
- **PLRU** (Pseudo-Least Recently Used) псевдо наиболее давнего использования +/ - **PLRU** (Pseudo-Least Recently Used) псевдо наиболее давнего использования +/
*Все секции делятся пополам, которые устроены по алгоритму LRU, а внутри конкретная ячейка выбирается случайным образом.* *Все секции, которые устроены по алгоритму LRU, делятся пополам, а внутри конкретная ячейка выбирается случайным образом.*
- **FIFO** (First In First Out) замещение в порядке очереди - **FIFO** (First In First Out) замещение в порядке очереди
*Данные выходят в том же порядке, в котором заходили.* *Данные выходят в том же порядке, в котором поступали.*
- **LFU** (Least Frequently Used) наименее частого использования + - **LFU** (Least Frequently Used) наименее частого использования +
*С каждой секцией ассоциирован счетчик, и при каждом обращении к секции, счетчик у конкретной ячейки увеличивается. Замещается ячейка с наименьшим числом счетчика.* *С каждой секцией ассоциирован счетчик, при каждом обращении к секции счетчик у конкретной ячейки увеличивается. Замещается ячейка с наименьшим числом счетчика.*
- **RND** (Random Replacement) замена случайной строки - **RND** (Random Replacement) замена случайной строки
- **CLOCK** циклический список с указателем + - **CLOCK** циклический список с указателем +
*С каждой ячейкой ассоциирован бит, когда к ячейка обращаются, этот бит устанавливается в 1, а при необходимости замещения алгоритм начинает просматривать, что закреплено за конкретной секцией, если 1, то она меняется на 0 и так далее, пока снова не наткнется 0, тогда замещает эту ячейку.* *Каждой ячейке ассоциирован отдельный бит, устанавливаемый в 1 при обращении к ячейке. В случае необходимости замещения, алгоритм начинает по порядку просматривать данные биты:*
- *в случае, если бит равен 1, то он сбрасывается в 0;*
- *в случае, если бит равен 0, замещается ассоциированная с этим битом ячейка*.
Количество промахов на 1000 обращений к памяти: Количество промахов на 1000 обращений к памяти:
@@ -273,15 +277,15 @@ done:
- Чтение с параллельной выборкой (look-aside) - Чтение с параллельной выборкой (look-aside)
- Чтение со сквозным просмотром (look-through) - Чтение со сквозным просмотром (look-through)
- Стратегии записи - Стратегии записи
- Сквозная запись (write-through) - пишем сразу и в кэш и в память - Сквозная запись (write-through) пишем сразу и в кэш, и в память
- Сквозная запись с отображением - Сквозная запись с отображением
- Сквозная запись без отображения - Сквозная запись без отображения
- Буферизированная сквозная запись - пишем сразу и в кэш и в память, но через буфер - Буферизированная сквозная запись пишем сразу и в кэш, и в память, но через буфер
- Отложенная запись (write-back) - пишем только при вытеснении из кэша - Отложенная запись (write-back) пишем только при вытеснении из кэша
- В среднем на 10% эффективнее сквозной записи. Чаще используется - В среднем на 10% эффективнее сквозной записи. Чаще используется.
**Многоуровневый кэш.** **Многоуровневый кэш.**
Для чего нужны уровни кэша *(рис. 15)*? Давайте проверим если ли прирост производительности с помощью AMAT. Для чего нужны уровни кэша *(рис. 15)*? Давайте проверим, есть ли прирост производительности с помощью AMAT.
![../.pic/Lectures/16.%20Cache%20memory/fig_15.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_15.jpg) ![../.pic/Lectures/16.%20Cache%20memory/fig_15.jpg](../.pic/Lectures/16.%20Cache%20memory/fig_15.jpg)
@@ -302,7 +306,7 @@ MR<sub>L2</sub> = 20%
Многоуровневый кэш может быть построен по одному из двух принципов: Многоуровневый кэш может быть построен по одному из двух принципов:
- Инклюзивный кэш. - Инклюзивный кэш.
*В более низких уровнях памяти, содержится копия тех что выше.* *В более низких уровнях памяти содержится копия тех, что выше.*
- Эксклюзивный кэш. - Эксклюзивный кэш.
*На более низких уровнях памяти нет копии верхнего уровня.* *На более низких уровнях памяти нет копии верхнего уровня.*

View File

@@ -35,11 +35,11 @@
## Виртуальная память ## Виртуальная память
**Виртуальная память** это способ автоматического управления иерархической памятью, при котором для нескольких ее уровней организуется единое адресное пространство. Благодаря этому можно создать для программиста видимость памяти большого объема. При этом, при перемещении данных между уровнями для большинства обращений к памяти обеспечивается скорость доступа, равная скорости более быстрых типов памяти (благодаря такому свойству как **локальность по обращению**). **Виртуальная память** это способ автоматического управления иерархической памятью, при котором для нескольких ее уровней организуется единое адресное пространство. Благодаря этому можно создать для программиста видимость памяти большего объема. При этом при перемещении данных между уровнями для большинства обращений к памяти обеспечивается скорость доступа, равная скорости более быстрых типов памяти (благодаря такому свойству, как **локальность по обращению**).
Когда основная (оперативная) память переполняется, операционная система переносит часть данных во вторичную память (hdd/sdd), освобождая основную память для других задач. Когда основная (оперативная) память переполняется, операционная система переносит часть данных во вторичную память (hdd/sdd), освобождая основную память для других задач.
Виртуальная память разделяет "виртуальные" адреса, используемые приложениями, и "физические" адреса, по которым хранятся данные в реальности *(рис. 1)*. Соответствие между виртуальными и физическими адресами хранится в памяти: когда процессор запрашивает виртуальный адрес, ему предоставляется соответствующий физический адрес. Ячейка памяти может физически располагаться либо во внешней памяти (**Secondary Memory**), либо в оперативной (**Physical Memory**). Во время взаимодействия пользователя с приложением, оно подгружается в оперативную память, а неактивные части выгружаются во внешнюю память. Виртуальная память разделяет "виртуальные" адреса, используемые приложениями, и "физические" адреса, по которым хранятся данные в реальности *(рис. 1)*. Соответствие между виртуальными и физическими адресами хранится в памяти: когда процессор запрашивает виртуальный адрес, ему предоставляется соответствующий физический адрес. Ячейка памяти может физически располагаться либо во внешней памяти (**Secondary Memory**), либо в оперативной (**Physical Memory**). Во время взаимодействия пользователя с приложением оно подгружается в оперативную память, а неактивные части выгружаются во внешнюю память.
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_01.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_01.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_01.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_01.jpg)
@@ -69,13 +69,13 @@
## Реализация виртуальной памяти в процессоре ## Реализация виртуальной памяти в процессоре
На *(рис. 3)* представлен пример процессора с модифицированной гарвардской архитектурой без виртуальной памяти На *(рис. 3)* представлен пример процессора с модифицированной гарвардской архитектурой без виртуальной памяти.
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_03.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_03.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_03.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_03.jpg)
*Рис. 3. Процессор на базе модифицированной гарвардской архитектуры без использования виртуальной памяти.* *Рис. 3. Процессор на базе модифицированной гарвардской архитектуры без использования виртуальной памяти.*
На *(рис. 4)* представлен пример архитектуры того же процессора, но с использованием виртуальной памяти, в котором добавляется дополнительный блок **MMU (Memory Management Unit)** - устройство управление памятью, он преобразует **ФА** (Физические адреса) в **ВА** (Виртуальные Адреса) На *(рис. 4)* представлен пример архитектуры того же процессора, но с использованием виртуальной памяти, в котором добавляется дополнительный блок **MMU (Memory Management Unit)** устройство управление памятью, он преобразует **ФА** (Физические адреса) в **ВА** (Виртуальные Адреса).
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_04.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_04.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_04.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_04.jpg)
@@ -91,16 +91,16 @@
При работе с виртуальной памятью данные могут быть организованы двумя способами: При работе с виртуальной памятью данные могут быть организованы двумя способами:
- **Страничная организация памяти**: Данные разбиваются на блоки одинакового размера, называемые страницами. В каждой странице смещение данных идентично, что соответствует смещению внутри виртуального адреса. Это можно сравнить с работой кэш-памяти. - **Страничная организация памяти**: данные разбиваются на блоки одинакового размера, называемые страницами. В каждой странице смещение данных идентично, что соответствует смещению внутри виртуального адреса. Это можно сравнить с работой кэш-памяти.
- **Сегментная организация памяти**: Данные разделяются на сегменты разного размера, в зависимости от их характера и назначения. - **Сегментная организация памяти**: данные разделяются на сегменты разного размера, в зависимости от их характера и назначения.
Рассмотрим компьютерную систему с 128 МБ физической памяти и поддержкой виртуальной памяти размером 2 ГБ. На (рис. 6) представлена страничная таблица. В этой системе вся память поделена на равные блоки, обычно размером 4 КБ, которые называются страницами. Рассмотрим компьютерную систему с 128 МБ физической памяти и поддержкой виртуальной памяти размером 2 ГБ. На (рис. 6) представлена страничная таблица. В этой системе вся память поделена на равные блоки, обычно размером 4 КБ, которые называются страницами.
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_06.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_06.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_06.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_06.jpg)
*Рис. 6. Как адреса из виртуальной памяти, ссылаются на адреса в физической памяти.* *Рис. 6. Как адреса из виртуальной памяти ссылаются на адреса в физической памяти.*
В памяти системы находится часть страничной таблицы *(рис. 7)*. Каждая ячейка этой таблицы содержит число, указывающее на определенный блок физической памяти. В этой таблице также присутствует бит `V`. Если значение бита `V` равно **1**, это указывает, что страница находится в основной памяти. Если значение равно **0**, страница располагается во внешней памяти. В памяти системы находится часть страничной таблицы *(рис. 7)*. Каждая ячейка этой таблицы содержит число, указывающее на определенный блок физической памяти. В этой таблице также присутствует бит `V`. Если значение бита `V` равно **1**, это указывает на то, что страница находится в основной памяти. Если значение равно **0**, страница располагается во внешней памяти.
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_07.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_07.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_07.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_07.jpg)
@@ -134,7 +134,7 @@
- Цена виртуализации это трансляция каждого обращения к памяти. - Цена виртуализации это трансляция каждого обращения к памяти.
> Эта дополнительная операция добавляет некоторую задержку, что делает доступ к виртуальной памяти медленнее по сравнению с прямым доступом к физической памяти. > Эта дополнительная операция добавляет некоторую задержку, что делает доступ к виртуальной памяти медленнее по сравнению с прямым доступом к физической памяти.
Однако, существуют специализированные методы и технологии, призванные минимизировать эту задержку и оптимизировать процесс трансляции. Одним из таких методов является использование **Буфера Ассоциативной Трансляции или TLB**. Однако существуют специализированные методы и технологии, призванные минимизировать эту задержку и оптимизировать процесс трансляции. Одним из таких методов является использование **Буфера Ассоциативной Трансляции или TLB**.
## Буфер ассоциативной трансляции (TLB) ## Буфер ассоциативной трансляции (TLB)
@@ -154,9 +154,9 @@
Буфер ассоциативной трансляции играет ключевую роль в современной системе управления памятью. Обычный TLB может содержать от 32 до 128 входов с степенью ассоциативности между 4 и 8. Современные процессоры часто используют иерархическую структуру TLB, что может включать в себя комбинацию, например, L1 TLB с 128 входами и L2 TLB с 2K входами. Буфер ассоциативной трансляции играет ключевую роль в современной системе управления памятью. Обычный TLB может содержать от 32 до 128 входов с степенью ассоциативности между 4 и 8. Современные процессоры часто используют иерархическую структуру TLB, что может включать в себя комбинацию, например, L1 TLB с 128 входами и L2 TLB с 2K входами.
Переключение между процессами является дорогостоящей операцией, главным образом из-за необходимости очистки TLB. Тем не менее можно включить ID процесса в TLB для предотвращая потребность в очистке *(рис. 10.)*. Переключение между процессами является дорогостоящей операцией, главным образом из-за необходимости очистки TLB. Тем не менее можно включить ID процесса в TLB для предотвращения потребности в очистке *(рис. 10.)*.
При промахе TLB, система обращается к страничной таблице в основной памяти. Если требуемая страница присутствует в основной памяти, система выполняет преобразование виртуального номера страницы (VPN) в физический номер страницы (PPN) и обновляет TLB. В противном случае происходит страничный сбой, который всегда обрабатывается программно. При промахе TLB система обращается к страничной таблице в основной памяти. Если требуемая страница присутствует в основной памяти, система выполняет преобразование виртуального номера страницы (VPN) в физический номер страницы (PPN) и обновляет TLB. В противном случае происходит страничный сбой, который всегда обрабатывается программно.
Для навигации по страничной таблице обычно используется специальное аппаратное устройство, называемое блоком управления памятью (**MMU**). Некоторые популярные архитектуры, такие как `RISC-V` и `x86`, реализуют страничную таблицу на аппаратном уровне. Для навигации по страничной таблице обычно используется специальное аппаратное устройство, называемое блоком управления памятью (**MMU**). Некоторые популярные архитектуры, такие как `RISC-V` и `x86`, реализуют страничную таблицу на аппаратном уровне.
@@ -170,7 +170,7 @@ VPN (номер виртуальной страницы) указывает
### Метод ключей защиты ### Метод ключей защиты
Рассмотрим *(рис. 11)*. Ключ защиты программы представляет собой уникальный ID, который хранится в специальном регистре. Операционная система, работая в привилегированном режиме, имеет возможность управлять данным регистром. При формировании адреса программой, часть этого адреса сравнивается с текущим ключом защиты. Если совпадение найдено, то обращение к памяти разрешено. В противном случае, доступ к памяти блокируется. Рассмотрим *(рис. 11)*. Ключ защиты программы представляет собой уникальный ID, который хранится в специальном регистре. Операционная система, работая в привилегированном режиме, имеет возможность управлять данным регистром. При формировании адреса программой часть этого адреса сравнивается с текущим ключом защиты. Если совпадение найдено, то обращение к памяти разрешено. В противном случае доступ к памяти блокируется.
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_11.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_11.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_11.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_11.jpg)
@@ -178,7 +178,7 @@ VPN (номер виртуальной страницы) указывает
## Использование кэш и виртуальной памяти ## Использование кэш и виртуальной памяти
Для того чтобы использовать кэш память и виртуальную память одновременно есть несколько вариантов *(рис. 12.)* Для того чтобы использовать кэш память и виртуальную память одновременно, существует несколько вариантов *(рис. 12.)*
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_12.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_12.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_12.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_12.jpg)
@@ -248,9 +248,9 @@ LRU вытесняет страницы, которые не использов
Благодаря этому легко реализуется **приватное адресное пространство** *(рис. 15)* между процессами, где: Благодаря этому легко реализуется **приватное адресное пространство** *(рис. 15)* между процессами, где:
- Каждый процесс имеет собственную страничную таблицу - каждый процесс имеет собственную страничную таблицу
- Страничная таблица включает в себя все страницы процесса - страничная таблица включает в себя все страницы процесса
- Страничные таблицы позволяют хранить страницы процесса не непрерывно - страничные таблицы позволяют хранить страницы процесса не непрерывно
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_15.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_15.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_15.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_15.jpg)
@@ -258,9 +258,9 @@ LRU вытесняет страницы, которые не использов
## Метод граничных регистров ## Метод граничных регистров
Существует так же другой подход - **сегментная реализация памяти**. В сегментной памяти вся память делится не на одинаковые страницы, а на сегменты разной величины. Для того чтобы операционная система могла регулировать чтобы процесс не выходил за свои сегменты используется подход который называется **метод граничных регистров** *(рис. 16)*. Существует также другой подход **сегментная реализация памяти**. В сегментной памяти вся память делится не на одинаковые страницы, а на сегменты разной величины. Для того чтобы операционная система могла регулировать, чтобы процесс не выходил за свои сегменты, используется подход, который называется **метод граничных регистров** *(рис. 16)*.
При каждом обращении процесса к памяти операционная система проверяет, чтобы адрес был между значениями регистров базы и границы. Если адрес находится за пределами этого диапазона, генерируется ошибка, и процесс не может получить доступ к памяти вне своего выделенного блока. При каждом обращении процесса к памяти операционная система проверяет, чтобы адрес был между значениями регистров базы и границы. Если адрес находится за пределами этого диапазона, генерируется ошибка и процесс не может получить доступ к памяти вне своего выделенного блока.
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_16.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_16.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_16.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_16.jpg)
@@ -281,21 +281,21 @@ LRU вытесняет страницы, которые не использов
- Программа это набор инструкций (только ее код) - Программа это набор инструкций (только ее код)
- **Процесс** это экземпляр программы, которая выполняется - **Процесс** это экземпляр программы, которая выполняется
- Состоит из **кода программы** и **контекста** (регистры, содержимое памяти и другие ресурсы) - Состоит из **кода программы** и **контекста** (регистры, содержимое памяти и другие ресурсы)
- Ядро операционной системы **(OS Kernel)** это привилегированный процесс - Ядро операционной системы **(OS Kernel)** это привилегированный процесс
### Цели операционной системы ### Цели операционной системы
1. **Защита и приватность**: Операционная система обеспечивает строгую изоляцию между процессами, чтобы гарантировать, что один процесс не может вмешиваться в работу другого или получать доступ к его данным. Это обеспечивает безопасность данных и предотвращает возможные ошибки или злонамеренные действия. Процесс может взаимодействовать только со своим выделенным адресным пространством и ресурсами, исключая возможность несанкционированного доступа к данным других процессов. 1. **Защита и приватность**: операционная система обеспечивает строгую изоляцию между процессами, чтобы гарантировать, что один процесс не может вмешиваться в работу другого или получать доступ к его данным. Это обеспечивает безопасность данных и предотвращает возможные ошибки или злонамеренные действия. Процесс может взаимодействовать только со своим выделенным адресным пространством и ресурсами, исключая возможность несанкционированного доступа к данным других процессов.
2. **Абстракция**: Предоставление удобного и понятного интерфейса для работы с аппаратными ресурсами. Она скрывает сложные детали реализации аппаратного обеспечения, позволяя программам и пользователю взаимодействовать с системой на более высоком, абстрактном уровне. Это облегчает разработку приложений, так как разработчикам не нужно знать о всех нюансах работы аппаратуры. 2. **Абстракция**: предоставление удобного и понятного интерфейса для работы с аппаратными ресурсами. Она скрывает сложные детали реализации аппаратного обеспечения, позволяя программам и пользователю взаимодействовать с системой на более высоком, абстрактном уровне. Это облегчает разработку приложений, так как разработчикам не нужно знать о всех нюансах работы аппаратуры.
3. **Управление ресурсами**: Действует как посредник между аппаратными ресурсами компьютера и запущенными на нем процессами. Она определяет, какие процессы будут выполняться, когда и сколько ресурсов (CPU, память или внешние устройства) они будут использовать. Этот контроль необходим для оптимизации производительности, обеспечения справедливого доступа к ресурсам и предотвращения конфликтов. 3. **Управление ресурсами**: действует как посредник между аппаратными ресурсами компьютера и запущенными на нем процессами. Она определяет, какие процессы будут выполняться, когда и сколько ресурсов (CPU, память или внешние устройства) будет использоваться. Этот контроль необходим для оптимизации производительности, обеспечения справедливого доступа к ресурсам и предотвращения конфликтов.
### Управление процессами и ресурсами в ядре операционной системы ### Управление процессами и ресурсами в ядре операционной системы
Основная задача ядра операционной системы это управление ресурсами компьютера и обеспечение стабильного взаимодействия между аппаратной и программной частями. **Каждому процессу** выделяется **приватное адресное пространство** в физической памяти, гарантируя, что процессы не могут вмешиваться в память друг друга. Этим обеспечивается **безопасность и изоляция** при выполнении приложений. Основная задача ядра операционной системы это управление ресурсами компьютера и обеспечение стабильного взаимодействия между аппаратной и программной частями. **Каждому процессу** выделяется **приватное адресное пространство** в физической памяти, при этом гарантируется, что процессы не могут вмешиваться в память друг друга. Этим обеспечивается **безопасность и изоляция** при выполнении приложений.
В области управления процессами, ядро операционной системы **планирует доступ к CPU**. Каждому процессу выделяется определенное **время работы на процессоре**, и приложение не может использовать больше этого времени. В области управления процессами ядро операционной системы **планирует доступ к CPU**. Каждому процессу выделяется определенное **время работы на процессоре**, и приложение не может использовать больше этого времени.
Помимо управления ресурсами, ядро ОС также предоставляет интерфейс для взаимодействия программ с аппаратной частью. Этот интерфейс, известный как **системные вызовы (system calls)**, позволяет процессам получать доступ к таким службам, как файловая система или сетевое оборудование. Помимо управления ресурсами, ядро ОС также предоставляет интерфейс для взаимодействия программ с аппаратной частью. Этот интерфейс, известный как **системные вызовы (system calls)**, позволяет процессам получать доступ к таким службам, как файловая система или сетевое оборудование.
@@ -313,7 +313,7 @@ LRU вытесняет страницы, которые не использов
### Прерывания и исключения ### Прерывания и исключения
**Исключение** событие которое требует обработки операционной системой (неподдерживаемая инструкция, системный вызов, деление на ноль…) *(рис. 19)* **Исключение** событие, которое требует обработки операционной системой (неподдерживаемая инструкция, системный вызов, деление на ноль…) *(рис. 19)*
![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_19.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_19.jpg) ![../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_19.jpg](../.pic/Lectures/17.%20Virtual%20memory.%20Operating%20systems/fig_19.jpg)
@@ -331,13 +331,13 @@ LRU вытесняет страницы, которые не использов
В архитектуре `RISC-V` системные вызовы осуществляются с помощью инструкции `ecall`, которая инициирует исключение, устанавливая регистр `mcause` в специфическое значение. Этот механизм позволяет программам взаимодействовать напрямую с операционной системой. В архитектуре `RISC-V` системные вызовы осуществляются с помощью инструкции `ecall`, которая инициирует исключение, устанавливая регистр `mcause` в специфическое значение. Этот механизм позволяет программам взаимодействовать напрямую с операционной системой.
Для успешного выполнения системного вызова необходимо следовать соглашению **ABI (Application Binary Interface)**. Этот интерфейс определяет, как именно аргументы и результаты будут передаваться между процессом и ядром. Это соглашение в многом напоминает тот механизм, который используется при вызове обычных подпрограмм. Для успешного выполнения системного вызова необходимо следовать соглашению **ABI (Application Binary Interface)**. Этот интерфейс определяет, как именно аргументы и результаты будут передаваться между процессом и ядром. Это соглашение во многом напоминает тот механизм, который используется при вызове обычных подпрограмм.
На практике это выглядит следующим образом: На практике это выглядит следующим образом:
- **Номер системного вызова** помещается в регистр `a7`. - **Номер системного вызова** помещается в регистр `a7`.
- Аргументы для этого вызова размещаются в регистрах `a0` до `a6`. - Аргументы для этого вызова размещаются в регистрах `a0` до `a6`.
- После выполнения системного вызова, результаты будут находиться в регистрах `a0` и `a1` (или в основной памяти) - После выполнения системного вызова результаты будут находиться в регистрах `a0` и `a1` (или в основной памяти)
- Все регистры в этом контексте сохраняют свое состояние, что гарантирует безопасное выполнение и возврат из системных вызовов. - Все регистры в этом контексте сохраняют свое состояние, что гарантирует безопасное выполнение и возврат из системных вызовов.