-
Дизассемблирование INT 8h
-
Функции обработчика прерываний от системного таймера
-
Переход в защищенный и реальный режимы.
-
Обработка прерываний от таймера и клавиатуры.
-
Определение объема доступного адресного пространства.
Зомби - процесс, у которого отобраны все ресурсы кроме последнего, строки в таблице процессов, необходимо чтобы предок мог получить статус завершения своего потомка.
Идентификатор предка у осиротевшего процесса будет изменен на 1, так как процесс был «усыновлен» процессом с идентификатором 1 , процессом «открывшим» терминал.
softlink - специальный файл, в котором есть только одна строка, содержащая путь по которому нужно перейти при обращении к этой ссылке
hardlink - еще одно имя файла
Изменение приоритета: renice -n 5 -p process
Можем только увеличить приоритет (без sudo - суперпользователя (доступны привелигированные команды и доступ к структуре ядра). Нельзя уменьшить, так как для этого требуется пересчет приоритетов.
Именованный программный канал - специальный файл, в который можно писать информация и из которого можно читать.
-
создаем именованный программный канал командой mknod с именем pipe;
-
направляем текст в программный канал: echo [текст] > pipe
-
меняем консоль;
-
получаем через канал текст и используя команду tee, выводим на экран: tee < pipe
Флаги:
-
0 - был fork и был exec (родительский процесс с флагом 0, так как была вызвана была вызвана команда запуска программы, она не принадлежит языку bash, поэтому создается процесс, котором выполняется сначала fork, потом exec)
-
1 - был fork но не было exec
-
4 - суперюзер
Типы файлов:
-
-- - обычный (регулярный)
-
d - директория
-
p - именованный программный канал
-
l - softlink
-
s - socket
-
c - специальный файл символьного уст-ва
-
b - специальный файл блочного уст-ва
-
Возникновение процесса сироты. При завершении любого процесса система анализирует таблицы дескрипторов и если находит незавершившиеся потомки этого процесса выполняет следующие действия: PPID потомков присваивает 1 (это PID процесса, открывшего терминал) - усыновление.
-
Cистемный вызов wait() блокирует родительский процесс до момента завершения дочернего.
-
Возникновение процесса-зомби – процесс, у которого отобраны все ресурсы, кроме последнего – строки в таблице процессов. Если потомок завершился(аварийно завершился exec), а предок завершился нормально, возникает зомби.
Процесс-потомок вызывает системный вызов exec(), а процесс-предок ждет завершения процесса-потомка.
Чаще всего нет смысла в выполнении двух одинаковых процессов и потомок сразу выполняет системный вызов exec(), параметрами которого является имя исполняемого файла и, если нужно, параметры, которые будут переданы этой программе. Говорят, что системный вызов exec() создает низкоуровневый процесс: создаются таблицы страниц для адресного пространства программы, указанной в exec(), но программа на выполнение не запускается, так как это не полноценный процесс, имеющий идентификатор и дескриптор. Системный вызов exec() создает таблицу страниц для адресного пространства программы, переданной ему в качестве параметра, а затем заменяет старый адрес новой таблицы страниц.
- Обмен сообщениями через программный канал между предком и потомком.
Системный вызов pipe() - неименованный программный канал. Неименованные программные каналы могут использоваться для обмена сообщениями между процессами родственниками. В отличие от именованных программных каналов неименованные не имеют идентификатора, но имеют дескриптор.
Программные каналы находятся в системной области памяти, т.к. адресные пространства процессов защищены и недоступны для других процессов.
- В программу с программным каналом включить собственный обработчик сигнала. Использовать сигнал для изменения хода выполнения программы.
Реализация задачи производство-потребление для UNIX
Реализация задачи читатели-писатели для UNIX
Семафор - неотрицательная защищенная переменная S >= 0, на которой определены 2 операции P(S) - пропустить, и V(S) - освободить.
Семафоры это ресурс.
Переменная защищена, т.к. м.б. изменена только этими двумя неделимыми операциями.
Операция P(S) - декремент. Процесс, вызвавший операцию P(S) для S = 0 будет заблокирован на семафоре.
Операция V (S) - инкремент, т.е. процесс разблокирует другой процесс, если было S = 0.
Бинарный семафор - принимает значения 0 или 1
Считающий семафор - принимает целые неотрицательные значения
Реализация задачи читатели-писатели для Windows (мониторы Хоара)
Монитор - языковая конструкция, состоящая из структур данных и подпрограмм, использующих данные структуры.
Демон
Демон - процесс, который выполняется в фоновом режиме и не связан с терминальным устройством.
Идентификатор процесса, идентификатор лидера группы и лидера сессии одинаковые, так как демон является лидером группы и сессии, Ss : S прерываемый сон, s является лидером сессии, TTY = ?, так как у демона нет управляющего терминала
SIGHUP - сигнал о потере терминала. Данный сигнал игнорируется, чтобы процесс не завершился
Завершение родительского процесса нужно, чтобы гарантировать, что дочерний процесс не является лидером группы, что является необходимым условием вызова функции setsid (процесс становится лидером новой сессии, лидером новой группы процессов, лишается управляющего терминала).
Дерево каталогов
Загружаемые модули ядра
Модуль md1 экспортирует для использования другими модулями имя процедуры и имя структуры данных. Модуль md2, использующий экспортируемое имя, связывается с этим именем по прямому абсолютному адресу.
До тех пор, пока число ссылок на любой модуль в системе не станет нулевым, модуль не может быть выгружен
Виртуальная файловая система /procproc
Буферизованный и не буферизованный ввод-вывод
Сокеты
Системный вызов open()
Создание виртуальной файловой системы
Обработчики прерываний