Как ядро знает сколько пользователя адресуемая память откладывать?

C-библиотечная-функция free() но не имеет к, может возвратить память ядру.

Некоторые реализации malloc() переместите границу между "кучей" и в других отношениях неиспользованным адресным пространством ("системное повреждение") через sbrk() системный вызов, затем скупо выдайте мелкие кусочки тех больших выделений. Не получая каждую меньшую освобожденную часть, free() не может действительно возвратить память ОС.

Та же самая причина относится malloc() реализации, которые не используют sbrk(2), но, возможно, используйте mmap("/dev/zero") или что-то.. Я не могу найти ссылку, но я, кажется, помню что один или другой из используемого BSD's mmap() тот способ получить страницы памяти. Тем не менее, free() не может возвратить страницу операционной системе, если каждое подвыделение не освобождено программой.

Некоторые malloc() реализации действительно возвращают память системе: ChorusOS(?), по-видимому, сделал. Не ясно, переместило ли это системное повреждение, или munmap()'ed страницы.

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

1
24.11.2013, 12:21
1 ответ

Как правило, на x86 ни без какого PAE, будет разделение пользователя/ядра 3Gb/1Gb. Это означает, что главный 1 ГБ памяти резервируется для ядра, в то время как память доступов пространства пользователя на уровне более низких 3 ГБ. Это сделано этот способ избежать необходимости обновлять регистр, который указывает на таблицы страниц (CR3), и сбросьте TLB каждый раз, когда существует контекстное переключение. С этой оптимизацией обновляется CR3, и TLB сбрасывается только при планировании другого процесса.

Информация о том, как виртуальные адреса должны быть интерпретированы, хранится в трех местах:

  • Области Виртуальной памяти (иначе VMAs, иначе отображения): они связывают непрерывный регион памяти к запоминающему устройству (или файл или подкачка, для анонимных отображений.
  • Записи таблицы страниц: они связывают целую страницу виртуальных адресов к соответствующим физическим адресам, и содержит флаги misc и полномочия. PTEs загружаются лениво из VMAs: PTE не обязательно инстанцируют (и соответствующая страница, разбитая на страницы в: это по запросу подкачкой страниц), пока доступ не предпринят; только для процессов, которые получают доступ к 3 ГБ памяти, будут нужны 3 МБ таблиц страниц.
  • TLB: это - кэш HW таблицы страниц.
0
28.01.2020, 02:01

Теги

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