Есть ли обратная сторона объявления сегмента BSS объемом 16 ГБ?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Есть ли обратная сторона объявления сегмента BSS объемом 16 ГБ?

Сообщение Anonymous »

Я рассматриваю эту небольшую программу, использование памяти которой непредсказуемо, поскольку она работает с каталогами, которые могут содержать очень мало файлов или, возможно, более десятков миллионов файлов, и ей необходимо хранить все имена файлов в оперативной памяти одновременно из-за на поведение ядра.
Этот фрагмент не является программой, которую я пишу. Это показывает, почему мне приходится хранить в памяти все имена файлов одновременно:

Код: Выделить всё

   DIR *dir = opendir(".");
for (struct dirent *entry; (entry = readdir(dir);)
unlink(entry->d_name); // DANGER DO NOT RUN ME
Этот фрагмент выглядит так, будто удаляет все файлы из текущего каталога, но это не так. Фундаментальная проблема современных систем заключается в том, что когда вы делаете что-то подобное, вы пропускаете файлы, поскольку удаление или изменение записей дерева каталогов дестабилизирует перечисление.
Почти вся память программы должна состоять из одного буфер, содержащий все имена файлов в каталоге, поэтому я подумываю объявить структуру памяти, которая выглядит следующим образом (ASLR включен, поэтому 0 на самом деле не является 0):

Код: Выделить всё

000000000 ELF header
000000118 Program code
000001000 work buffers
000002000 begin stretchy array
400002000 no man's land (mapped with 0 access so anything hitting it faults)
400003000 top of stack
400005000 bottom of stack
Следующее обсуждать не нужно: программный код слишком мал или стек слишком мал. Эти константы легко изменить.
Что нужно обсудить, так это большой эластичный массив. Управление несмежным массивом является раздутым, и у нас есть MMU, поэтому ему не обязательно быть непрерывным в физической памяти. Я видел этот трюк когда-то давно, в системе, которой было все равно, потому что она была однопользовательской. Я понятия не имею, вызовет ли это проблемы в многопользовательском компьютере.
Поведение, которое я хочу, должно быть очевидным. Память не выделяется, пока к ней не прикоснутся. А пока это ничего. Итак, насколько плохо говорить, что у меня есть сегмент BSS объемом 16 ГБ и я использую только то, что мне действительно нужно? Поскольку он такой большой, мне нужно быть абсолютно уверенным, что стек его не встретит, поэтому динамическое выделение адресного пространства с помощью mmap() — это не запуск.
Альтернативная гипотеза: теоретически, если есть способ выразить это в формате PE, я мог бы просто зарезервировать память при запуске и зафиксировать ее по мере необходимости. Согласно справочной странице, невозможно указать зарезервировать 16 ГБ адресного пространства в mmap и пока не выделять его.
Я записал заголовки ELF с пустыми программа (

Код: Выделить всё

mov al, 60 ; syscall
), поэтому он работает.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ss-segment
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ЦП с огромной страницей объемом 1 ГБ, но без записи TLB объемом 1 ГБ
    Anonymous » » в форуме Linux
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Разница между объемом страницы и объемом запроса в сервисе и JSP?
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • PHP в HTML <СТОРОНА СЕРВЕРА, НЕ СТОРОНА БРАУЗЕРА>
    Anonymous » » в форуме Php
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Есть ли обратная сторона замены all Remember(value) на Remember {deriveStateOf {value}}?
    Anonymous » » в форуме Android
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • В чем обратная сторона языка PHP для современных технологий? [закрыто]
    Anonymous » » в форуме Php
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»