Рис. 1.5. Размещение виртуального адресного пространства режима User
Сегмент пользователя начинается с адреса 0x0000_0000 и заканчивается адресом 0x7FFF_FFFF. Обращения по всем остальным адресам вызывают прерывания по ошибке адресации.
Процессор находится в режиме User, если в регистре StatusCP0 установлены следующие значения разрядов:UM=1; EXL=0; ERL=0.
В табл. 1.3 приводятся характеристики сегмента useg режима
User.
|
|
|
|
|
|
|
Таблица 1.3 |
|
Адрес |
Регистры |
|
Имя |
Диапазон |
|
Размер |
||
|
состояния |
сегмента |
адресов |
|
сегмента |
|||
|
EXL |
ERL |
|
UM |
|
|
|
|
А(31)=0 |
0 |
0 |
|
1 |
useg |
0x0000_0000 |
|
2GB |
|
|
|
|
|
|
→ |
|
( 231байт) |
|
|
|
|
|
|
0x7FFF_FFFF |
|
|
Для всех допустимых виртуальных адресов режима User старший значащий бит адреса равен нулю, поскольку в режиме User допустимо обращение только к нижней половине карты
21
виртуальной памяти. Любая попытка обращения по адресу со старшим битом, равным 1, в режиме User вызывает прерывание по ошибке адресации. В режиме TLB виртуальный адрес перед преобразованием расширяется содержимым 8-разрядного поля ASID, образуя уникальный виртуальный адрес. Кэшируемость ссылки для страницы в этом режиме определяется установкой определенных бит строки TLB. В режиме FM, область виртуальных адресов 0x0000_0000-0x7FFF_FFFF преобразуется в область физических адресов 0x4000_0000-0xBFFF_FFFF. Кэшируемость задается полем KU регистра ConfigCP0.
Режим Kernel
Процессор находится в режиме Kernel, когда регистр StatusCP0 содержит хотя бы одно из следующих значений: UM = 0; ERL = 1; EXL = 1 Когда обнаруживается исключение, биты EXL или ERL устанавливаются, и процессор входит в режим Kernel. При завершении процедуры обработки исключения обычно выполняется команда возвращения из исключения (ERET). Команда ERET осуществляет переход по PC исключения, очищает ERL и EXL (если ERL=0). В результате возможен возврат процессора в режим User.
Виртуальное адресное пространство режима Kernel разделено на области в соответствии со значением старших битов виртуального адреса, как показано на рисунок 1.6. Кроме того, в табл. 1.4 содержатся характеристики сегментов режима
Kernel.
22
Рис.1.6. Виртуальное адресное пространство режима Kernel Таблица 1.4
Адрес |
Регистры |
Имя |
Диапазон |
Размер |
|||||
|
состояния |
сег- |
адресов |
сегмен- |
|||||
|
EXL |
ERL |
UM |
мента |
|
та |
|
||
A(31)=0 |
|
|
|
kuseg |
0x0000_0000 |
2 GB |
|||
|
|
|
|
|
→ |
(231) |
|||
|
|
|
|
|
0x7FFF_FFF |
|
|
|
|
|
|
|
|
|
F |
|
|
|
|
A(31:29)=1002 |
|
|
|
kseg0 |
0x8000_0000 |
512 MB |
|||
|
UM = 0 |
|
→ |
(229) |
|||||
|
|
0x9FFF_FFFF |
|
|
|
||||
|
|
или |
|
|
|
|
|||
A(31:29)=1012 |
|
ksegl |
0xA000_0000 |
512 MB |
|||||
EXL=1 |
|||||||||
|
|
→ |
(2 |
29 |
) |
||||
|
|
или |
|
|
|||||
|
|
|
0xBFFF_FFFF |
|
|
|
|||
|
ERL=1 |
|
|
|
|
||||
A(31:29)=1102 |
kseg2 |
0xC000_0000 |
512 MB |
||||||
|
|
|
|||||||
|
|
|
|
|
→ |
(229) |
|||
|
|
|
|
|
0xDFFF_FFFF |
|
|
|
|
A(31:29)=1112 |
|
|
|
kseg3 |
0xE000_0000 |
512 MB |
|||
|
|
|
|
|
→ |
(229) |
|||
|
|
|
|
|
0xFFFF_FFFF |
|
|
|
|
23
Режим Kernel, Пространство пользователя (kuseg)
Если старший значащий бит виртуального адреса A[31]=0, то выбирается виртуальное адресное пространство kuseg объемом 2 Гбайт, отображенное на адреса 0x0000_0000 - 0x7FFF_FFFF.
При ERL=0 в режиме TLB виртуальный адрес расширяется 8-битным значением поля ASID для образования уникального виртуального адреса. Кэшируемость определяется полем C строки TLB.
При ERL=0 в режиме FM, область виртуальных адресов 0x0000_0000-0x7FFF_FFFF преобразуется в область физических адресов 0x4000_0000-0xBFFF_FFFF. Кэшируемость задается полем KU регистра ConfigCP0.
При ERL = 1 в режимах TLB и FM, область адресов пользователя становится неотображаемым и некэшируемым адресным пространством. Виртуальный адрес kuseg соответствует тому же физическому адресу и не включает поле ASID. То есть, область виртуальных адресов kuseg соответствует области физических адресов 0x0000_0000-0x7FFF_FFFF.
Режим Kernel, пространство 0 режима Kernel (kseg0).
Если в режиме Kernel три старших бита виртуального адреса равны 1002 , выбирается виртуальное адресное пространство kseg0. Это область размером 229 байт (512 MB), которая расположена внутри границ, определяемых адресами
0x8000_0000 и 0x9FFF_FFFF.
Вне зависимости от состояния бита ERL и режима работы ссылки к kseg0 не отображаются, а физический адрес получается вычитанием 0x8000_0000 из виртуального адреса. Кэшируемость сегмента kseg0 определяется значением поля K0
регистра ConfigCP0.
24
Режим Kernel, пространство 1 режима Kernel (kseg1)
Если в режиме Kernel три старших бита виртуального адреса равны 1012 , выбирается виртуальное адресное пространство kseg1. Это область размером 229 байт (512 MB), которая расположена внутри границ, определяемых адресами
0xA000_0000 и 0xBFFF_FFFF.
Вне зависимости от состояния бита ERL и режима работы ссылки к kseg1 не отображаются, а физический адрес получается вычитанием 0xA000_0000 из виртуального адреса.
Режим Kernel, пространство 2 режима Kernel (kseg2)
Если в режиме Kernel три старших бита виртуального адреса равны 1102 , выбирается виртуальное адресное пространство kseg2.
Врежиме TLB вне зависимости от состояния бита ERL это виртуальное пространство отображается через TLB и его кэшируемость определяется полем C строки TLB.
Врежиме FM вне зависимости от состояния бита ERL это виртуальное пространство зафиксировано в физических адресах 0xC000_0000 - 0xDFFF_FFFF и его кэшируемость определяется полем K23 Регистра ConfigCP0.
Если в режиме Kernel три старших бита виртуального
адреса равны 1112 выбирается32-разрядное виртуальное адресное пространство kseg3. В режиме TLB вне зависимости от состояния бита ERL это пространство отображается через TLB и его кэшируемость определяется полем C строки TLB.В режиме FM вне зависимости от состояния бита ERL это виртуальное пространство зафиксировано в физических адресах 0xE000_0000 - 0xFFFF_FFFF и его кэшируемость определяется полем K23 регистра Config.
25