Чтение онлайн

на главную

Жанры

Архитектура операционной системы UNIX
Шрифт:

Рисунок 6.22. Увеличение области стека на 1 Кбайт

Если ядро загружает область команд, которая может разделяться несколькими процессами, возможна ситуация, когда процесс попытается воспользоваться областью до того, как ее содержимое будет полностью загружено, так как процесс загрузки может приостановиться во время чтения файла. Подробно о том, как это происходит и почему при этом нельзя использовать блокировки, мы поговорим, когда будем вести речь

о функции exec в следующей главе и в главе 9. Чтобы устранить эту проблему, ядро проверяет статус области и не разрешает к ней доступ до тех пор, пока загрузка области не будет закончена. По завершении реализации алгоритма loadreg ядро возобновляет выполнение всех процессов, ожидающих окончания загрузки области, и изменяет статус области («готова, загружена в память»).

Предположим, например, что ядру нужно загрузить текст размером 7K в область, присоединенную к процессу по виртуальному адресу 0, но при этом оставить промежуток размером 1 Кбайт от начала области (Рисунок 6.24). К этому времени ядро уже выделило запись в таблице областей и присоединило область по адресу 0 с помощью алгоритмов allocreg и attachreg. Теперь же ядро запускает алгоритм loadreg, в котором действия алгоритма growreg выполняются дважды — во-первых, при выделении в начале области промежутка в 1 Кбайт, и во-вторых, при выделении места для содержимого области — и алгоритм growreg назначает для области таблицу страниц. Затем ядро заносит в соответствующие поля пространства процесса установочные значения для чтения данных из файла: считываются 7 Кбайт, начиная с адреса, указанного в виде смещения внутри файла (параметр алгоритма), и записываются в виртуальное пространство процесса по адресу 1K.

алгоритм loadreg /* загрузка части файла в область */

входная информация:

 (1) указатель на точку входа в частную таблицу областей процесса

 (2) виртуальный адрес загрузки

 (3) указатель индекса файла

 (4)
 смещение в байтах до начала считываемой части файла

 (5) объем загружаемых данных в байтах

выходная информация: отсутствует

{

 увеличить размер области до требуемой величины (алгоритм growreg);

 записать статус области как «загружаемой в память»;

 снять блокировку с области;

установить в пространстве процесса значения параметров чтения из файла:

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

смещение до начала считываемой части файла;

объем данных, считываемых из файла, в байтах;

 загрузить файл в область (встроенная модификация алгоритма read);

 заблокировать область;

 записать статус области как «полностью загруженной в память»;

 возобновить выполнение всех процессов, ожидающих окончания загрузки области;

}

Рисунок 6.23. Алгоритм загрузки данных области из файла

Рисунок 6.24.

Загрузка области команд (текста)

алгоритм freereg /* освобождение выделенной области */

входная информация: указатель на (заблокированную) область

выходная информация: отсутствует

{

 if (счетчик ссылок на область имеет ненулевое значение) 
{

/* область все еще используется одним из процессов */

снять блокировку с области;

if (область ассоциирована с индексом)
снять блокировку с индекса;

return;

 }

 if (область ассоциирована с индексом)
 освободить индекс (алгоритм iput);

 освободить связанную с областью физическую память;

 освободить связанные с областью вспомогательные таблицы;

 очистить поля области;

 включить область в список свободных областей;

 снять блокировку с области;

}

Рисунок 6.25. Алгоритм освобождения области

6.5.6 Освобождение области

Если область не присоединена уже ни к какому процессу, она может быть освобождена ядром и возвращена в список свободных областей (Рисунок 6.25). Если область связана с индексом, ядро освобождает и индекс с помощью алгоритма iput, учитывая значение счетчика ссылок на индекс, установленное в алгоритме allocreg. Ядро освобождает все связанные с областью физические ресурсы, такие как таблицы страниц и собственно страницы физической памяти. Предположим, например, что ядру нужно освободить область стека, описанную на Рисунке 6.22. Если счетчик ссылок на область имеет нулевое значение, ядро освободит 7 страниц физической памяти вместе с таблицей страниц.

алгоритм detachreg /* отсоединить область от процесса */

входная информация:
 указатель на точку входа в частной таблице областей процесса

выходная информация: отсутствует

{

 обратиться к вспомогательным таблицам процесса, имеющим отношение к распределению памяти, освободить те из них, которые связаны с областью;

 уменьшить размер процесса;

 уменьшить значение счетчика ссылок на область;

 if (значение счетчика стало нулевым и область не является неотъемлемой частью процесса)

освободить область (алгоритм freereg);

 else { /* либо значение счетчика отлично от 0, либо область является неотъемлемой частью процесса */

снять блокировку с индекса (ассоциированного с областью);

снять блокировку с области;

 }

}

Рисунок 6.26. Алгоритм отсоединения области

Поделиться:
Популярные книги

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Оцифрованный. Том 1

Дорничев Дмитрий
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Оцифрованный. Том 1

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

Болотник

Панченко Андрей Алексеевич
1. Болотник
Фантастика:
попаданцы
альтернативная история
6.50
рейтинг книги
Болотник

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Голодные игры

Коллинз Сьюзен
1. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.48
рейтинг книги
Голодные игры

Последняя Арена 8

Греков Сергей
8. Последняя Арена
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Последняя Арена 8

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

Измена. Свадьба дракона

Белова Екатерина
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Измена. Свадьба дракона