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