<<
>>

Реализация системного вызова Ьгк

Как мы видели, модель памяти в М1МХ 3 довольно проста: каждому процессу при его создании выделяется один непрерывный участок памяти для данных и стека. Процесс никогда не перемещается в памяти, никогда из нее не выгружается, не растет и не уменьшается.
Могут произойти только два важных события: область данных может израсходовать резерв и достигнуть области стека, и, наоборот, стек может разрастись на всю область зазора и попасть в область данных. С учетом этих обстоятельств, реализация системного вызова Ьгк (файл

break, с) относительно проста. При его выполнении сначала просто проверяется, что указанные размеры допустимы, а затем в таблицы вносятся изменения.

Выполняет вызов подпрограмма do_brk (строка 19328), но большая часть работы делается в процедуре adjust (строка 19361). Последняя проверяет, не пересеклись ли сегменты данных и стека. Если да, вызов brk завершается с ошибкой, но процесс не уничтожается немедленно. При выполнении сравнения к верхней границе области данных добавляется значение множителя безопасности, SAFETY_ BYTES, поэтому остается надежда на то, что в стеке есть немного места и процесс может еще немного поработать. Управление возвращается процессу, чтобы он хотя бы вывел соответствующее сообщение и правильно завершился.

Обратите внимание: значения SAFETY_BYTES и SAFETY_CLICKS заданы в середине процедуры при помощи директивы #def ine. Это довольно необычно, традиционно подобные объявления размещаются в начале файла или в отдельных заголовочных файлах. Комментарий рядом поясняет, что программист нашел сложным выбор значения множителя безопасности. Без сомнения, описание было расположено таким необычным образом для привлечения внимания и, возможно, чтобы стимулировать дальнейшие эксперименты.

Базовый адрес сегмента данных не меняется, поэтому вызову adjust требуется обновлять только длину сегмента. Стек растет вниз с фиксированного конечного адреса, поэтому если adjust обнаруживает, что указатель стека (он передается в виде параметра) вышел за пределы области стека (то есть достиг более низких адресов), обновляются как адрес начала сегмента стека, так и его длина.

4.8.6.

<< | >>
Источник: Э. ТАНЕНБАУМ, А. ВУДХАЛЛ. ОПЕРАЦИОННЫЕ СИСТЕМЫ Разработка и реализация 3-е издание. 2007

Еще по теме Реализация системного вызова Ьгк:

  1. §3. Методика реализации системно-структурного подхода в части (на корабле)
  2. I. 1. СИСТЕМНЫЙ ПОДХОД КАК ИНСТРУМЕНТ ДЛЯ ПОСТРОЕНИЯ СИСТЕМНЫХ ОПИСАНИЙ
  3. I. СИСТЕМНЫЕ ОПИСАНИЯ - ГЛАВНЫЙ РЕЗУЛЬТАТ СИСТЕМНОГО ПОДХОДА В ПСИХОЛОГИИ
  4. Психология личности целостна, системна (принцип целостности, системности).
  5. ВЫЗОВ ВРАЧА
  6. СПТ откликается на вызов обстоятельств
  7. Быстрый вызов желаемого
  8. Бросьте себе вызов
  9. Самоубийство как вызов обществу
  10. § 14 Условное соглашение. – Предложение и вызов. – Договор посредством публичного торга или состязания. – Одностороннее обещание.