Линукс использует модель использования памяти

Модель управления памятью в Linux все та же?

1. В современном (12.2016) Linux (4.8, 4.9) все так же память делится на сегменты, а затем на страницы?
2. На сколько я понял х86-64 до сих пор предоставляет сегментные регистры, но не все ядра их используют, разбивая память лишь на страницы, верно?
3. Какую часть памяти суммарно съедают системные дескрипторные таблицы?

Frankenstine

Это не от оси зависит, а от архитектуры процессора и шины памяти. И да, всё ещё интел х86/х64 используют и будут использовать дальше страничную адресацию, как и многие другие процессоры, типа МИПС.
Без использования страничной организации памяти невозможно было бы использовать защищённый режим работы процессора, виртуализацию, защиту данных от попыток исполнения (NX bit) и многое другое, а системная таблица для учёта занятой памяти занимала бы ровно половину объёма оперативки.

Frankenstine

Юрий Чудновский: то что вы написали в ответе это и так ясно и я с этим согласен. Фактически мой 1й вопрос сводится к «в Linux страничная или сегментно-страничная организация памяти?»

Frankenstine

sdf4sdf: В статье же написано, что сегментная адресация в линцусе используется редко. Основная модель работы с памятью в современных осях, тем более в 64-битных — страничная.

1. Linux изначально использует плоскую модель FLAT, где указатели сегментов кода, данных и стека имеют одинаковый базовый адрес. А это означает, что сегментная организация памяти в Linux не используется. Это значительно упрощает перенос на другие платформы. Страничная организация памяти предназначена для создания виртуальной памяти. Это позволяет реализовать многозадачность куда проще. Существуют такие версии Linux, работающие без страничной памяти. Это нужно только для контроллеров, микроконтроллеров.

Читайте также:  Install driver command linux

2. Нет. x86-64 даёт только два регистра-сегмента для контекста, они нужны очень виртуальным машинам. Остальные регистры недоступно физически. Сегодня именно что все процессоры разбивают память на страницы. Всегда. Без страничной памяти нельзя работать. Ибо начнётся сильная фрагментация с тяжёлыми последствиями. Другое дело, когда страницы могут иметь разный размер для снижения размера таблицы преобразования адресов. Но они имеют чётко фиксированный размер.

3. Таблицы дескрипторов имеют максимальный размер: 64 КБ — 8192 дескрипторов. Это написано во многих книгах. Существует глобальный, который всегда один, а есть локальный, который зависит от программ. А также прерываний.

Источник

какую модель памяти сегментную или страничную использует windows, linux, macos?

При прочтении Таненбаума возникли сложности с пониманием организации памяти в ОС. Какая модель используется в современных ОС? Сегментная, страничная, сегментно-страничная? В частности привело смущение сказанное про компиляторы, что для них использование сегментной организации памяти гораздо удобнее, но компилятор же запускается в ОС. Это и запутало. Как я понимаю как работать с памятью реализовано в ОС, но разве программа может изменить этот способ?

в частности osx(у него ядро linux), gnu linux(и тут ядро linux),windows используют схему с виртуальной памятью и страничками.

@Naumov а разве виртуальная память не «надстройка» над этими видами? Сегментная вообще отсутствует в топ ОС? Если да то где она применяется в современности? Я почему то пришел к выводу, что используется сегментно-страничная. видимо надо перечитать всё еще раз, да и не раз.

Память может по разному выглядеть для разных частей. На уровне железа/ ОСи, страничная (paged) организация уже давно используется, к примеру x86-64 архитектура в long mode вообще segmentation не использует. @Naumov OS X производная (вдохновлённая) от BSD, а не Linux.

Читайте также:  Linux with trim support

1 ответ 1

  • В современных ОС используется либо страничная, либо сегментно-страничная организация памяти. Сегментная не выгодна с точки зрения рациональности использования физической памяти (возможна фрагментация).

За всю работу по переводу логического адреса в физический ответственна аппаратура ( MMU ), а за формирование правил и таблиц по которым будет осуществлен перевод — ОС.

С точки зрения прикладной программы, она (программа) находится в линейном адресном пространстве размером около 2Гб (для 32 битной windows), так как, 2 ГБ виртуального адресного пространства занимает код ОС, драйверов и DLL.

Хочу заметить, что виртуальный адрес не имеет ничего общего с физическим.

введите сюда описание изображения

Очень утрированно процесс управления памятью показан на картинке ниже:

Источник

Оцените статью
Adblock
detector