ЛР10. Рефактор методички

- Исправлена ошибка в изображении с уровнями абстракций в системе RISCV.
Изображение векторизовано.
- Изменено взаимодействие с регистром mie, чтобы соответствовать
привилегированной спецификации.
- Удалено дублирование текста из дополнительных материалов по CSR.
- Обновлена программа с обработчиком перехватов: теперь регистр mie
выставляется в последнюю очередь.
This commit is contained in:
Andrei Solodovnikov
2024-07-18 11:15:41 +03:00
parent a04e2d0c6f
commit 85b1c81d04
11 changed files with 79 additions and 91 deletions

View File

@@ -1,20 +1,20 @@
# О регистрах контроля и статуса
Для поддержания работы операционной системы, виртуализации, системы прерывания и тому подобное, в архитектуре RISC-V предусмотрено использование группы регистров, под общим названием **Control and Status Registers** (**CSR**), обеспечивающих управление элементами процессора и доступ к статусной информации о системе. С помощью этих регистров реализуются привилегированные режимы работы процессора, хранение указателей на различные программные стеки, статус различных подсистем, регистры для обеспечения работы прерываний и многое другое.
Для поддержания работы операционной системы, виртуализации, системы прерывания (но не ограничиваясь ими), в архитектуре RISC-V предусмотрено использование группы регистров, под общим названием **регистры контроля и статуса** (**Control and Status Registers**, **CSR**), обеспечивающих управление элементами процессора и доступ к статусной информации о системе. С помощью этих регистров реализуются привилегированные режимы работы процессора, хранение указателей на различные программные стеки, статус различных подсистем, регистры для обеспечения перехватов и многое другое.
Все регистры имеют уникальные 12-битные адреса, а их роли определены в спецификации на архитектуру RISC-V. В _Таблице 1_ приводится фрагмент спецификации привилегированной архитектуры[[5, стр.10]](https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf), иллюстрирующая некоторые из регистров. В левом столбце указан 12-битный адрес. Далее указывается, что можно делать с этим регистром и в каком режиме. После идет название, а в правом столбце описание.
Все регистры имеют уникальные 12-битные адреса, а их роли определены в спецификации на архитектуру RISC-V. В _Таблице 1_ приводится фрагмент спецификации привилегированной архитектуры[[1, стр.10]](https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf), иллюстрирующая некоторые из регистров. В левом столбце указан 12-битный адрес. Далее указывается в каком режиме, что можно делать с этим регистром. После идет название, а в правом столбике описание.
В этой таблице можно увидеть регистры для сохранения адреса возврата из прерывания, адрес вектора прерывания, регистры причины (cause), регистры настройки безопасности и защиты памяти. И это далеко не полный список регистров, предоставляемых стандартом (который помимо прочего, оставляет место в адресном пространстве для ваших собственных регистров).
В этой таблице можно увидеть регистры для сохранения адреса возврата из перехвата, адрес вектора прерывания, регистры причины (cause), регистры настройки безопасности и защиты памяти. И это далеко не полный список регистров, предоставляемых стандартом (который помимо прочего, оставляет место в адресном пространстве для ваших собственных регистров).
![../../.pic/Labs/lab_10_irq/tab_01.png](../../.pic/Labs/lab_10_irq/tab_01.png)
_Таблица 1. Регистры контроля и состояния машинного (наивысшего) уровня привилегий._
_Таблица 1. Регистры контроля и статуса машинного (наивысшего) уровня привилегий._
Для работы с CS-регистрами используются специальные **SYSTEM**-инструкции I-типа (код операции `1110011`), хранящие в 12-битном поле **imm** адрес регистра, к которому будет осуществлен доступ и адреса в регистровом файле откуда будет считан или куда будет записан один из CS-регистров. Вы уже добавляли поддержку этих инструкций во время выполнения [лабораторной работы №5](../05.%20Main%20decoder/) "Основной дешифратор".
Для работы с CS-регистрами используются специальные **SYSTEM**-инструкции I-типа (с опкодом `1110011`), хранящие в 12-битном поле **imm** адрес регистра, к которому будет осуществлен доступ и адреса в регистровом файле откуда будет считан или куда будет записан один из CS-регистров. Вы уже добавляли поддержку этих инструкций во время выполнения [лабораторной работы №5](../05.%20Main%20decoder/) "Декодер инструкций".
| opcode | func3 | Тип | Инструкция | Описание | Операция |
|--------|-------|-----|---------------------|---------------------------|-----------------------------|
|1110011 | 000 | I | mret | Возврат из прерывания | PC = mepc |
|1110011 | 000 | I | mret | Возврат из перехвата | PC = mepc |
|1110011 | 001 | I | csrrw rd, csr, rs1 | Чтение и Запись CSR | rd = csr, csr = rs1 |
|1110011 | 010 | I | csrrs rd, csr, rs1 | Чтение и Установка бит CSR| rd = csr, csr = csr \| rs1 |
|1110011 | 011 | I | csrrc rd, csr, rs1 | Чтение и Очистка бит CSR | rd = csr, csr = csr & ~rs1 |
@@ -24,7 +24,7 @@ _Таблица 1. Регистры контроля и состояния ма
_Таблица 2. Список инструкций для работы с регистрами контроля и статуса._
Для удобства программирования на языке ассемблера RISC-V существуют псевдоинструкции для работы с CS-регистрами.
Для удобства программирования на языке ассемблера RISC-V существуют псевдоинструкции для работы с CSR.
| Псевдоинструкция | Инструкция RISC-V | Описание | Операция |
|------------------|--------------------|-------------|-----------|
@@ -33,4 +33,9 @@ _Таблица 2. Список инструкций для работы с ре
_Таблица 3. Псевдоинструкции для работы с регистрами контроля и статуса._
Операция логического ИЛИ нулевого регистра с содержимым CS-регистра не меняет его содержимого, поэтому при использовании инструкции `csrr` происходит только операция чтения. Подобным образом реализована псевдоинструкция `csrw`.
Операция логического ИЛИ нулевого регистра регистрового файла с содержимым регистра из блока CSR не меняет его содержимого, поэтому при использовании инструкции `csrr` происходит только операция чтения. Подобным образом реализована псевдоинструкция `csrw`.
## Список использованной литературы
1. [The RISC-V Instruction Set Manual Volume II: Privileged Architecture](https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf)