Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Linux_ex_doc.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
256.54 Кб
Скачать

68) Что дает системе cow?

В Linux – механизм копирования при записи (copyon-write, COW)

– Откладывает или вообще предотвращает копирование

– Вместо создания дубликата АП оба процесса могут использовать одну копию АП (м. б. > 10 Мб)

– При изменении данных создаётся копия

– Если никогда не делается запись (exec() сразу после fork()), то копирование не проводится вовсе

– fork() требует только:

• Копирование таблиц страниц

• Создание описателя процесса

Механизм копирования при записи (англ. Copy-On-Write, COW) используется для оптимизации многих процессов, происходящих в операционной системе, таких как, например, работа с памятью или файлами на диске (пример — ext3cow).

Главная идея copy-on-write — при копировании областей данных создавать реальную копию только когда ОС обращается к этим данным с целью записи.

Например, при работе UNIX-функции fork() вместо копирования выполняется отображение образа памяти материнского процесса в адресное пространство дочернего процесса, после чего ОС запрещает обоим процессам запись в эту память. Попытка записи в отображённые страницы вызывает исключение (exception), после которого часть данных будет скопирована в новую область.

69)Какие ОП пометки/какие данные процесса после завершения процесса?

Счетчик обнуляется, Остается: продолжает опис процессором структуры

Task_struct(находится в стеке на уровне ядра) thread_info – освоб. С пом. Родителей

70)Если род процесс завершился до завершения дочернего?

Если родительский процесс по какой-то причине завершится раньше дочернего, последний становится "сиротой" (orphaned process). "Сироты" автоматически "усыновляются" программой init, выполняющейся в процессе с номером 1, которая и принимает сигнал об их завершении.

71)Зачем при завершении обходить список порожденных процессов, находившихся в состоянии трассировки?

___________________________________________________________________________

При вызове fork() возникают два полностью идентичных процесса. Весь код после fork() выполняется дважды, как в процессе-потомке, так и в процессе-родителе.

Процесс-потомок и процесс-родитель получают разные коды возврата после вызова fork(). Процесс-родитель получает идентификатор (PID) потомка. Если это значение будет отрицательным, следовательно при порождении процесса произошла ошибка. Процесс-потомок получает в качестве кода возврата значение 0, если вызов fork() оказался успешным.

!Потомок наследует от родителя все кроме следующих признаков:

  • идентификатора процесса (PID, PPID);

  • израсходованного времени ЦП (оно обнуляется);

  • сигналов процесса-родителя, требующих ответа;

  • блокированных файлов (record locking).

Наследует:

  • сегменты кода, данных и стека программы;

  • таблицу файлов, в которой находятся состояния флагов дескрипторов файла, указывающие, читается ли файл или пишется. Кроме того, в таблице файлов содержится текущая позиция указателя записи-чтения;

  • рабочий и корневой каталоги;

  • реальный и эффективный номер пользователя и номер группы;

  • приоритеты процесса (администратор может изменить их через nice);

  • контрольный терминал;

  • маску сигналов;

  • ограничения по ресурсам;

  • сведения о среде выполнения;

  • разделяемые сегменты памяти.

Когда потомок вызывает exit(), код возврата передается родителю, который ожидает его, вызывая wait(). WEXITSTATUS() представляет собой макрос, который получает фактический код возврата потомка из вызова wait().

Функция wait() ждет завершения первого из всех возможных потомков родительского процесса. Иногда необходимо точно определить, какой из потомков должен завершиться. Для этого используется вызов waitpid() с соответствующим PID потомка в качестве аргумента. Еще один момент, на который следует обратить внимание при анализе примера, это то, что и родитель, и потомок используют переменную rv. Это не означает, что переменная разделена между процессами. Каждый процесс содержит собственные копии всех переменных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]