Arch: chore

This commit is contained in:
2025-06-20 12:48:16 +03:00
parent 537c87bc48
commit 970aa9b9e2
27 changed files with 735 additions and 55252 deletions

View File

@ -1,28 +1,30 @@
#### Кэш прямого отображения(Direct mapped cache). Поля строки/блока кэша. Проецирующая функция.
**Кэш прямого отображения** - стратегия размещения блока основной памяти в кэше, где блок размещается в одном строго определенном месте, определяемом функцией размещения.
Существует три стратегии размещения или проецирования блока основной памяти в кэш:
1. **Direct mapped cache**
Строго в одно определенное место, определяемое функцией проецирования: index = (адрес блока) MOD (число блоков в кэше)
2. **Fully associative cache**
В любом месте (нет проецирующей функции).
3. **Set associative cache:**
В ограниченном наборе мест. Набор - группа блоков в кэше. Блок проецируется строго на один набор, но он может размещен в любом месте набора. Функция проецирования:
index = (адрес блока) MOD (число блоков в кэше)
1) **Direct mapped cache**
Строго в одно определенное место, определяемое функцией проецирования: index = (адрес блока) MOD (число блоков в кэше)
2) **Fully associative cache**
В любом месте (нет проецирующей функции).
3) **Set associative cache:**
В ограниченном наборе мест. Набор - группа блоков в кэше. Блок проецируется строго на один набор, но он может размещен в любом месте набора. Функция проецирования:
index = (адрес блока) MOD (число блоков в кэше)
Кэш, имеющий n блоков в наборе называется $n$-канальным наборно-ассоциативным ($n$-way set-associative).
**Функция проецирования** - функция, определяющая место размещения данных из основной памяти в кэше.
Для любой строки кэша нужно хранить:
1) Кэшированные данные.
2) **Tag** - адрес оперативной памяти, из которой данные кэшированы. Если адрес совпадает с адресом, к которому мы обратились, значит там наши данные. В противном случае надо читать данные из памяти.
3) Бит валидности - признак того, что содержимое записи кэша актуально, т.е строка действительно содержит закэшированные данные.
32-битный адрес разбивается на следующие поля:
1) Последние 2 бита - биты смещения.
Относятся к адресации внутри кэш-блока, т.е это внутри блока байты с номерами 0,1,2,3.
2) Предыдущие 3 бита - биты, которые были получены от операции:
(адрес блока) MOD (число блоков в кэше)
3) Все остальное - тег. Возможные адреса блоков, которые могут храниться в конкретной записи в кэше. Если тэг из кэша равен тэгу из адреса, по которому обратились, и бит валидности установлен, то диагностируем попадание и берем данные из кэша.
**Функция проецирования** - функция, определяющая место размещения данных из основной памяти в кэше.
Для любой строки кэша нужно хранить:
1. Кэшированные данные.
2. Адрес оперативной памяти, из которой данные кэшированы. Если адрес совпадает с адресом, к которому мы обратились, значит там наши данные. В противном случае надо читать данные из памяти.
3. Бит валидности - признак того, что содержимое записи кэша актуально, т.е строка действительно содержит закэшированные данные.
32-битный адрес разбивается на следующие поля:
1. Последние 2 бита - биты смещения.
Относятся к адресации внутри кэш-блока, т.е это внутри блока байты с номерами 0,1,2,3.
2. Предыдущие 3 бита - биты, которые были получены от операции:
(адрес блока) MOD (число блоков в кэше)
3. Все остальное - тег.
Возможные адреса блоков, которые могут храниться в конкретной записи в кэше. Если тэг из кэша равен тэгу из адреса, по которому обратились, и бит валидности установлен, то диагностируем попадание и берем данные из кэша.