Что случилось с моей оперативной памятью?

Я пытаюсь понять основы ОС Linux. Я запускаю 64-разрядный Ubuntu 12.04 на 64-битном процессоре. Система имеет 2 ГБ оперативной памяти.

cat /proc/meminfo MemTotal: 2012040 kB 

Вопрос 1 : Где отсутствует 85112 КБ ОЗУ?

 2097152 (2 gb in kilobytes) 2012040 - ______________ 85112 

Является ли это зарезервированным для чего-то еще или это аппаратное ограничение, которое система не может использовать 4% ОЗУ?

Вопрос 2 : Мое начальное чтение говорит мне, что для пространства ядра пользователя существует 3: 1. Почему это не так?

 (3/4)*2097152 =1572864 for user space (1/4)*2097152 =524288 for kernel space 

Я знаю о кэшах и буферах Linux RAM (я потратил некоторые исследовательские усилия, чтобы понять это, по крайней мере), но в этом случае это не имеет никакого отношения к этому, так что происходит?

  • Разница между free -m и ps -euf
  • Как читать .vma-файлы?
  • Выделение защищенной памяти
  • Управление памятью: устранение виртуальных адресов
  • как ограничить адрес dma конкретным диапазоном в ядре linux?
  • Что произойдет, если количество свободной памяти (vm.min_free_kbytes) будет слишком низким?
  • Память не используется больше, но все еще выделена
  • Как я могу найти объем памяти, потребляемый процессом?
  • 2 Solutions collect form web for “Что случилось с моей оперативной памятью?”

    Вы действительно не должны задавать два вопроса в одном, но …

    Вопрос 1

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

     [ 0.000000] Memory: 6106920k/7340032k available (3633k kernel code, 1057736k absent, 175376k reserved, 3104k data, 616k init) 

    Линия «отсутствует» – это память, которая на самом деле отсутствует (на данный момент в этой машине установлено 6 ГБ ОЗУ). Ядро также выплевывает карту памяти (это ранее в загрузочных сообщениях):

     [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable [ 0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000000e2c00-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bf77ffff] usable [ 0.000000] BIOS-e820: [mem 0x00000000bf780000-0x00000000bf797fff] ACPI data [ 0.000000] BIOS-e820: [mem 0x00000000bf798000-0x00000000bf7d9fff] ACPI NVS [ 0.000000] BIOS-e820: [mem 0x00000000bf7da000-0x00000000bfffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000ffe00000-0x00000000ffffffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000001bfffffff] usable 

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

    вопрос 2

    Разделение ядра / пользователя имеет виртуальное адресное пространство , а не память. Его почти не имеет значения в 64-битной коробке, потому что есть так много адресного пространства, чтобы обойти.

    В 32-битном поле для адресного пространства пользователя использовались виртуальные адреса 0x00000000-0xBFFFFFFF. 0xC0000000-0xFFFFFFFF были использованы ядром (это раскол 3: 1, другие параметры включали разделение 2: 2. Обратите внимание, что эти числа являются гигабайтами, поэтому это 2: 2 не 1: 1). Виртуальные адреса также зависят от процесса (каждый процесс может иметь страницу на 0x00001000, а другая страница).

    Но виртуальный адрес не соответствует байту памяти. Это может быть обеспечено в основном четырьмя вещами:

    1. Ничего. Страница не используется. Попытайтесь получить к нему доступ, получите segfault.
    2. Физическая оперативная память. MMU переводит виртуальный адрес на какой-то физический адрес, который в действительности соответствует конденсаторам на DIMM.
    3. Swap (или файл с отображением памяти). Если вы получите доступ к этому, произойдет ошибка страницы, и ядро ​​приостанавливает процесс, пока он считывает данные в память (и, возможно, записывает другие данные на диск, чтобы освободить место). Затем ядро ​​обновляет таблицы страниц, превращая это в случай №2.
    4. Нулевая страница. Это новая выделенная страница, которая еще не используется. Когда это произойдет, ядро ​​найдет страницу физической памяти (возможно, заменив другой материал), заполните ее нулями (для обеспечения безопасности), а затем это случай №2.

    Прозрачные огромные страницы делают больше дел. Вероятно, есть несколько менее важных, о которых я тоже забыл …

    Во всяком случае, мой 64-битный чип имеет 48-битный размер виртуального адреса. Я не уверен, что разделяет ядро, но даже если его половина – это 47 бит пространства, что намного превышает 36-битный размер физического адреса. И 131 072 гигабайта ОЗУ слишком дорого … (И, помните, когда он становится дешевле, в 64-х бит осталось 64, будущие процессоры, вероятно, просто позволят им больше).

    Аппаратные резервирования занимают небольшой объем оперативной памяти, особенно если у вас есть встроенная видеокарта, использующая некоторую ОЗУ для собственных операций. Это происходит со всеми операционными системами.

    Interesting Posts

    Regex on Postfix с использованием Centos

    Аппаратное ускорение видео в VLC

    cd в дочерний каталог символической ссылки не выполняется

    Принудительное повторное подключение к приводу sshfs, установленному через fstab

    Запросы туннеля openwrt

    Почему perl regex находит шаблон \\ label \ {. *? \}, Но не \\ ref. *? \} Или \\ autoref \ {. *? \} В файлах TeX?

    Что делает Linux по-другому, что позволяет мне удалять / заменять файлы, в которых Windows будет жаловаться на файл, который в настоящее время используется?

    Команда для запуска дочернего процесса «offline» (без внешней сети) в Linux

    mount.cifs не соблюдает права доступа к файлам в Ubuntu 12.04.2 LTS

    Lenovo Thinkpad T440s Fedora 20 Проблема аутентификации WiFi

    Как автоматизировать (копировать) установку LDAP / Kereberos

    Почему добавление -prune в эту команду find вызывает печать посторонних файлов?

    PPP через USB от RJ11

    Как похоронить невидимую метку в строках текста?

    Зачем мне GRUB_DISABLE_LINUX_UUID = true

    Linux и Unix - лучшая ОС в мире.