Реальный режим
Содержание:
- Классическая адресная схема протокола IP
- Для чего нужна адресация в IP-сетях?
- Особенности процессоров 80386 — 80486
- Таблицы страниц
- Задание
- Методы расширения адресного пространства
- Виртуальное адресное пространство
- Глобальные и частные адреса IPv4
- Примечания
- Описание
- Виртуальное адресное пространство
- 4.4.1. Ошибки страницы
Классическая адресная схема протокола IP
Изначально все адресное пространство разделили на пять
классов: A, B, C, D и Е. Такая схема получила название
«классовой». Каждый класс однозначно идентифицировался
первыми битами левого байта адреса. Сами же классы отличались
размерами сетевой и узловой частей. Зная класс адреса, вы
могли определить границу между его сетевой и узловой частями.
Кроме того, такая схема позволяла при маршрутизации не
передавать вместе с пакетом информацию о длине сетевой части
IP-адреса.
Класс А |
||||
Номер бита |
8 |
16 |
24 31 |
|
Адрес |
…….. |
…….. |
…….. |
|
Сетевая часть |
||||
Класс В |
||||
Номер бита |
8 |
16 |
24 31 |
|
Адрес |
10…… |
…….. |
…….. |
…….. |
Сетевая часть |
||||
Класс С |
||||
Номер бита |
8 |
16 |
24 31 |
|
Адрес |
110….. |
…….. |
…….. |
…….. |
Сетевая часть |
||||
Класс D |
||||
Номер бита |
8 |
16 |
24 31 |
|
Адрес |
1110…. |
…….. |
…….. |
…….. |
Класс E |
||||
Номер бита |
8 |
16 |
24 31 |
|
Адрес |
1111…. |
…….. |
…….. |
…….. |
Рис. 1
Класс А ориентирован на очень большие сети. Все адреса, принадлежащие этому
классу, имеют 8-битный сетевой префикс, на что указывает первый бит левого байта
адреса установленный в нуль. Соответственно, на идентификацию узла отведено
24 бита и каждая сеть «восьмерка» может содержать до 224-2
узлов. Два адреса необходимо отнять, поскольку адреса, содержащие в правом октете
все нули (идентифицирует указанную сеть) и все единицы (широковещательный адрес)
используются в служебных целях и не могут быть присвоены узлам.
Самих же сетей «восьмерок» может быть 27-2. Снова
мы вычитаем двойку, но это уже две служебных сети: 127/8 и
0/8 (по-старому: 127.0.0.0 и 0.0.0.0).
Наконец, можно заметить, что класс А содержит всего
27 * 224 = 231 адресов, или
половину всех возможных IP-адресов.
Класс В предназначен для сетей большого и среднего размеров. Адреса этого
класса идентифицируются двумя старшими битами, равными соответственно 1 и 0.
Сетевой префикс класса состоит из шестнадцати бит или первых двух октетов адреса.
Поскольку два первых бита сетевого префикса заняты
определяющим класс ключом, то можно задать лишь
214 различных сетей. Узлов же в каждой сети можно
определить до 216-2.
В некоторых источниках, для определения количества возможных сетей используется
формула 2х-2 для всех классов, а не только для А. Это связано с определенными
причинами, которые более детально будут изложены ниже. На сегодняшний день нет
никакой необходимости уменьшать количество возможных сетей на две.
Проведя вычисления, аналогичные приведенным для класса А, мы
увидим, что класс В занимает четверть адресного пространства
протокола IP.
Наконец, самый употребляемый класс сетей – класс С – имеет 24
битный сетевой префикс, определяется старшими битами,
установленными в 110, и может идентифицировать до
221 сетей. Соответственно, класс позволяет
адресовать до 28-2 узлов. Занимает восьмую часть
адресного пространства протокола TCP/IP.
Последние два класса занимают оставшуюся восьмую часть в адресном пространстве
и предназначены для служебного (класс D) и экспериментального (класс Е) использования.
Для класса D старшие четыре бита адреса установлены в 1110, для класса Е —
1111. Сегодня класс D используется для групповой передачи информации.
Поскольку длинные последовательности из единиц и нулей трудно запомнить, IP
адреса обычно записывают в десятичной форме. Для этого каждый октет адреса представляется
в виде десятичного числа. Между собой октеты отделяются точкой. Иногда октеты
обозначаются как w.x.y.z и называются «z-октет», «y-октет»,
«x-октет» и «w-октет».
Представление IP-адреса в виде четырех десятичных чисел
разделенных точками и называется «точечно-десятичная
нотация».
Октет |
W |
X |
Y |
Z |
Номер бита |
8 |
16 |
24 31 |
|
Адрес |
11011100 |
11010111 |
00001110 |
00010110 |
220 |
215 |
14 |
22 |
|
Точечно-десятичный формат |
220.215.14.22 |
Рис. 2
На рис. 2 показано, как IP-адрес представляется в
точечно-десятичной нотации.
Подытожим информацию о классах сетей в таблице:
Класс |
Количество сетей |
Количество узлов |
Десятичный диапазон |
|
A |
27 – 2 (126) |
224 – 2 (2 147 483 648) |
1.ххх.ххх.ххх |
— 126.ххх.ххх.ххх |
B |
214 (16 384) |
216 – 2 (65 534) |
128.0.ххх.ххх |
— 191.255.ххх.ххх |
C |
221 (2 097 152) |
28 – 2 (254) |
192.0.0.ххх |
— 223.255.255.ххх |
D |
— |
— |
224.0.0.ххх |
— 239.255.255.ххх |
E |
— |
— |
240.0.0.ххх |
— 254.255.255.ххх |
Для чего нужна адресация в IP-сетях?
В целом адресное пространство в IP-сетях конечно. Например, в IPv4 сетях (это основной протокол на сегодняшний день для глобальной сети Интернет), длина каждого отдельного IP-адреса равна 32 битам, что в совокупности дает адресное пространство количеством 232 = 4 294 967 296 всех возможных адресов (чуть более 4 миллиардов адресов). В то же время новый стандарт IPv6 определяет IP-адреса длиной в 128 бит, что существенно увеличивает адресное пространство до числа примерно равному 3.4×1038 адресов. Это в 79 228 162 514 264 337 593 543 950 336 раз больше, чем адресное пространство IPv4. Примерно 79 септиллионов! Если каждому из 7 миллиардов жителей выделить по пространству адресов, равному IPv4 из пространства адресов IPv6, то каждый из нас получит примерно по 11 318 308 930 609 191 085, то есть примерно по 11.3 квадриллиона IPv4 адресных пространств. Но хотя эти числа и столь огромны, они все равно конечны.
Поскольку Интернет из себя представляет множество различных сетей, объединенных в одну глобальную сеть, существует необходимость каким-то образом распределять адреса из глобального пространства и выделять их в пользование отдельным сетям. Более крупные сети могуть выделять отдельные блоки из своего адресного пространства и распределять их между своими подсетями и так далее.
То есть с точки зрения использования адресного пространства каждая отдельная сеть ассоциирована с некоторым выделенным из глобального пространства блоком IP-адресов. То есть говорят, что такой выделенный блок адресован сети.
CIDR по своей сути и является таким специальным методом выделения некоторых блоков адресов отдельным сетям.
Особенности процессоров 80386 — 80486
Основные статьи: и
С появлением 32-разрядных процессоров 80386 фирмы Intel процессоры могут работать в трёх режимах: реальном, защищённом и виртуального процессора 8086.
В защищённом режиме используются полные возможности 32-разрядного процессора — обеспечивается непосредственный доступ к 4 Гбайт физического адресного пространства и многозадачный режим с параллельным выполнением нескольких программ (процессов). Собственно говоря, многозадачный режим организует многозадачная операционная система, однако микропроцессор предоставляет необходимый для этого режима надежный механизм защиты задач друг от друга с помощью четырёхуровневой системы привилегий. Также в этом режиме доступна страничная организация памяти, повышающая уровень защиты задач друг от друга и эффективность их выполнения.
В процессоре i386 компания Intel учла необходимость лучшей поддержки реального режима, потому что программное обеспечение к времени его появления не было готово полностью работать в защищённом режиме. Поэтому, например, в i386, возможно переключение из защищённого режима обратно в реальный (при разработке 80286 считалось, что это не потребуется, поэтому на компьютерах с процессором 80286 возврат в реальный режим осуществляется схемно — через сброс процессора).
При включении микропроцессора в нём автоматически устанавливается режим реального адреса. Переход в защищённый режим осуществляется программно путём выполнения соответствующей последовательности команд. Программы, предназначенные для защищённого режима, должны быть написаны особым образом. Это означает, что реальный и защищённый режим несовместимы.
Таблицы страниц
Таблицы страниц используются для перевода виртуальных адресов в физические адреса, используемые аппаратными средствами для обработки инструкций; такое аппаратное обеспечение, который обрабатывает этот конкретный перевод часто называют блоком управления памятью. Каждая запись в таблице страниц держит флажок, указывающий, находится ли соответствующая страница в оперативной памяти или нет. Если она находится в оперативной памяти, запись в таблице страниц будет содержать реальный адрес памяти, где хранится страница.
Системы могут иметь как одну таблицу страниц для всей системы, так и отдельные таблицы страниц для каждого приложения и сегмента, деревья таблиц страниц для больших сегментов или некоторой их комбинации. Если есть только одна таблица страниц, различные приложения, работающие одновременно используют различные части одного диапазона виртуальных адресов. При наличии нескольких страниц или сегментов таблицы, есть несколько виртуальных адресных пространств и параллельных приложений с помощью отдельных таблиц страниц для перенаправления на другие реальные адреса.
Задание
Рис 1. Топология сети
Таблица 1. Описание маршрутизаторов и их интерфейсов
Исходная сеть |
145.4.0.0/16 |
|||||
Название |
Тип интерфейса / Пропускная |
|||||
R’ |
Th |
R» |
Th |
R»’ |
Th |
|
R1 |
eth |
10 |
eth |
100 |
— |
— |
R2 |
eth |
10 |
eth |
100 |
— |
— |
R3 |
eth |
100 |
eth |
100 |
serial |
1536Kbitps |
R4 |
eth |
100 |
eth |
10 |
serial |
1536Kbitps |
Таблица 2. Размеры сетей
Сеть |
Количество узлов в |
NET1 |
7634 |
NET2 |
650 |
NET3 |
3400 |
NET4 |
300 |
NET5 |
наиболее |
Часть 1
Используя рис. 1 и таблицы Табл. 1, Табл. 2
разработать схему планирования адресного пространства сети предприятия Обозначить
диапазоны сетевых адресов возможных для назначения узлам сетей NET1,
NET2, NET3, NET4,NET5.
Назначить
IP адреса интерфейсам маршрутизаторов
Часть 2
Составить таблицы маршрутизации маршрутизаторов R1,
R2, R3, R4 с использованием алгоритмов составления таблиц маршрутизации протоколов
RIP и IGRP
Методы расширения адресного пространства
Метод окна
Метод заключается в отображении малого участка свободной памяти W на память большего объема H, как показано на рис. 3.10а. Здесь P — адресное пространство процессора, ZP — область размещения программ, ZF — свободная зона.
Рис. 3.10. Метод окна: а) геометрическое представление метода; б) структурная схема реализации
Схемное решение метода приведено на рис. 3.10б. Емкость большой памяти H=2R+Q ячеек. Большую память можно рассматривать как состоящую из 2R страниц, каждая из которых имеет размер 2Q ячеек, совпадающий с размером окна. Адресная шина процессора разделяется на две части: одна поступает в большую память, а другая на дешифратор. Система работает следующим образом:
1. Процессор загружает регистр старших разрядов адреса, задавая положение проекции окна в адресном пространстве большой памяти.
2. Процессор обращается по некоторому адресу, лежащему внутри окна.
3. Дешифратор опознает принадлежность текущего адреса фиксированному окну и разрешает обмен данными с большой памятью, формируя сигнал ее выбора. В большую память выдается полный адрес R+Q бит, определяющий одну из ячеек.
Чем шире окно, тем реже процессор перезагружает регистр старших адресов большой памяти. Поэтому для окна выделяется как можно больше свободной области адресного пространства процессора.
Пример. Большая память имеет объем 256М байт. Ширина окна в адресном пространстве процессора с 16-разрядным адресом составляет 32К байт, а его позиция в зоне 8000 — FFFF. Определить схему дешифрации окна и разрядность регистра R.
1. Разрядность адреса большой памяти — 28.
2. Для дешифрации окна в адресном пространстве процессора требуется старший бит адреса А15, Q = 1. Схема дешифрации простая: инверсия сигнала А15 для выбора большой памяти.
3. Разрядность регистра R = 28 — (16 — 1) = 13.
Виртуальное адресное пространство
Виртуальное адресное пространство — это системе адресации , используемая в современных операционных системах — в частности — при работе операционной системы с процессами (/потоками). ]
Такая система удобна по различным причинам — в том числе и потому, что позволяет изолировать «рабочие пространства» процессов друг от друга .
Очередной адрес, создаваемый процессом для идентификации области памяти, а которой процесс хранит некоторые данные называется логическим (виртуальным) адресом и относится именно к виртуальному адресному пространству.
Каждый раз, когда программа запускается внутри операционной системы — операционная система (ОС) создаёт хотя бы один новый процесс и новое виртуальное адресное пространство (ВАП) для него.
Виртуальное адресное пространство зависит от:
- архитектуры процессора;
- операционной системы (которая может накладывать дополнительные ограничения)
Виртуальное адресное пространство не зависит от:
- — объема реальной физической(оперативной) памяти, установленной в компьютере.
- — объема жёсткого диска
Адреса команд и переменных в готовой машинной программе, подготовленной к выполнению системой программирования, как раз и являются виртуальными адресами.
Прилагательное «виртуальное» применительно к адресному пространству означает, что это общее число доступных приложению уникально адресуемых ячеек памяти, но не общий объём памяти, установленной в компьютере, или выделенной в конкретный момент времени данному приложению —
в том числе — адреса в виртуальном пространстве не обязательно постоянно соответствуют одним и тем же адресам реальной физической памяти. Например — когда физической (оперативной) памяти не хватает, диспетчер памяти выгружает часть содержимого памяти на диск. При обращении потока по виртуальному адресу, соответствующему переписанным на диск данным, диспетчер памяти снова загружает эти данные с диска в память.
Глобальные и частные адреса IPv4
Следует заметить, что, в контексте проблемы исчерпания, существуют два основных вида адресов IPv4 — глобальные и частные.
Глобальные адреса — это адреса, маршрутизация которых осуществляется глобально, по всей планете. Глобальные адреса обязаны быть уникальными, иначе возникает неоднозначность адреса доставки. Пространство глобально маршрутизируемых адресов, действительно, ограничено числом тех значений, которые может принимать 32-битное целое — адрес IPv4. Это число составляет 2^32 = 4.2 миллиарда значений.
Частные адреса — это адреса, маршрутизация которых осуществляется только в пределах конкретной частной сети — такой как 192.168.0.0/16 или 10.0.0.0/8. Частные адреса обязаны быть уникальными только в пределах соответствующей частной сети. Количество частных сетей на планете не ограничено. Частную сеть, как правило, образует каждый домашний роутер.
Проблема исчерпания адресного пространства IPv4 относится только к глобальным адресам, так как количество частных адресов на планете не ограничено.
По замыслу сети IPv4, глобальные адреса предназначены для глобальных серверов и глобальных маршрутизаторов. Все клиенты сети IPv4 могут получать к ней доступ с помощью частного адреса и NAT-а. Подключение к сети IPv4 может осуществляться и с помощью глобального адреса, но это нежелательно по той причине, что количество глобальных адресов ограничено. Использование глобального адреса для подключения к сети IPv4 без необходимости следует считать расточительным и нерациональным.
Примечания
- Smith, Lucie; Lipner, Ian. . (3 февраля 2011). Дата обращения 2 июля 2011.
- ICANN. .
- ICANN. .
- ICANN,nanog mailing list. .
- ↑ Huston, Geoff . Дата обращения 2 июля 2011.
- ↑ . APNIC (1 февраля 2010). Дата обращения 2 июля 2011.
- . APNIC (15 апреля 2011). Дата обращения 2 июля 2011.
- ↑ . American Registry for Internet Numbers (24 сентября 2015). Дата обращения 25 декабря 2015.
- ↑ Niall Richard Murphy, David Malone. IPv6 network administration (неопр.). — O’Reilly Media, 2005. — С. xvii—xix. — ISBN 0596009348.
- Mark Townsley. (21 января 2011).
- S.H. Gunderson. (PDF) (октябрь 2008). Дата обращения 2 июля 2011.
- R. Gilligan, E. Nordmark. .
- V. Fuller, T. Li. .
- Ferguson, Tim . CNET News.com (18 февраля 2007). Дата обращения 2 июля 2011.
- (PDF) (апрель 1996). Дата обращения 2 июля 2011.
- (сентябрь 1993). Дата обращения 2 июля 2011.
- Rupp, Stephan (2005). Дата обращения 2 июля 2011.
- IANA. . IANA IPv4 Address Space Registry. Дата обращения 2 июля 2011.
- Stephen Lawson. . Computerworld (31 января 2011).
- (3 февраля 2011).
- . Дата обращения 2 июля 2011.
- .
- Carolyn Duffy Marsan. . Network World (7 февраля 2011).
- . www.fix6.net (24 ноября 2010). Дата обращения 2 июля 2011.
- .
- RIPE. .
- (недоступная ссылка). Дата обращения 29 апреля 2019.
- Igor Gashinsky. .
- .
- .
- . Дата обращения 2 июля 2011.
- ↑ Geoff Huston. (англ.) (12 August 2015). Дата обращения 12 декабря 2015.
- (недоступная ссылка). Arin.net. Дата обращения 2 июля 2011.
- . Arstechnica (15 апреля 2011). Дата обращения 2 июля 2011.
- APNIC. (недоступная ссылка). Дата обращения 23 апреля 2011.
- APNIC. .
- APNIC. .
- .
- (недоступная ссылка).
- APNIC. (недоступная ссылка).
- ↑ . APNIC.
- APNIC. (недоступная ссылка).
- .
- Geoff Huston. (англ.) (12 January 2015). Дата обращения 12 декабря 2015.
- (недоступная ссылка). Arin.net. Дата обращения 2 июля 2011.
- Geoff Huston. (англ.). Circleid.com (24 July 2013). Дата обращения 3 августа 2013.
- By John Lui, CNETAsia. .
- ↑ Hain, Tony . Дата обращения 2 июля 2011.
- American Registry for Internet Numbers (ARIN) (2007-05-21).. Пресс-релиз. Проверено 2011-07-02.
- Latin American and Caribbean Internet Addresses Registry (LACNIC) (2007-06-21).. Пресс-релиз. Проверено 2011-07-02.
- . RIPE NCC (26 октября 2007). Дата обращения 2 июля 2011.
- (PDF) (недоступная ссылка). Дата обращения 2 июля 2011.
- . RIPE NCC (3 марта 2008). Дата обращения 2 июля 2011.
- . Apnic.net (10 февраля 2010). Дата обращения 2 июля 2011.
- . Arin.net. Дата обращения 2 июля 2011.
- . Ripe.net. Дата обращения 2 июля 2011.
- Wilson, Paul; Michaelson, George; Huston, Geoff. . Дата обращения 2 июля 2011.
- V. Fuller, E. Lear, D. Meyer. . IETF (24 марта 2008). Дата обращения 2 июля 2011.
- . Windows 2000 Resource Kit. Microsoft. Дата обращения 2 июля 2011.
- van Beijnum, Iljitsch . Дата обращения 2 июля 2011.
- . Cisco Systems, Inc. Дата обращения 2 июля 2011.
- Marsan, Carolyn . Network World. Дата обращения 2 июля 2011.
- Stephen Shankland. (3 февраля 2011). Дата обращения 2 июля 2011. (недоступная ссылка)
- . Arin.net (20 октября 2010). Дата обращения 2 июля 2011.
- Kevin Murphy. . Domain Incite (24 марта 2011).
- . ARIN.
- Jaikumar Vijayan. (25 марта 2011).
Описание
В реальном режиме виртуальный адрес ячейки памяти состоит из двух чисел:
- сегментной части разрядностью 16 бит, по которой вычисляется физический адрес начала сегмента;
- смещения разрядностью 16 бит ячейки памяти от начала сегмента.
Для вычисления физического или линейного адреса ячейки памяти процессор вычисляет физический адрес начала сегмента — умножает сегментную часть виртуального адреса на число 16 (или, что то же самое, сдвигает её влево на 4 бита), а затем складывает полученное число со смещением от начала сегмента:
- сегментная_часть × 16 + смещение
Если сегментная часть адреса не указана (в коде инструкции), процессор читает сегментную часть адреса из одного из сегментных регистров (из какого именно — зависит от кода инструкции).
При такой адресации адреса 0400h:0001h и 0000h:4001h (буква «h» означает, что число записано в шестнадцатеричной системе счисления) будут ссылаться на одну и ту же ячейку памяти, так как 400h × 16 + 1 = 0 × 16 + 4001h.
Минимальный адрес: 0000h:0000h (0 байт).
Максимальный адрес: FFFFh:FFFFh (FFFFh × 16 + FFFFh) = 10FFEFh = 1 114 095 Б = 100000h + 10000h — 11h = 1 МиБ + 64 КиБ — 17 Б).
Описанный способ вычисления физического адреса позволяет адресовать ( 1 МиБ + 64 КиБ — 17 Б + 1 Б ) памяти (диапазон адресов 0000h…10FFEFh); 1 байт добавляется для учёта байта с нулевым адресом. Однако в процессорах / имеется всего 20 адресных линий (металлических дорожек), поэтому размер доступной памяти составляет 220 Б = 1 МиБ (диапазон адресов 0000h…FFFFFh), а при адресации выше (в диапазоне 100000h…10FFEFh) происходит переполнение («заворот») — старший единичный бит адреса игнорируется, и происходит обращение к 64 КиБ в начальных адресах (0000h…FFEFh).
Процессоры имеют 24‑битовую адресную шину (возможна адресация 224 Б = 16 МиБ памяти), поэтому в них переполнения («заворот») не происходит.
Компьютеры IBM PC/AT построены на процессоре Intel 80286, и для сохранения совместимости с компьютерами IBM PC и IBM PC/XT (построенными на Intel 808x) оснащены логическим элементом (вентилем), управляющим работой 21‑го адресной линии (провода) (обозначаемой «A20») и названным «Gate A20». Этот логический элемент по умолчанию отключен (что соответствует режиму совместимости), и управляется через контроллер клавиатуры (обычно, через микросхему Intel 8042).
Подробнее по этой теме см. High Memory Area.
Виртуальное адресное пространство
Структура объекта. |
Объекты занимают важный ресурс — участки виртуального адресного пространства ядра — поэтому, когда объект более не нужен, он должен быть удален, а его адресное пространство возвращено системе. Для этого в заголовке каждого объекта содержится счетчик ссылок на объект. Этот счетчик увеличивается на единицу каждый раз, когда объект открывается, и уменьшается на единицу при закрытии объекта. Когда значение счетчика уменьшается до 0, это означает, что никто более не пользуется этим объектом. Когда объект открывается или освобождается компонентом исполняющей системы, используется второй счетчик, даже если настоящий дескриптор при этом не создается. Когда оба счетчика уменьшаются до 0, это означает, что этот объект более не используется ни одним пользователем и ни одним исполняющим процессом, то есть объект может быть удален, а его память освобождена.
Суть метода состоит в том, что виртуальное адресное пространство делится на области равного размера, называемые песочницами. Обязательным свойством каждой песочницы является одинаковость старших разрядов адресов в пределах одной песочницы.
Адресное пространство одного процесса UNIX. |
В NT каждый пользовательский процесс имеет свое собственное виртуальное адресное пространство. Длина виртуального адреса составляет 32 бита, поэтому каждый процесс имеет 4 Гбайт виртуального адресного пространства.
Необходимость отображения адресов возникает, если процесс использует виртуальное адресное пространство или программа, соответствующая этому процессу, имеет оверлейную структуру. В последнем случае программа состоит из корневого сегмента ( секции), который постоянно находится в ОП, и нескольких оверлейных сегментов, располагающихся во внешней памяти и загружаемых ОС по мере необходимости в одну и ту же область ОП. При этом реализуется возможность выполнения программы, размер которой превышает размер области ОП, выделенной для этой программы.
ЛОМАР AREA производит отображение 7 — й страницы виртуального адресного пространства программы ( адреса 160000 — 177777) на страницу ввода-вывода, обеспечивая тем самым доступ к регистрам внешних устройств.
Расположение и функции диспетчера памяти ( MMU. Здесь диспетчер памяти показан как часть микросхемы процессора, потому что в наши дни это обычно так и есть. Но логически он мог бы быть отдельной микросхемой, и так было некоторое время назад. |
Эти программно формируемые адреса, называемые виртуальными адресами, формируют виртуальное адресное пространство. На компьютерах без виртуальной памяти виртуальные адреса подаются непосредственно на шину памяти и вызывают для чтения или записи слово в физической памяти с тем же самым адресом. Когда используется виртуальная память, виртуальные адреса не передаются напрямую шиной памяти.
У каждого процесса есть собственное 32-разрядное ( будет 64-разрядное) виртуальное адресное пространство. У процессов может быть один или несколько потоков, видимых для операционной системы и управляемых ею.
Расположение и функции диспетчера памяти ( MMU. Здесь диспетчер памяти показан как часть микросхемы процессора, потому что в наши дни это обычно так и есть. Но логически он мог бы быть отдельной микросхемой, и так было некоторое время назад. |
Эти программно формируемые адреса, называемые виртуальными адресами, формируют виртуальное адресное пространство. На компьютерах без виртуальной памяти виртуальные адреса подаются непосредственно на шину памяти и вызывают для чтения или записи слово в физической памяти с тем же самым адресом. Когда используется виртуальная память, виртуальные адреса не передаются напрямую шиной памяти.
Отображения виртуальных адресов в физические в машине UltraSPARC II. |
Тем не менее по разным причинам программы не могут использовать полное 64-битное виртуальное адресное пространство. Поддерживается только 64 бита, поэтому программы не могут превышать 1 8х1013 байтов. Допустимая виртуальная память делится на 2 зоны по 243 байтов каждая, одна из которых находится в верхней части виртуального адресного пространства, а другая — в нижней. Между ними находится дырка, содержащая адреса, которые не используются.
Каждый процесс системы Linux на 32-разрядной машине получает 3 Гбайт виртуального адресного пространства для себя, с оставшимся 1 Гбайт памяти для страничных таблиц и других данных ядра. Один гигабайт ядра не виден в пользовательском режиме, но становится доступным, когда процесс переключается в режим ядра.
4.4.1. Ошибки страницы
Ошибка страницы — это последовательность событий, происходящих, когда программа пытается обращаться к данным (или коду) в своём адресном пространстве, которые в данный момент отсутствуют в ОЗУ. Операционная система может обработать ошибки страницы, каким-то образом загрузив запрашиваемые данные в память, что позволит программе продолжить работу, как если бы никакой ошибки не было.
В случае с нашим гипотетическим приложением, процессор сначала передаёт нужный адрес (12374) устройству MMU. Однако, MMU не может преобразовать этот адрес. Поэтому MMU прерывает процессор и вызывает программу, так называемый обработчик ошибки страницы. Затем обработчик ошибки страницы определяет, что нужно сделать для решения этой проблемы. Он может:
-
найти, где находится на диске запрошенная страница, и прочитать её (это обычно происходит в случае ошибки страницы с кодом)
-
определить, что запрошенная страница уже находится в ОЗУ (но выделена не текущему процессу), и подключить эту страницу, настроив MMU
-
указать на специальную страницу с одними нулями и выделить для процесса новую страницу, только если процесс когда-нибудь попытается записать в неё данные (этот приём называется копированием при записи и часто используется для страниц, изначально содержащих нули)
-
получить нужную страницу откуда-то ещё (это будет рассмотрено более подробно позже)