Примеры больших исполняемых файлов

Пример сценариев использования больших исполняемых файлов.

Пример модели адресного пространства большой программы

Если предпочитаемая модель адресного пространства имеет следующий вид:
  • MAXDATA=0x50000000 (non-DSA)
  • в сегментах 0xB, 0xC and 0xE необходимы области shmat/mmap
  • Текст и пред-перемещенные данные доступа области библиотеки
Формат адресного пространства:
   0x0: системный сегмент
   0x1:
   0x2: частные зависимости времени исполнения / стек
   0x3: куча процесса
   0x4: куча процесса
   0x5: куча процесса
   0x6: куча процесса
   0x7: куча процесса
   0x8:
   0x9:
   0xA:
   0xB: shmat/mmap (размещено после exec)
   0xC: shmat/mmap (размещено после exec)
   0xD: текст общей библиотеки
   0xE: shmat/mmap (размещено после exec)
   0xF: пред-перемещенные данные общей библиотеки

Из данного примера можно видеть, что сегменты 0x8–0xA доступны для исполняемого файла.

Приняв, что размер исполняемый файл больше, чем 256 MB и меньше, чем 512 MB, наилучшие установки HUGE_EXEC в данной ситуации приведены ниже:
  1. HUGE_EXEC=0
  2. HUGE_EXEC=0x8
  3. HUGE_EXEC=0x9

Опции 1 и 2 поместят исполняемый файл в сегменты 0x8–0x9, а опция 3 - в сегмент 0x9–0xA.

Пример модели адресного пространства очень большой программы

Если предпочитаемая модель адресного пространства имеет следующий вид:
  • MAXDATA=0x50000000 DSA
  • в сегментах 0xB, 0xC and 0xE необходимы области shmat/mmap
  • Текст и пред-перемещенные данные доступа области библиотеки
Формат адресного пространства:
   0x0: системный сегмент
   0x1:
   0x2: частные зависимости времени исполнения / стек
   0x3: куча процесса
   0x4:      |
   0x5:      |
   0x6:      v
   0x7: ____________ (лимит данных)
   0x8:
   0x9:
   0xA:
   0xB: shmat/mmap (размещено после exec)
   0xC: shmat/mmap (размещено после exec)
   0xD: текст общей библиотеки
   0xE: shmat/mmap (размещено после exec)
   0xF: пред-перемещенные данные общей библиотеки

Из данного примера можно видеть, что сегменты 0x4–0xA доступны для исполняемого файла.

Приняв, что размер исполняемый файл больше, чем 256 MB и меньше, чем 512 MB, наилучшие установки HUGE_EXEC в данной ситуации приведены ниже:
  1. HUGE_EXEC=0x8
  2. HUGE_EXEC=0x9

Опции 1 поместит исполняемый файл в сегменты 0x8–0x9, а опция 2 - в сегмент 0x9–0xA.

Прим.: Параметр HUGE_EXEC=0 не будет подходящим для данного клиента, т.к. система выберет сегменты 0xB–0xC для исполняемого файла (из-за динамического распределения сегментов (DSA). Это сделает эти сегменты недоступными для shmat/mmap после exec. Задание для HUGE_EXEC любого из значений сегментов 0x4, 0x5, 0x6 или 0x7 при разрешенной запрошенной вставке вызовет ограничение роста кучи процесса сегментом под запрошенным стартовым сегментом.

Пример модели адресного пространства очень большой программы без доступа к общей библиотеки

Если предпочитаемая модель адресного пространства имеет следующий вид:
  • MAXDATA=0xB0000000 DSA
  • Нет областей shmat/mmap
  • Нет доступа к общей библиотеке
Формат адресного пространства:
   0x0: системный сегмент
   0x1:
   0x2: частные зависимости времени исполнения / стек
   0x3: куча процесса
   0x4:      |
   0x5:      |
   0x6:      |
   0x7:      |
   0x8:      |
   0x9:      |
   0xA:      |
   0xB:      |
   0xC:      v
   0xD: ____________ (лимит данных)
   0xE:
   0xF:

Из данного примера можно видеть, что сегменты 0x4–0xF доступны для исполняемого файла.

Приняв, что размер исполняемый файл больше, чем 256 MB и меньше, чем 512 MB, наилучшие установки HUGE_EXEC в данной ситуации приведены ниже:
  1. HUGE_EXEC=0
  2. HUGE_EXEC=0xE

Обе опции поместит исполняемый файл в сегменты 0xE–0xF.

Прим.: Задание для HUGE_EXEC любого из значений сегментов 0x4-0xD при разрешенной запрошенной вставке вызовет ограничение роста кучи процесса сегментом под запрошенным стартовым сегментом.

Пример модели адресного пространства процесса по умолчанию

Если предпочитаемая модель адресного пространства имеет следующий вид:
  • MAXDATA=0 (не DSA)
  • Нет областей shmat/mmap
  • Текст и пред-перемещенные данные доступа области библиотеки
Формат адресного пространства:
   0x0: системный сегмент
   0x1:
   0x2: частные зависимости времени исполнения / куча процесса / стек
   0x3:
   0x4:
   0x5:
   0x6:
   0x7:
   0x8:
   0x9:
   0xA:
   0xB:
   0xC:
   0xD: текст общей библиотеки
   0xE:
   0xF: пред-перемещенные данные общей библиотеки

Из данного примера можно видеть, что сегменты 0x3–0xC доступны для исполняемого файла.

Приняв, что размер исполняемый файл больше, чем 256 MB и меньше, чем 512 MB, наилучшие установки HUGE_EXEC в данной ситуации приведены ниже:
    1. HUGE_EXEC=0
    2. HUGE_EXEC=0x3
    ...
   10. HUGE_EXEC=0xB

Опции 1 и 2 имеют одинаковые результаты – вставка исполняемого файла в сегмент 0x3–0x4.

Пример сегмента текста shtext_in_one с одной областью общей библиотеки

Если предпочитаемая модель адресного пространства имеет следующий вид:
  • MAXDATA=0x70000000 (non-DSA)
  • в сегментах 0xC, 0xD, 0xE и 0xF необходимы области shmat/mmap
  • Доступ к общей библиотеке
Формат адресного пространства:
   0x0: системный сегмент
   0x1: текст общей библиотеки
   0x2: частные зависимости времени исполнения / стек
   0x3: куча процесса
   0x4: куча процесса
   0x5: куча процесса
   0x6: куча процесса
   0x7: куча процесса
   0x8: куча процесса
   0x9: куча процесса
   0xA:
   0xB: 
   0xC: shmat/mmap (размещено после exec)
   0xD: shmat/mmap (размещено после exec)
   0xE: shmat/mmap (размещено после exec)
   0xF: shmat/mmap (размещено после exec)

Из данного примера можно видеть, что сегменты 0xA–0xB доступны для исполняемого файла.

Приняв, что размер исполняемый файл больше, чем 256 MB и меньше, чем 512 MB, наилучшие установки HUGE_EXEC в данной ситуации приведены ниже:
  1. HUGE_EXEC=0,shtext_in_one
  2. HUGE_EXEC=0xA,shtext_in_one

Обе опции поместит исполняемый файл в сегменты 0xA–0xB, а общую библиотеку в сегмент 0x1.

Прим.: Задание для HUGE_EXEC любого из значений сегментов 0xB–0xE при разрешенной запрошенной вставке вызовет недоступность некоторых сегментов 0xC–0xF для shmat/mmap после исполняемого файла.

Пример сегментов текста shtext_in_one с двумя областями общей библиотеки

Если предпочитаемая модель адресного пространства имеет следующий вид:
  • MAXDATA=0x70000000 DSA
  • в сегментах 0xA и 0xB необходимы области shmat/mmap
  • Доступность текста области общей библиотеки (созданная с помощью атрибута doubletext32)
Формат адресного пространства:
   0x0: системный сегмент
   0x1: текст общей библиотеки (первичный)
   0x2: частные зависимости времени исполнения / стек
   0x3: куча процесса
   0x4:      |
   0x5:      |
   0x6:      |
   0x7:      |
   0x8:      v
   0x9: ____________ (лимит данных)
   0xA: shmat/mmap (размещено после exec)
   0xB: shmat/mmap (размещено после exec)
   0xC: 
   0xD: 
   0xE: 
   0xF: текст общей библиотеки (вторичный)

Из данного примера можно видеть, что сегменты 0xC–0xE доступны для исполняемого файла.

Приняв, что размер исполняемый файл больше, чем 512 MB и меньше, чем 768 MB, наилучшие установки HUGE_EXEC в данной ситуации приведены ниже:
  1. HUGE_EXEC=0,shtext_in_one
  2. HUGE_EXEC=0xC,shtext_in_one

Обе опции поместит исполняемый файл в сегменты 0xC–0xE, а общую библиотеку в сегменты 0x1 и 0xF.

Прим.: Задание для HUGE_EXEC любого из значений сегментов 0x4–0x7 при разрешенной запрошенной вставке вызовет ограничение роста кучи процесса сегментом под запрошенным стартовым сегментом.