Глава 8 касается планирования выполнения процессов, в главе 9 обсуждаются алгоритмы распределения памяти. Глава 10 посвящена драйверам устройств, рассмотрение которых до того откладывалось, чтобы прежде объяснить связь драйвера терминала с управлением процессами. В главе 11 представлено несколько форм взаимодействия процессов. Наконец, в последних двух главах рассматриваются вопросы, связанные с углубленным изучением особенностей системы, в частности, особенности многопроцессорных систем и распределенных систем.
2.6 УПРАЖНЕНИЯ 1. Рассмотрим следующий набор команд: grep main a.c b.c c.c › grepout& wc -1 ‹ grepout& rm grepout& Амперсанд (символ "&") в конце каждой командной строки говорит командному процессору shell о том, что команду следует выполнить на фоне, при этом shell может выполнять все командные строки параллельно. Почему это не равноценно следующей командной строке? grep main a.c b.c c.c | wc -1 2. Рассмотрим пример программы, приведенный на Рисунке 2.7. Предположим, что в тот момент, когда при ее выполнении встретился комментарий, произошло переключение контекста и другой процесс убрал содержимое буфера из списка указателей с помощью следующих команд: remove(gp) struct queue *gp; { gp-›forp-›backp = gp-›backp; gp-›backp-›forp = gp-›forp; gp-›forp = gp-›backp = NULL; } Рассмотрим три случая: Процесс убирает из списка с указателями структуру bp1. Процесс убирает из списка с указателями структуру, следующую после структуры bp1. Процесс убирает из списка структуру, которая первоначально следовала за bp1 до того, как структура bp была наполовину включена в указанный список. В каком состоянии будет список после того, как первый процесс завершит выполнение части программы, расположенной после комментариев? 3. Что произошло бы в том случае, если ядро попыталось бы возобновить выполнение всех процессов, приостановленных по событию, но в системе не было бы к этому моменту ни одного такого процесса?
ГЛАВА 3.
|