Зарегистрируйтесь, чтобы продолжить обучение

Адресация и страницы Основы ЭВМ

В первых компьютерах программа обращалась к памяти напрямую. Она писала данные по конкретным номерам ячеек, и эти же ячейки могли занять другие программы. Всё работало, пока система выполняла только одну задачу. Но как только в памяти появлялось сразу несколько процессов, они начинали мешать друг другу. Один процесс легко мог затереть данные другого. Это было небезопасно и неудобно.

Когда системы усложнялись, возникла ещё одна проблема. Памяти становилось больше, но она оказывалась разорванной на куски. Свободные области были, но не подряд, а в разных местах. Программе, которая просила большой кусок, такой памяти не хватало, хотя на самом деле место было. Инженерам нужно было придумать способ обойти обе трудности сразу.

Решением стала виртуальная память. Теперь программа видит у себя ровный и непрерывный адрес — будто у неё собственная линейная память от нуля и до конца. Этот адрес называется логическим. В действительности данные лежат в общей физической памяти, и каждое обращение к логическому адресу переводится в настоящий физический.

Когда программа работает, она всегда использует именно логический адрес — воображаемый номер ячейки в своём пространстве. Настоящий, то есть физический адрес, вычисляется через таблицу страниц. Чтобы такой перевод был возможен, память делится на одинаковые куски. Этот механизм называется paging, или страничная адресация. Программа видит у себя логические страницы, а система сопоставляет их с физическими блоками. Именно это делает page table — таблица страниц, где хранится соответствие: какая логическая страница находится в каком физическом блоке.

Чтобы это стало возможным, память начали делить на одинаковые блоки, которые получили название страниц. Размер страницы фиксированный, чаще всего четыре килобайта. Когда процесс обращается к адресу, процессор делит его на номер страницы и смещение внутри неё. Номер страницы ищется в таблице, которую ведёт операционная система. Таблица показывает, где в физической памяти лежит нужный блок. После этого к адресу блока добавляется смещение, и получается реальное место в памяти.

Такой механизм позволяет программе работать так, будто память у неё своя, и при этом операционная система свободно управляет тем, где именно лежат данные. Если места в оперативке не хватает, часть страниц можно выгрузить на диск, а при необходимости вернуть обратно.

Есть ещё один важный момент — выравнивание. Процессор не работает с каждым байтом по отдельности. Он считывает данные блоками — по 4 или 8 байт. Если переменная лежит так, что её начало совпадает с нужной границей, процессор забирает её сразу. Если нет, он вынужден читать два блока и склеивать их. Это замедляет работу. Поэтому компилятор старается размещать переменные по правилам выравнивания, чтобы процессор мог работать быстрее.

Разница между логическим и физическим адресом становится понятной на примере. Пусть размер страницы равен тысяче байт. Программа обращается к адресу 2500. Процессор делит его: это вторая страница и смещение пятьсот. В таблице страниц записано, что вторая логическая страница хранится в физическом блоке номер семь. Тогда реальный адрес будет семь тысяч плюс пятьсот, то есть 7500. Для программы это по-прежнему адрес 2500, но фактически данные находятся в другой области.

Такое преобразование решает сразу две задачи. Программы изолированы друг от друга, и каждая уверена, что память принадлежит только ей. При этом операционная система использует память гибко, раскладывая страницы туда, где есть место.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff