Что делает Расположение Памяти Виртуального ядра в dmesg, подразумевают?

Для добавления к тому, что сказали другие я просто сказал бы, что, в то время как буквы с диакритическим знаком и много специальных символов законны в именах файлов, они могут вызвать проблемы в любом из следующих сценариев:

  • Вы совместно используете свою файловую систему с другими компьютерами, особенно с различными операционными системами;
  • Вы совместно используете файлы с другими (и хотя электронная почта имеет тенденцию быть довольно хорошей с преобразованиями, иногда она просто не работает);
  • Вы используете сценарии оболочки для автоматизации некоторых задач (пробелы особенно проблематичны, хотя существует много способов иметь дело с ними);
  • Вы используете долю файла от другого компьютера.

...

19
29.12.2010, 20:04
1 ответ

Прежде всего система на 32 бита имеет 0xffffffff (4'294'967'295) линейные адреса для доступа к физическому местоположению ontop RAM.
Ядро делит эти адреса на пространство ядра и пользователя.

К пространству пользователя (верхняя память) может получить доступ пользователь и, при необходимости, также ядром.
Диапазон адресов в шестнадцатеричном числе и нотации в декабре:

0x00000000 - 0xbfffffff
0 - 3'221'225'471

К пространству ядра (низкая память) может только получить доступ ядро.
Диапазон адресов в шестнадцатеричном числе и нотации в декабре:

0xc0000000 - 0xffffffff
3'221'225'472 - 4'294'967'295

Как это:

0x00000000             0xc0000000  0xffffffff 
    |                        |          |
    +------------------------+----------+
    |  User                  |  Kernel  |
    |  space                 |  space   |
    +------------------------+----------+

Таким образом расположение памяти Вы видели в dmesg соответствует отображению линейных адресов в пространстве ядра.

Во-первых, .text, .data и последовательности .init, которые обеспечивают инициализацию собственных таблиц страниц ядра (переводят линейный в физические адреса).

.text : 0xc0400000 - 0xc071ae6a   (3179 kB)

Диапазон, где код ядра находится.

.data : 0xc071ae6a - 0xc08feb78   (1935 kB)

Диапазон, где сегменты данных ядра находятся.

.init : 0xc0906000 - 0xc0973000   ( 436 kB)

Диапазон, где начальные таблицы страниц ядра находятся.

(и еще 128 КБ для некоторых динамических структур данных.)

Это минимальное адресное пространство является просто достаточно большим, чтобы установить ядро в RAM и инициализировать ее базовые структуры данных.

Их используемый размер показывают в круглой скобке, возьмите, например, код ядра:

0xc071ae6a - 0xc0400000 = 31AE6A

В десятичной записи это 3'255'914 (3 179 КБ).


Во-вторых, использование пространства ядра после инициализации

lowmem  : 0xc0000000 - 0xf77fe000   ( 887 MB)

Диапазон lowmem может использоваться ядром для прямого доступа к физическим адресам.
Это не полный 1 ГБ, потому что ядро всегда требует, чтобы по крайней мере 128 МБ линейных адресов реализовали выделение памяти, состоящее из нескольких несмежных участков, и отображенные на фиксацию линейные адреса.

vmalloc : 0xf7ffe000 - 0xff7fe000   ( 120 MB)

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

pkmap   : 0xff800000 - 0xffa00000   (2048 kB)

Постоянное отображение ядра позволяет ядру устанавливать длительные отображения страничных блоков верхней памяти в адресное пространство ядра. Когда страница HIGHMEM отображается с помощью kmap (), виртуальные адреса присвоены отсюда.

fixmap  : 0xffc57000 - 0xfffff000   (3744 kB)

Они отображаются на фиксацию линейные адреса, которые могут относиться к любому физическому адресу в RAM, не только последний 1 ГБ как адреса lowmem. Отображенные на фиксацию линейные адреса немного более эффективны, чем их lowmem и pkmap коллеги. Существуют выделенные дескрипторы таблицы страниц, присвоенные для фиксированного отображения, и отображения страниц HIGHMEM с помощью kmap_atomic выделяются отсюда.


Если Вы хотите погрузиться глубже в кроличью нору:
Понимание ядра Linux

22
27.01.2020, 19:45
  • 1
    Спасибо за этот большой ответ. Я хотел бы знать, почему низкая мадам не полный 1 ГБ и больше о следующей части предложения, "потому что ядро всегда требует, чтобы по крайней мере 128 МБ линейных адресов реализовали выделение памяти, состоящее из нескольких несмежных участков, и отображенные на фиксацию линейные адреса". –  Sen 26.12.2010, 09:27
  • 2
    Ядро должно время от времени получать доступ к коду верхней памяти (f.e. BIOS и информация ACPI находятся на первом МБ RAM), он не может сделать этого непосредственно (как lowmem область), поэтому он должен отобразить низкую память на верхнюю память линейные адреса, 128 МБ резервируются только с этой целью. vmalloc область главным образом временная отображенный на некоторые области верхней памяти, и доберитесь, повторно отобразился довольно быстро. –  wag 26.12.2010, 15:09
  • 3
    , Таким образом, страницы, настроенные ядром для виртуального системного вызова, являются также частью fixmap??? Я столкнулся с этим вопросом, потому что я хочу знать то, что точно находится на странице с адресом fffb5000, fffa1000 и т.д... Я становлюсь служебным в своем воспроизведении записи виртуальной машины, потому что много виртуальных центральных процессоров получают доступ к этой странице МНОГО...., как делают я знаю то, что точно находится в этом адресе... БОЛЬШОЙ ОТВЕТ :) –  Deepthought 27.12.2012, 07:13

Теги

Похожие вопросы