Вначале рассмотрим различие между сегментацией памяти и ее страничным разделением:
1. Сегментация памяти -- более высокоуровневый способ, чем ее страничное разделение. Иначе говоря, сегментация памяти предшествует ее страничному разбиению.
2. В отличие от сегментов, страницы образуют так называемую "виртуальную" память. Основные особенности виртуальной памяти:
o для ее функционирования не обязательно присутствие всех cтраниц в физической памяти. Часть страниц может находиться на внешнем носителе, например, на жестком диске;
Примечание: при обращении к сегменту необходимо, чтобы он целиком находился в физической памяти. Именно поэтому "страничную память" называют виртуальной.
o благодаря необязательному присутствию всей виртуальной памяти в физической ее объем, как правило, в несколько раз больше.
3. Размер сегмента варьируется в большей степени. чем размер страниц.
4. Границы страниц всегда фиксированы, и они не могут перекрываться.
Так, размер страниц в микропроцессорах с архитектурой x86 фиксирован и равен 4 Кбайт.
Регистры управления страничным разбиением памяти в микропроцессорах i80386 и i486.
Для реализации страничного разбиения памяти в этих микропроцессорах используются регистры управления CR0, CR2 и CR3. При этом в регистре CR0 используется для этой цели бит 31 (PG), разрешающий (PG=1) или запрещающий страничное разбиение памяти.
В регистре CR3 биты 15-31 отводятся для указания физического адреса каталога страниц (таблиц страниц первого уровня) и называется базовым регистром каталога страниц PDBR (см. соответствующий раздел в выпуске "Память"). Кроме того, в нем содержатся биты, запрещающие кэширование страниц PCD и сквозной записи в страницу PWT.
Регистр CR2, доступный только для считывания, служит специально для обработчика особого случая 14 (страничное нарушение). Процессор загружает в него, а обработчик особого случая считывает из него последний 32-х битный линейный адрес, который вызвал страничное нарушение (неприсутствие страницы в физической памяти при обращении к ней).
Регистры управления страничным разбиением памяти в микропроцессорах серии MC680x0.
Уже в системе на микропроцессорах MC68020 стало возможным организовывать страничное разбиение памяти с помощью специализированных микросхем. А уже в системах на микропроцессоре MC68030 этот модуль был включен в сам микропроцессор. Вследствие этого в него были введены следующие регистры:
CRP -- содержит 64-х разрядный дескриптор базового адреса таблицы верхнего уровня (иначе говоря, адрес таблицы).
SRP -- содержит тот же дескриптор для режима супервизора (для некоторых конфигураций).
TCR -- регистр для задания конфигурации страничного разбиения.
MMUSR -- регистр "состояния" страничной памяти. В нем устанавливаются биты, позволяющие провести "диагностику" ошибок при работе со страничной памятью.
Вместо использования регистра MMUSR в MC68060 используются два других регистра:
PCR -- регистр конфигурации процессора;
BUSCR -- регистр конфигурации шины.
Конкретную реализацию и функционирование регистров MMU смотри ниже.
Регистры флагов
Помимо регистров данных и адреса в процессорах существуют специальные регистры, в которых отслеживается состояние процессора. в процессорах IBM 360/370 таким регистром служило слово состояния программы (Program Status Word, PSW). Однако с ростом сложности процессоров этих служебных регистров становилось все больше. Хотя в стартовых моделях микропроцессоров корпораций Intel и Motorola присутствовал только один служебный регистр (FLAGS у i8086/88 и SR у MC68000), уже в следующих моделях их число стало большим. Однако именно к этим, впервые появившемся регистрам происходит наиболее частое обращение у программистов. Дело в том, что они создают признаки результата, необходимые в операциях ветвления и циклов. Рассмотрим признаки по-подробнее.
Признаки результатов.
Поле признаков результата (или байт условий) содержат в себе биты, которые показывают состояние процессора в результате выполнения последней команды. Существуют четыре основных признака:
N -- признак знака. N=0 -- положительные результат выполнения команды с операндами со знаком, N=1 -- отрицательный результат этих операций. Признак знака совпадает с самым старшим (31, 15, 7) знаковым разрядом регистра.
Z -- признак нуля. Z=1 при нулевом результате операции, когда в результате арифметической или логической (но не загрузки или пересылки!) регистр обнулялся.
V -- признак переполнения. Принимает значение V = 1 в случае переполнения разрядной сетки при обработке операций со знаком (иными словами, когда в результате целочисленной операции получилось слишком большое (или слишком малое отрицательное) число, и произошел перенос единицы в самый старший, знаковый байт).
C -- признак переноса. Он принимает значение C=1 при возникновении переноса из самого старшего разряда обрабатываемых операндов. Он "почти" аналогичен признаку V, но происходит при операциях с беззнаковыми данными (типа беззнаковых целых чисел, кодов ASCII и т.д.).
Это -- основные признаки результатов. С ними связаны так называемые мнемокоды операций, применяемых для обозначения операций циклов и ветвлений. Эти мнемокоды приведены в таблице D.4.I.