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. Что произошло бы в том случае,
если ядро попыталось бы
возобновить выполнение всех
процессов, приостановленных по
событию, но в системе не было бы к
этому моменту ни одного такого
процесса?
Предыдущая
глава || Оглавление
|| Следующая глава
|