Лекции по дисциплине Операционные системы 2005 г

Вид материалаЛекции

Содержание


ОС управляет следующими ресурсами
ОС взаимодействует
Управление процессами
Создание процесса
F s uid pid ppid cpu pri nice addr wchan tty time cmd
Поддержка в юникс сетевого обмена
Подобный материал:
  1   2

Лекции по дисциплине Операционные системы

2005 г

Содержание

Понятие ОС


ОС – набор программ, которые обеспечивают возможность использования аппаратуры ЭВМ и предоставляют пользователю набор средств по интерфейсу для управления информацией и реализации прикладного программного обеспечения. ?

Функции ОС:

  1. определяет интерфейс пользователя
  2. обеспечивает разделение аппаратных ресурсов между пользователями
  3. предоставляет возможность работать с общими данными в режиме коллективного пользования
  4. планирует доступ пользователя к общим ресурсам (память)
  5. обеспечивает эффективное выполнение операций ввода/вывода
  6. осуществляет восстановление информации и вычислительных процессов в случае ошибок

ОС управляет следующими ресурсами:

  1. память (оперативная и внешняя)
  2. программы
  3. устройства ввода/вывода (периферийные)
  4. данные



ОС взаимодействует:

  1. с пользователями
  2. с администраторами
  3. с аппаратными средствами
  4. с прикладными программами
  5. с системными программами


\\вопросы вынесенные на реферат

Расслоение памяти (интерливинг) – аппаратный способ увеличения быстродействия компьютера.

Регистр перемещений – прогр.перемещения в памяти ?

Прерывания и опрос состояния


Лекция 2

Управление процессами


Процесс – программа в стадии выполнения. С каждым процессом связывается его адресное пространство: список адресов от минимума до максимума, который процесс может прочесть и в которые он может писать. Адресное пространство: сама программа, данные к ней, ее стек.

Со всяким процессом связывается некий набор регистров, включая счетчик команд, указатель стека и др. + вся необходимая информация для запуска программы, кроме регистров.

В период своего существования процесс проходит через ряд дискретных состояний:

- выполняется, если в данный момент времени ему выделен ЦП

- готов, если он мог бы сразу использовать ЦП, предоставленный в его распоряжение

- блокирован, если он ожидает появление какого-либо события


Когда в систему поступает некоторое задание, она создает соответствующие процессы, которые затем устанавливаются в конец списка готовых процессов. Этот процесс постепенно продвигается к головной части списка по мере завершения выполнения предыдущих процессов. Когда процесс окажется первым в списке готовых и когда освобождается ЦП, этому процессу выделяется ЦП, и говорят что происходит смена состояния процессов (переходит из состояния готовности в состояние выполнения). Чтобы предотвратить либо случайный, либо умышленный монопольный захват ресурсов компьютера каким-то одним процессом, ОС устанавливает в специальном аппаратном таймере прерываний временной интервал, в течении которого любому процессу разрешается занимать ЦП. Если процесс добровольно не освобождает ЦП в течение указанного временного интервала, таймер вырабатывает сигнал прерывания, по которому управление будет передано ОС. После этого ОС переведет ранее выполнявшийся процесс в состояние готовности, а первый процесс списка готовых – в состояние выполнения.


Представителем процесса в ОС является блок управления процессом (дескриптор процесса). Это структура данных, содержащая: идентификатор процесса, приоритет процесса, состояние, указатели памяти, указатели выделенных ресурсов. Область сохранения регистров.


Когда ОС переключает ЦП с процесса на процесс, она использует области сохранения регистров, предусмотренные в блоке управления процессом, чтобы запомнить ? информацию, необходимую для рестарта каждого процесса, необходимую при следующем обращении процесса к ЦП.


ОС предусматривает следующие операции над процессами:

- Создание/образование

- Уничтожение

- Возобновление

- Блокирование

- Пробуждение

- Запуск/выбор

Создание процесса:


- присвоение имени

- включение этого имени в список имен известных ОС

- определение начального приоритета процесса

- формирование блока управления процесса

- выделение процессу начальных ресурсов


Любой процесс может породить процесс


Диаграмму состояния можно представить в виде:




Итоги понятия процесса. Понятие процесса базируется на двух независимых концепция: группирование процессов и выполнение программы.

С одной стороны, у процесса есть адресное пространство, содержащее текст программы и данные, а также другие ресурсы.

Такие как:

- открытые файлы

- дочерние процессы

- обработчики сигналов

- необработанные аварийные сообщения

- учетная информация и др.


С другой стороны, процесс можно рассматривать как поток исполняемых команд. У потока есть счетчик команд, регистры, в которых хранятся текущие переменные, стек, содержащий протокол выполнения процесса. Хотя поток должен исполняться внутри процесса, следует различать концепции потока и процесса. Процесс используется для группирования ресурсов, а потоки являются объектами поочередно исполняющимися на ЦП.

Концепция потока добавляет процессу возможность выполнения в одной и той же среде процесса нескольких программ, в достаточной степени независимых.

Приостановленный процесс состоит из собственного адресного пространства, обычно называемого образом памяти или core-файлом.


Понятие ядра ОС.

Все операции, связанные с процессами выполняются под управлением той части ОС, которая называется ядром. Ядро представляет собой небольшую часть кода ОС в целом. Однако оно относится к числу наиболее интенсивно используемых компонент системы. По этой причине ядро обычно резидентно размещается в ОП, в то время как другие части ОС перемещаются во внешнюю память и обратно по мере необходимости. Ядро ОС, как правило, содержит программы для реализации следующих функций:

- обработка прерываний

- создание и уничтожение процессов

- переключение процессов из состояния в состояние

- диспетчирование процессов

- приостановка и активизация процессов

- синхронизация процессов

- организация взаимодействия между процессами

- поддержка операций ввода/вывода

- поддержка распределения или перераспределения памяти

- поддержка работы файловой системы

- поддержка механизма вызова-возврата при обращении к процедурам

- поддержка определенных функций по учету работы ЭВМ

Лекция 3.

Обработка прерываний.

Вход в ядро ОС обычно осуществляется по прерываниям. Когда ядро реагирует на данное прерывание, оно запрещает другие прерывания. После определения причины данного прерывания ядро передает его обработку специальному системному процессу, предназначаемому для работы с прерываниями данного типа.

Схемы прерываний (типы):
    1. Прерывания по вызову супервизора. Инициатор прерывания – работающий процессор.
    2. Прерывания ввода/вывода. Инициируются аппаратурой ввода/вывода (завершается выполнение ввода/вывода, совершается ошибка, устройство переходит из одного состояния в другое).
    3. Внешние. Причины: истечение кванта времени (от таймера), нажатие пользователем клавиши прерывания на пульте управления, прием сигнала прерывания от другого процессора в мультипроцессорной системе.
    4. По рестартам. Когда на пульте управления нажимается кнопка рестарта или когда от другого процессора в мультипроцессорной системе поступает команда рестарта.
    5. По ошибке программы.
    6. По ошибке машины.

Аппаратные ошибки: по питанию, испорченные области на диске. Для обработки каждого из этих типов прерываний предусмотрены программы, называемые обработчиками прерываний. Когда происходит прерывание, ОС запоминает состояние прерванного процесса и передает управление соответствующему обработчику прерываний. Когда обработка прерывания завершается, ЦП начинает обслуживать либо тот процесс, который выполнялся во время прерывания, либо готовый процесс с наивысшим прерыванием.

Процессы называются параллельными, если они существуют одновременно. Параллельные процессы называются асинхронными, если они работают совершенно независимо друг от друга. Каждый процесс, обращающийся к общим ресурсам, исключает для всех других процессов возможность одновременного с ним обращения к этим ресурсам. Это называется взаимоисключением процессов.


Семафор – защищенная глобальная переменная, значение которой можно опрашивать и менять только при помощи специальных операций. Семафоры могут принимать неотрицательные целые значения.

Мьютекс – упрощенная версия семафора, переменная которая может находится в одном из двух состояний – блокирование или неблокирование.

Волокно – поток, планируемый в пространстве пользователя, а не в пространстве ядра.

Монитор – механизм организации параллелизма, который содержит как данные, так и процедуры необходимые для организации динамического распределения какого-то конкретного общего ресурса или группы общих ресурсов.

Тупик (дедлок, клинч). Процесс находится в состоянии тупика, если он ожидает некоторое событие, которое никогда не произойдет.





Управление памятью.

Понятие управления памятью(ОП) включает в себя следующие стратегии:
  1. выборки информации
    1. по запросу
    2. упреждающая выборка
  2. размещения
  3. замещения


Стратегия выборки ставит своей целью определить, когда следует втолкнуть (ввести) очередной блок программ или данных в ОП.

Стратегия размещения ставит своей целью определить, в какое место ОП следует помещать поступающий блок программ или данных.

Стратегия замещения ставит своей целью определить какой блок программ или данных следует вытолкнуть (вывести) из ОП, чтобы освободить место для поступающей информации.

Существует большое количество замещений:

- оптимальный алгоритм – заменяет тот блок, обращение к которому было раньше.

- алгоритм fifo - отслеживает порядок загрузки блоков в память, храня их в связном списке (удаляется старейший блок).

- алгоритм «вторая попытка» - модификация fifo, перед удалением блока проверяется, не используется ли он в данный момент, если блок используется, то он просто пропускается.

- алгоритм LRU (last recently used) – удаляется блок, к которому меньше всего обращались, требует специального аппаратного обеспечения.

- алгоритм старения (aging) – программная реализация LRU.

- часы


В современном проектировании ОС существует две концепции распределения памяти:

1) Связное распределение

2) Несвязное распределение


При связном распределении памяти каждая программа занимает один сплошной блок ячеек памяти.

Оверлейные перекрытия – кусочное выполнение.

Одна очередь заданий




При несвязном распределении памяти программа разбивается на ряд блоков или сегментов, которые могут размещаться в ОП на участках, необязательно соседствующих друг м другом. Эта концепция применяется в основном при реализации мультипрограммных систем. В каждом разделе выполняется только одно задание.


На следующем этапе: одна очередь заданий. Мультипрограммирование с переменными разделами: каждому пользователю выделяется столько памяти, сколько он просит.



Другая схема организации памяти, называемая свопингом, не требует чтобы программы пользователя оставались все время в ОП до момента завершения. В некоторых системах со свопингом сразу всю ОП в каждый момент времени занимает одно задание. Затем в какой-то момент задание выталкивается из памяти, а другое вталкивается на его место из очереди. В обычном случае каждое задание будет перекачиваться из ОП во внешнюю память и наоборот.


Лекция №4

Страничная организация памяти.


Существует два способа учета использования памяти: применение битовых карт и список свободных участков. Если создаваемый процесс имеет фиксированный размер, размещение его в ОП осуществляется просто: ОС выделяет необходимое количество памяти. Однако, область памяти может расти в результате динамического распределения памяти. Если память выделяется динамически этим процессом должна управлять ОС, которая использует либо битовые карты, либо список свободных участков. В битовой карте каждому свободному блоку соответствует 1 бит равный 0, а каждому занятому – бит равный 1.




Другой способ отслеживания состояния памяти – поддержка связных списков занятых и свободных блоков. Каждая запись в списке указывает, является ли область памяти свободной, адрес с которого начинается эта область, ее длину, а так же содержит указатель на следующую запись.


Концепция виртуальной памяти.

Существует два способа реализации виртуальной памяти:

- страничный

- сегментный


Суть: адреса, к которым обращается выполняемый процесс, отделяются от адресов реально существующих в ОП. Те адреса, на которые делает ссылки выполняющийся процесс, называются виртуальными адресами, а те адреса, которые существуют в ОП, называются реальными или физическими адресами. Преобразование виртуальных адресов в реальные во время выполнения обеспечивает механизм динамического преобразования адресов (МДПА). МДПА ведет таблицы, показывающие какие ячейки виртуальной памяти находятся в данный момент в реальной и где размещаются. Чтобы сократить объем информации отображаемые элементы информации группируются в блоки. Система следит за тем, в каких местах ОП размещаются различные блоки виртуальной памяти. Если блоки имеют одинаковый размер, то они называются страницами, а соответствующая организация памяти – страничная. Если блоки имеют различные размеры, то они называются сегментами, а соответствующая организация памяти – сегментная. Виртуальный адрес V указывается при помощи упорядоченной пары (b,d).

b – номер блока, где реализуется соответствующий элемент, d- смещение относительно начального адреса блока. Преобразование V -> φ осуществляется следующим образом. Каждый процесс имеет собственную таблицу отображения блоков, которую ОС ведет в реальной физической памяти (φ). Реальный адрес в этой таблице загружается в специальный регистр ЦП, называемые регистром начального адреса таблицы блоков (РНАТБ).



Номер блока b суммируется с базовым адресом a ТОБ, образуя реальный адрес строки таблицы отображения для блока b. Эта строка содержит реальный адрес b блока в физической памяти.


Управление файловой системой.


Файл – группа взаимосвязанных записей.

Запись – группа взаимосвязанных полей.

Поле – группа взаимосвязанных символов.

Байт = 8 битов. Бит = 0|1

Файл – набор записей, состоящих из 0 и 1.

Символьный набор – представление информации как в самом компьютере, так и для обмена. Под организацией файлов подразумевается способ расположения файлов во внешней памяти. Различают следующие виды организации:

- последовательная

- индексно-последовательная

- прямая

- библиотечная


При последней организации файлов записи располагаются в физическом порядке. При индексно-последовательной организации записи располагаются в логической последовательности, в соответствии со значением ключей, содержащихся в каждой записи. Доступ к индексно-последовательным записям может осуществляться последовательно (возрастание/убывание ключей) либо прямо по ключу. При прямой организации файла доступ к записям осуществляется произвольно по их физическим адресам на запоминающих устройствах прямого доступа. Библиотечная организация файлов – файл, состоящий из последовательных подфайлов, называемых элементами или членами файла. Начальный адрес каждого такого элемента хранится в директории файла.


Файловые системы содержат следующие средства:
  1. методы доступа определяют конкретную организацию доступа к данным, находящимся в файлах
  2. средства управления файлами (хранение, перемещение, удаление, копирование и т.д.)
  3. средства управления внешней памятью обеспечивают распределение пространства внешней памяти для размещения файлов
  4. средства обеспечения целостности файла (гарантируют сохранность информации в файлах)


Информация, необходимая ОС для выполнения операций с файлами, содержится в блоке управления файлом (дескриптор). Это структура данных, которая обычно хранится во внешней памяти и передается в ОП только во время открытия файла. В блоке управления файлом содержатся следующие атрибуты:

- символическое имя файла

- размер файла

- тип файла

- размещение файла во внешней памяти

- тип организации файла

- тип устройства (данные для управления доступом)

- диспозиция файла (постоянный \ рабочий \ временный)

- дата создания файла

- дата и время последней модификации файла

- счетчик активности доступа


Лекция № 5

Топология файловой системы.




В корневой директории содержатся адреса каталогов пользователей, системные каталоги и файлы


Основные характеристики UNIX-подобных операционных систем.

Структура ОС UNIX.


Ядро состоит из двух секций: управляющих структур и программ. В секции управляющих структур располагаются таблицы ядра. К ним относятся таблицы процессов (включает блоки управления), таблицы индексных дескрипторов файлов, таблицы файлов, таблицы связи драйверов, таблицы сообщений, семафоров и т.д. Программная секция состоит из двух частей: диспетчер процессов (*) и диспетчер устройств ввода \ вывода.

* Функции диспетчера процессов:

- определение последовательности процессов

- обработка системных вызовов

- распределение ОП между процессами

- обработка сигналов

- распределение ресурсов системы


Является машинно-независимой частью и практически не изменяется при переносе системы с одной платформы на другую.

Диспетчер внешних устройств контролирует и обеспечивает передачу информации между ОП и внешними устройствами. Является машинно-независимой частью. Включает в себя драйверы символьных устройств, драйверы сетевых устройств, драйверы дисковых устройств, а также дисциплины линии?, буферный и страничный КЭШ, маршрутизаторы, файловые системы, виртуальную память, сетевые протоколы и др.

В каждый момент времени процессор ЭВМ может находиться в одном из трех состояний:

- система, если выполняются команды ядра ОС

- процесс, если выполняются команды пользовательского процесса

- ожидание, если в системе нет процессов, готовых к выполнению

Переход процесса из состояния «процесс» в состояние «система» может быть вызван:

- прерыванием по таймеру

- прерыванием от устройств ввода \ вывода

- обработкой системного вызова

Таймер регулярно с определенной частотой формирует прерывания, после которых управление автоматически предается специальной программе ядра, которая это прерывание обслуживает. Для готовых к выполнению процессов активизируется процесс, имеющий наибольший приоритет.

Прерывания от устройств ввода \ вывода возникает во время окончания обмена информацией между ОП и периферийным устройством, т.е. когда устройство сообщает системе о завершении ввода \ вывода.

Пользовательский процесс при необходимости может обращаться к ядру ОС для выполнения системных вызовов. Выполнение ядром системного вызова завершается или возвратом управления вызывающего процесса, или активизацией нового процесса.

Из состояния «система» в состояние «процесс» система переходит при запуске нового очередного процесса, или когда завершается выполнение системного вызова.

Из состояния «процесс» в состояние «ожидание» - когда заканчивается последний процесс.

Из состояния «ожидание» в состояние «система» - когда появляется новый процесс.

Из состояния «система» в состояние «ожидание» - нечего выполнять.

Часто объем основной памяти не позволяет разместить в ней все процессы одновременно. Часть процессов располагается во внешней памяти (области свопинга). Свопинг осуществляется диспетчером процессов и состоит в выгрузке процессов на диск и их загрузке в ОП.


Процессы ОС UNIX.

Структуру процесса ОС UNIX составляют четыре сегмента:
  1. контекст процесса
  2. процедурный сегмент
  3. сегмент данных
  4. динамический сегмент


(2) содержит машинные команды и константы

(3) содержит данные, инициируемые при компиляции, которые могут изменяться в процессе работы процесса

(4) выполняется при загрузке выполняемого файла в основную память и содержит данные, не инициируемые при компиляции

(1) это таблица, в которой хранится системная информация о процессе при его нахождении в ОП. Доступ к контексту процесса имеет только диспетчер процессов (программа ядра). Область контекста процесса не относится к адресному пространству процесса, однако контекст подвергается свопингу совместно с процедурным сегментом и сегментом данных.

(1) содержит атрибуты:

- машинные регистры (область сохранения регистров)

- состояние системного вызова – информация о текущем системном вызове, включая параметры и результаты

- таблица пользовательских дескрипторов файлов

- учетная информация – указатель на таблицу, учитывающую процессорное время

- стек ядра – фиксированный стек для работы процесса в режиме «ядра».

(2)+(3) составляют образ процесса, который формируется при трансляции.

Кроме (1) ядро ОС отслеживает также таблицу процессов, являющихся резидентными (постоянно находящихся в ОП), в которой отслеживаются все активные процессы. Некоторые из них инициируются ядром и являются системными процессами, остальные связаны с пользователями, называются пользовательскими процессами. В таблице процессов содержится информация о блоках управления процессами, т.е. каждая строка является отображением процесса


Лекция №6

В дескрипторе:

- идентификатор процесса

- текущее состояние

- идентификатор родительского процесса

- идентификатор пользователя и группы

- события, ожидаемые процессом, если они есть

- время до истечения интервала будильника

- маска, указывает какие сигналы перехватываются, заблокированы, игнорируются

- приоритеты

- количество времени эксплуатации ЦП

- указатели на процедурный сегмент, сегмент данных и динамический сегмент

(если используется страничная организация памяти, то указателем на соответствующие им таблицы страниц)

- указатели внешней памяти (указатели как найти части процесса на диске если его нет в ОП)

В UNIX процессы создаются следующим образом: когда выполняется системный вызов fork, вызывающий процесс обращается в ядро ОС и ищет свободную ячейку в таблице процессов, в которой может записать данные о дочернем процессе. Если свободная ячейка находится, fork копирует туда информацию из родительского процесса. Затем он выделяет память для сегментов данных и динамического сегмента, куда копируется соответствующие сегменты родительского процесса. Контекст процесса копируется вместе с динамическим сегментом. Процедурный сегмент может либо копироваться, либо использоваться совместно, если он доступен только для чтения. Дочерний процесс получает идентификатор, затем настраивается его карта памяти и регистры; ему предоставляется доступ к открытым файлам родительского процесса по средством копирования таблицы пользовательских дескрипторов файлов из контекста родительского процесса.

Карта памяти дочернего процесса настраивается по следующему принципу: дочернему процессу выделяется новые таблицы страниц, но эти таблицы указывают на страницы родительского процесса, помеченные как доступные только для чтения. Когда дочерний процесс пытается писать в такую страницу, происходит прерывание. При этом ядро выделяет дочернему процессу новую копию этой страницы, в которой этот процесс получает и доступ к записи, т.е. копируются только те страницы, в которых дочерний процесс пишет новые данные. При этом страницы с процедурным сегментом не копируются.


Планирование процессов в ОС UNIX.

Определение последовательности выполнения процессов предусматривает два алгоритма, которые работают независимо друг от друга:
  1. низкоуровневый – выбирает следующий процесс из набора процессов в памяти, готовых к работе
  2. высокоуровневый (swapper) – перемещает процессы из памяти на диск и обратно, т.е. осуществляет свопинг.


В (1) используется несколько очередей. С каждой очередью связан диапазон непересекающихся значений приоритетов. Процессы, выполняющиеся в режиме «процесс» имеют положительное значение приоритетов.

У процессов, выполняющихся в режиме система, значение приоритетов отрицательное. Отрицательное значение приоритетов считается наивысшими. Когда запускается низкоуровневый алгоритм, он ищет очередь, начиная с самого высокого приоритета, т.е. наименьшего отрицательного значения, пока не находит очередь, в которой есть хотя бы один процесс. После этого в этой очереди выбирается и запускается первый процесс. Если процесс использует весь свой квант времени (~100мкс), он помещается в конец очереди, а алгоритм планирования запускается снова. Один раз в секунду приоритет процесса пересчитывается следующим образом:

PRI=CPU+NICE+base

На основе нового приоритета каждый процесс прикрепляется к соответствующей очереди.

CPU – среднее значение тиков таймера, в течении которого процесс выполнялся. При каждом тике таймера счетчик использования ЦП процессом увеличивается на 1. потом этот счетчик прибавляется к приоритету процесса, увеличивая его, что соответствует более низкому приоритету.

Пользовательская составляющая приоритета процесса NICE (можно менять самостоятельно) принимает диапазон значений от -20 до +20. С помощью системного вызова nice можно менять приоритет процесса от 0 до 20. Системный администратор может запросить обслуживание с более высоким приоритетом от -20 до 1. Это однозначно увеличивает частоту эксплуатации ЦП этим процессом. Когда процесс эмулирует прерывание для выполнения системного вызова, он блокируется, пока системный вызов не будет выполнен и процесс не вернется в режим «процесс». Блокировка происходит и при ожидании какого-либо события (wait ) и при вводе \ выводе. Когда процесс блокируется, он удаляется из очереди. Но когда происходит разблокировка процесса (наступает событие, которого он ждал или ввод \ вывод завершен и т.п.), процесс снова помещается в очередь с отрицательным значением составляющей приоритета base. Выбор очереди определяется событием, которого ждал процесс. Отрицательное значение приоритета base для дискового ввода \ вывода, терминального ввода \ вывода, ввод \ вывод в ОС жестко заданы в ОС и могут быть изменены только путем рекомпиляции системы.


Информационные связи между процессами в ОС UNIX.

Информация связи между процессами осуществляется либо по одноранговой схеме, либо по многоранговой (схема клиент-сервер).

Одноранговая схема предусматривает следующие возможности обмена информацией между процессами:

- через передачу внешних аргументов (в пределах процесса-отца)

- файловая система

- программный канал


Межпроцессорное взаимодействие по схеме клиент-сервер осуществляется по схеме:

- сообщения (позволяет процессам, работающим на разных компьютерах, обмениваться форматированными данными)

- семафоры – представляют собой общесистемные переменные, которые могут модифицироваться и использоваться процессами, запущенными на одном компьютере, для синхронизации их выполнения. Обычно используются в сочетании с разделяемой памятью для управления доступом к данным, находящимся в той или иной области разделяемой памяти

- разделяемая память (позволяет нескольким процессам, выполняемым на одном компьютере, совместно использовать общую область памяти)

- интерфейс транспортного уровня (sockets) – позволяет процессам, выполняемым на разных компьютерах, создать прямой двусторонний канал связи.


Файловая система. Управление файловой системой в ОС UNIX.

Файловая система – одна из важнейших частей ОС UNIX, во многом определяет ее архитектуру. Имеет многоуровневую иерархическую структуру и предназначена для разделения внешней памяти на файлы. С файловой системой связаны и вопросы ввода \ вывода, и информационной связи между процессами и многое другое. Отличительно особенностью ОС UNIX является то, что понятие файла в ней максимально унифицировано. Под файлами понимаются любые источники и потребители информации. В следствие этого UNIX содержит следующие виды файлов:

- обычные

- каталоги

- FIFO файлы

- специальные файлы

- гнезда


Лекция №7

Обычный файл содержит информацию, определяемую пользователем или формирующуюся в результате прикладных и системных программ. Никаких ограничений на информацию, хранящуюся в обычных файлах, не накладывается. Различают текстовые и двоичные (бинарные) файлы. file - определяет тип файла.

Обычный файл может иметь статус выполняемого. Такой файл будет рассматриваться системой либо как программа, записанная на командном языке, либо как готовая к выполнению программа.

Обычные файлы могут создаваться, просматриваться, модифицироваться с помощью:

- редактора

- компилятора

- отладчика

- транслятора

И удаляться определенными командами файловой системы rm –i *.*

Каталог – содержит информацию о других файлах. Он предоставляет пользователям средства для организации их файлов в некоторую иерархическую систему, основанную на взаимосвязи файлов и направлении их использования. Каталог представляет собой несортированный набор 16ти байтных записей. Каждая запись состоит из 14-тибитного имени файла и номера индексного дескриптора файла. Общий вид файловой системы UNIX можно представить в виде:

\\картинка


Существует отличие файловой системы UNIX от MS-DOS\WINDOWS и т.п. заключается в возможностях монтирования другой файловой системы в топологию файловой системы UNIX. В файловой системе имеется выделенный корневой каталог. Каждый следующий уровень состоит из каталогов и других файлов, подчиненных корневому. Поэтому легко адресоваться к любому файлу, указав путь, начиная с корневого каталога.

/usr/bin/who – имя файла, указанное подобным образом называется полным.

Каталог, в котором пользователь находится в данный момент времени, называется текущим. Файл, имя которого указывается в командах, если оно не полное, всегда берется из текущего каталога, если не указать полное имя. Полное имя файла называют жесткой ссылкой. Файл может обозначаться несколькими путевыми именами, если пользователь создаст одну или несколько ссылок на него с помощью команды ln.

ln /usr/bin/who /tmp/ww

если в данной команде указать -s , то ссылка будет символической, а не жесткой.

ln –s /usr/bin/who

Символическая ссылка на файл отличается от жесткой тем, что создается новый индексный дескриптор файла. Есть возможность ссылаться на каталоги, файлы и другие файловые системы, она не изменяет счетчик значений жестких ссылок, соответствующего индексного дескриптора. Каталог ОС UNIX считается пустым если он не содержит никаких других файлов, кроме ссылок на текущий и родительский каталоги. Такой каталог можно удалить.

Специальные файлы предназначены для организации взаимодействия ввода \ вывода (с периферийными устройствами). Бывают байт-ориентированными и блок-ориентированными. Обычно с каждым внешним устройством связан определенный специальный файл. Прикладная программа может выполнять операции чтения и записи со специальным файлом также как и с обычным файлом. А ОС будет вызывать автоматически соответствующий драйвер устройства для выполнения фактической передачи данных между физическим устройством и данной программой

Fd=open(“/dev/lp0”,1);

Write(Fd, .. , ..);

Специальные файлы создаются с помощью команды mknod.

mknod /dev/crk c 115 5 – байт-ориентированное устройство

mknod /dev/brk b 121 15 – блок-ориентированное устройство

Ориентацию определяет с(байт) и b(блок)

115 и 121 – тип устройства индекс в таблице ядра (старший номер), который содержит список всех драйверов известных системе. Младший номер (номер устройства) – 5 и 15 – целое значение, которое передается как аргумент в драйвер устройства при вызове драйвера. Этот номер сообщает драйверу с каким конкретно физическим устройством он взаимодействует.

FIFO файл предназначен для организации канала и создания временного буфера, обеспечивающего взаимодействие двух или более процессов по средством записи в этот буфер и чтения данных из буфера. Буфер, связанный с FIFO файлом, создается когда из процессов открывает этот файл для чтения или записи. Буфер удаляется когда все процессы, связанные с FIFO файлом, закрывают все свои ссылки на него. FIFO файл может быть создан в UNIX с помощью mkfifo

mkfifo fifo.file

mlnod fifo.file p

Хотя FIFO файл является рабочим файлом, он может быть удален подобно обычному файлу командой rm.


Индексный дескриптор файлов (блок управления файлом в ОС UNIX).

С каждым файлом в ОС UNIX связан индексный дескриптор. Это структура данных, которая имеет следующие атрибуты:

- права доступа к файлу для владельца, группы и прочих;

- количество (счетчик) жестких ссылок (2 байта);

- идентификатор владельца и группы;

- размер файла в байтах;

- время последнего доступа к файлу;

- время последней модификации файла;

- время последнего изменения прав доступа;

- системный номер индексного дескриптора файла;

- идентификатор файловой системы, в которой находится файл;

- вид файла;

- тип организации файла;

- физический адрес на диске (обычно указатель на начало);

- диспозиция файла.


Для каждой файловой системы формируются идентификаторы и создается таблица индексных дескрипторов, в которой хранится информация обо всех файлах. Каждая запись в таблице индексных дескрипторов содержит все перечисленные атрибуты файла и определяется по идентификатору файловой системы и номеру индексного дескриптора. Идентификатор присваивается файловой системе при выполнении команды mount. Всякий раз, когда создаются новые файлы, ядро ОС UNIX создает новую запись в таблице индексных дескрипторов для сохранения информации о них. Кроме того ядро ОС добавляет его имя и номер дескриптора в соответствующий каталог. Таблицы индексных дескрипторов содержатся в ?соответсвующих файловых системах на диске?, но ядро ОС UNIX ведет их копии и в ОП.


Поддержка файлов ядром ОС UNIX.

Ядро ОС UNIX ведет также таблицы файлов, в которых отслеживаются все открытые в системе файлы. И каждый вновь создаваемый процесс содержит таблицу пользовательских дескрипторов файлов, где регистрируются все файлы, открытые процессом (таблица содержится в контексте процесса). Когда процесс вызывает системный вызов open/creat чтобы открыть или создать файл, ядро преобразует имя файла в индексный дескриптор файла. Если индексный дескриптор файла доступен процессу (есть право доступа), ядро ищет в таблице пользовательских дескрипторов файлов 1ю

незадействованную позицию. Номер этой позиции будет возвращен процессу как пользовательский дескриптор открытого файла. Далее ядро просматривает таблицу файлов и ищет незадействованную позицию. В записи таблицы пользовательских дескрипторов файлов процесса делается ссылка на найденную позицию в таблице файлов. В записи таблицы файлов производится ссылка на ту запись в таблице индексных дескрипторов файловой системы, в которой хранится индексный дескриптор этого файла. В записи таблицы файлов формируется указатель текущей позиции (чтения\записи) в файле. И в запись таблицы файлов заносится информация, о том, в каком режиме открыт файл и значение счетчика ссылок в записи таблицы файлов устанавливается в соответствии с тем, сколько дескрипторов файлов из процесса обращается к данной записи. Значение счетчика ссылок индексного дескриптора файла увеличивается на единицу. Ядро будет использовать пользовательский дескриптор открытого файла, как индекс в таблице пользовательских дескрипторов файла процесса для поиска элемента или строки в таблице файлов, соответствующих открытому файлу. Затем ядро проверяет данные записи в таблице файлов, чтобы убедиться в том, что файл открыт в соответствии с режимом доступа. Ядро использует указатель из записи в таблице файлов для доступа к записи индексного дескриптора файлов. Оно использует указатель чтения\записи файла из таблицы файлов, чтобы определить с какого элемента должны происходить чтение или запись. Ядро проверяет вид файла в записи индексного дескриптора и вызывает соответствующие драйверы для того, чтобы фактически начать обмен данными с физическим устройством.


Физическая и логическая организация файловой системы.

С точки зрения физической организации файловая система представляет собой совокупность блоков, расположенных на магнитном диске. 1й блок файловой системы (0й индекс) – блок начальной загрузки. Следующий блок (блок – (1024-2048) – набор байтов, страница – блок постоянного размера) – супер-блок, содержит заголовок файловой системы. В заголовке находится информация о размере файловой системы, числе\количестве индексных дескрипторов (isize) и о состоянии стека свободных блоков, начиная со второго, несколько блоков, содержащих индексные дескрипторы. Количество таких блоков определяется количеством индексных дескрипторов. В ОС UNIX имя файла отсутствует в индексных дескрипторах. Индексный дескриптор корневого каталога имеет номер 2. Все оставшиеся блоки используются под данные или образуют список свободных блоков. В последние годы в файловую систему ОС UNIX были внесены следующие изменения:

1) поиск файлов в каталогах производится линейно. \\рисунок Для увеличения производительности системы было добавлено кэширование имен. Прежде чем искать имя в каталоге система проверяет его наличие в КЭШе, если есть в КЭШе – в каталоге можно не искать.

2) разбиение диска на группы цилиндров (на группы блоков). У каждой группы создается супер-блок, индексные дескрипторы и блоки данных. Суть: хранить индексные дескрипторы и данные ближе друг к другу, чтобы снизить время, затрачиваемое жестким диском на перемещение головок.

3) использование не одного, а двух размеров. Для файлов большого размера – блоки 1024 байт; для файлов маленького размера – 512 байт. Наличие блоков двух размеров позволяет обеспечивать эффективность операций чтения\записи для больших файлов и эффективное использование дискового пространства для небольших файлов. В ОС UNIX физическая и логическая структуры файлов не совпадают. Если логически файл представляет собой непрерывную цепочку блоков, то физически файл представляет собой список блоков, которые могут быть разбросаны по всему дисковому пространству. Недостатки такой организации проявляются в дополнительных системных расходах на ведение списка блоков и поиск информации. Но такие положительные моменты как возможность неограниченного расширения файлов, унификация вопросов связанных с вводом\выводом оказались более весомыми для определения способы организации файловой системы. Для обеспечения быстрого доступа к файлам и эффективной работы файловой системы некоторые ее части во время функционирования в ОС UNIX должны располагаться в основной памяти. Прежде всего это супер-блок и список индексных дескрипторов. В первом супер-блоке – состояние файловой системы в том числе и информация о свободном месте, а каждая запись в таблице индексных дескрипторов определяет информацию, необходимую для доступа к файлу. Дополнительно в основной памяти находится таблица файлов, каждый элемент которой содержит ссылку на некоторый адрес в таблице индексных дескрипторов и указатель на очередной подлежащий обработке байт файла.


Команды файловой системы.


pwd – печатает полное имя текущего каталога.


ls – [флаги] [имя] – выводит содержимое каталога по имени

Флаги:

l – вывод полной информации о файле

a – вывод всех файлов каталога

s – вывод размера файла в блоках

d – вывод информации только о подкаталогах

u – сортирует список файлов по времени последнего доступа

t – сортирует список файлов по времени последней модификации

i – позволяет получить номер индексного дескриптора (inode) вместо вида файла


Пример:

$ ls –alt – из текущего каталога

ls –l /bin – из каталога bin


cat [-u] [f1 f2 f3 …] – команда выполняет конкатенацию (сцепление) файлов и отправляет на стандартный вывод

u – флаг для изменения размера выходного блока


Пример:

cat a.c – выводит содержимое a.c

cat a.c b.c > c.c – объединяет содержимое файлов и записывает в c.c


cp f1 f2 – копирует один файл в другой или несколько файлов в каталог, если f2 существует, то его содержимое будет потеряно.


Пример:

cp a.c b.c /home – файлы копируются в каталог home

cp a.c b.c – файл a.c запишется в b.c

cp a.c b.c c.c – файлы a.c и b.c запишутся в c.c


mv f1 f2 – перемещение (переименование) файлов и каталогов

Пример:

mv /home/us /home/as – имени /home/us не будет


pr [флаги] [f1 f2 …] – команда распечатки на экран одного или нескольких файлов

-n - вывод в n колонок

+n - печать n-ой страницы файла

-h - следующий за h текст трактуется как заголовок

-wn - задает ширину в n символов (вместо 72 по умолчанию)

-ln - устанавливает длину страницы в n строк (вместо 66 по умолчанию)

-t - не печатать принятые по умолчанию 5 строк заголовка и 5 последних строк

-s! - колонки разделяются символом ! вместо пробелов

-m - печатать все файлы одновременно, каждый в своей колонке


Примеры:

pr –m a.c b.c

pr –m –t –Sc a.c b.c

ls | pr –5 –l20 –t


lpr [флаги] [f1 f2 …] – позволяет печатать файлы одновременно с выполнением некоторых других. Файлы помещаются в спулинг и печатаются по мере освобождения печатающего устройства.

-r - удалить файл после печати

-с - скопировать файл для печати

-m - заказать почтовое сообщение об окончании печати файла


wc [флаги] [f1 f2 …] – выдает количество строк и символов в одном или нескольких файлах

-l - подсчет числа строк в файле

-w - подсчет числа слов

-с - подсчет числа символов


who [am i] - выдает список всех пользователей, работающих в данный момент в системе и имена связанных с ним терминалов


tty - выдает имя терминала, за которым вы работаете

­

ps [флаги] – выдает информацию о текущих активных процессах в системе

a – выдает информацию о всех процессах, управляемых терминалом

x – выдает информацию о всех процессах, неуправляемых терминалом

l – выдает полную информацию с указанием состояния каждого процесса

Пример:

ps axl

F S UID PID PPID CPU PRI NICE ADDR WCHAN TTY TIME CMD

3 S 0 0 0 147 0 20 57 7670 ? 18:00

1 S 0 1 0 0 30 20 377 10574 ? 0:02

……………………………………………………

1 S 4 1494 1 0 30 20 323 10630 tty0 0:01 sh


F - внутренний флаг, связанный с процессом. 1 – процесс находится в памяти, 2 – системный процесс, 3 – монитор, 4 – процесс зафиксирован в памяти, 10 – процесс выгружен из памяти, 20 – процесс трассируется (проверяется) другим процессом.

S – состояние процесса: 0 – процесса не существует, S – процесс неактивен (задержан), W – процесс находится в состоянии ожидания (блокировки), R – процесс находится в состоянии выполнения (т.е. работает), 1 – промежуточное состояние, Z – процесс завершен, T – процесс остановлен.

UID – идентификатор владельца процесса

PID – идентификатор процесса

PPID – идентификатор родительского процесса

CPU – системная составляющая приоритета процесса

PRI – приоритет процесса (больше число – меньше приоритет)

NICE – пользовательская составляющая процесса

ADDR – для резидентного процесса адрес в памяти, в противном случае адрес на диске

WCHAN – событие, которого ожидает процесс в состоянии S или W. Пустое поле – процесс работает

TTY – терминал, который управляет данным процессом

TIME – суммарное время выполнения процесса

CMD – команда, выполняемая процессом


du [-s][-a] имя - команда сообщает о


Лекция № 10 (продолжение)

Система управления вводом\выводом. Логическая и физическая организация.


В ОС UNIX логическая организация ввода\вывода упрощена за счет наличия одинакового интерфейса ввода\вывода на уровне ядра системы. Все файлы рассматриваются как последовательности байтов, к которым возможно как последовательное, так и прямое обращение. Для того, чтобы с файлом можно было работать, он должен быть либо открыт с помощью open, либо создан (creat). При завершении процесса открытые файлы автоматически закрываются.

Физическая организация ввода\вывода базируется на наличии специальных программных средств, работающих на уровне ядра системы и называемых драйверами ввода\вывода. Ядро системы устанавливает однозначную связь между специальными файлами и соответствующими им драйверами. Драйверы ввода\вывода и системы буферизации ядра поддерживают 2 вида интерфейсов:
  1. блок-ориентированные
  2. байт-ориетированные


Блок-ориентированные дают возможность значительно повысить эффективность системы управления вводом\выводом за счет организации КЭШ-памяти. КЭШ-память - это системные буфера ввода\вывода, размером с блок, где оседают те блоки данных, обращение к которым происходит наиболее часто. Таким образом, если возникает запрос на передачу данных, то сначала просматриваются внутренние буфера, т.е. КЭШ-память, и только в том случае, если необходимый блок отсутствует в КЭШ-памяти происходит обращение через драйвер к внешнему устройству.

Байт-ориентированные предназначены для медленных периферийных устройств. Обмен информацией в этом случае осуществляется посимвольно через буфер символов в ядре ОС. Для большей части внешних устройств допускается использование как блок- так и байт-ориентированного интерфейса. При чем второй обеспечивающий обмен группами символов без буферизации, называется прозрачным блок-ориентированным интерфейсом.


Лекция №11

Система ввода\вывода ОС UNIX – это часть ядра, выполняющая функции диспетчера устройств ввода\вывода. Программная часть диспетчера включает управляющую компоненту, систему буферизации и набор драйверов. В качестве структурных компонент используются дескрипторы специальных файлов, таблица связи между драйверами байт-ориентированных устройств и ядром системы, таблица связи между драйверами блок-ориентированных устройств и ядром системы, таблица буферов блоков и таблиц прерываний. Взаимодействие этих структур можно отобразить в виде следующей схемы.

\\ рисунок



Индексные дескрипторы специальных файлов содержат информацию об имени специального файла, типе устройства номере типа устройства (старший номер) и номере устройства (младший номер) и те атрибуты, которые содержат дескрипторы обычных файлов (не все): размер, идентификаторы владельца, группы; тип файла, размер, метод доступа, дата и время создания, количество ссылок на файл, дата и время последней модификации. Каждый дескриптор ссылается на соответствующий элемент в зависимости от типа устройства из таблицы связи. Эти таблицы позволяют ядру быстро перестраиваться на новый состав и параметры внешних устройств путем включения новых драйверов. Каждый элемент таблиц связи адресуется к определенному драйверу, обеспечивающему обмен информацией между основной памятью и внешним устройством данного типа. Таблица связи блок-ориентированных устройств кроме того связана с таблицей буферов блоков, указывающей буфера ввода\вывода, образующие КЭШ-память. Программы драйверов предназначены для открытия и закрытия файлов, чтения и записи данных, а также для управления режимами работы устройств. Каждый драйвер разделен на несколько частей: верхняя часть драйвера работает в режиме вызывающего процесса и служит интерфейсом ?? системы UNIX; нижняя часть работает в контексте ядра ОС и непосредственно взаимодействует с устройством. Таблица прерываний обычно располагается в начальной области памяти по фиксированным адресам. При возникновении прерываний от ввода\вывода управление передается программе обработки прерываний драйвера, адрес которой выбирается из таблицы прерываний.


Реализация операций ввода\вывода в ОС UNIX.


Пример реализации ввода информации с блок-ориентированного устройства (hd0).

Fd=open(“/dev/hd0”,0);

read(Fd,buf,n);

инициирует обращение к специальному файлу через дескриптор Fd, определяет тип и номер устройства, с которого необходимо прочитать информацию. По адресу из таблицы связи управление передается необходимому драйверу, программа драйвера прежде всего проверяет не располагается ли требуемый блок файла в КЭШ-памяти. Если это так, то моделируется сигнал прерывания об окончании обмена. В противном случае драйвер освобождает, когда это требуется, участок КЭШ-памяти и запускает операцию обмена. По окончании обмена генерируются прерывания и запускается подпрограмма обработки прерываний драйвера, адрес которой извлекается из определенной ячейки таблицы прерываний. Далее программа драйвера переписывает информацию из КЭШ-памяти в область основной памяти, указанную драйвером ввода (buf). После окончания операции ввода управление передается диспетчеру процессов ядра ОС UNIX.


Функционирование ОС UNIX.

Функционирует как система разделения времени, предусматривающая одновременную работу нескольких пользователей, каждый из которых обладает терминалом. Через терминал пользователь общается с системой, передает запросы на выполнение требуемых функций, получает результаты их работы. Пользовательский терминал по умолчанию считается стандартным вводом\выводом. При взаимодействии с ОС UNIX пользователь может обращаться к большому количеству файлов. Настройка среды при входе в систему обеспечивает установку, в качестве текущего, начального каталога пользователя. Начальный каталог как бы определяет поддерево файловой системы, непосредственно доступное пользователю. Тем самым ограничивается набор файлов файловой системы, непосредственно доступных пользователю.

pwd - определение текущего каталога

Диалог в ОС UNIX обеспечивается специальной программой-интерпретатором shell, которая составляет неотъемлемую часть среды выполнения каждого пользователя. Интепретатор shell воспринимает команды, посылаемые с терминала, контролирует их и затем, если не обнаруживает ошибок, выполняет. Выполнение отдельной команды может рассматриваться как инициация определенной программы или группы взаимосвязанных программ, обеспечивающих ее реализацию.


Начальная загрузка и выход на интерактивный режим в ОС UNIX.

Для выполнения начальной загрузки необходим диск, содержащий в первом блоке программу загрузчик. Эта программа, при соответствующей инициации (обычно аппаратными средствами), считывается в память. Работа этой программы заключается в отыскании и чтении в ОП ядра ОС. Сначала загрузчик копирует в себя фиксированный адрес памяти в старших адресах, чтобы освободить нижнюю память для ОС. Загрузившись, он считывает корневой каталог с диска. Затем считывает ядро ОС и передает ему управление. Начальная программа ядра устанавливает указатель стека, определяет тип ЦП, вычисляет количество имеющейся в наличии ОП, запрашивает прерывания, разрешает работу диспетчера процессов и запускает основную процедуру инициации (генерации ОС). Далее процесс загрузки разбивается на две фазы:

- инициализация ядра

- инициализация системы


Инициализация ядра начинается с установки таймера и формирования начальных значений структуры данных ядра. На следующем шаге ОС считывает файлы конфигурации, в которых сообщается какие типы устройств могут присутствовать и проверяет, какие из устройств действительно присутствуют. Далее ищутся данные устройств, действительно присутствующих, и подгружаются. Затем ядро специальным образом без использования fork запускает процесс 0. Для него создается контекст и информация заносится в таблицу процессов.


Лекция № 12

Процесс 0 является системным процессом т.к. он постоянно находится в основной памяти и активен только тогда, когда процессор находится в состоянии «система». Процесс 0 продолжает инициализацию, осуществляя монтирование основной файловой системы. После образования процесса 0 ядро создает процесс с идентификатором 1 и идентификатором 2. Процесс 1 создается по упрощенной схеме, т.е. использованием fork, и служит для загрузки в основную память программы из файла /etc/init. Ядро по системному вызову exec считывает в процедурный сегмент процесса 1 программу, которая в будущем обеспечит активизацию из файла /etc/init. На этом инициализация ядра завершается.

Инициализация системы начинается с передачи управления диспетчеру процессов, который выбирает единственный активный процесс с идентификатором 1 и передает управление программе, размещенной в его процедурном сегменте. Процесс 1 по системному вызову exec на место своего процедурного сегмента считывает программу init. Она может создавать 2 типа режимов организации процессов:
  1. однопользовательский
  2. многопользовательский

Процесс init прежде всего инициирует начало работы интерпретатора shell для привелигированного пользователя. При выходе из однопользовательского режима создается многопользовательская среда. Активизация shell делает его доступным для всех пользователей системы. Для каждого активного канала связи порождается процесс getty. При вводе в систему по какому-либо каналу он выдает сообщение:

Имя (login) и пароль (password)


Интерактивный режим работы в ОС UNIX.


  1. Входим в систему и набираем ls имя команды + enter
  2. Далее управление передается интерпретатору shell, который анализирует введенный текст. Если в этот момент будет зафиксирована ошибка, то интерпретатор проинформирует от этом пользователя, выдав соответствующее сообщение, и снова вернет приглашение для ввода командной строки.
  3. Если команда была задана корректно, то shell по средствам системного вызова fork порождает новый процесс. Ядром системы выполняются стандартные действия, в том числе в таблицу процессов заносится запись о новом процессе.
  4. Затем из shell выполняется системный вызов exec
  5. В каталоге /bin/ отыскивается файл с именем ls и загружается в основную память
  6. Сразу после порождения нового процесса (4) оба они: и процесс-отец (shell) и процесс-сын (ls) – начинают конкурентную борьбу за ресурсы системы. Но shell, будучи особым процессом, порождает другие процессы с меньшим приоритетом. Поэтому после порождения процесса управление вернется в shell, и он сможет выполнить системный вызов exec. После его выполнения уже нельзя с определенностью сказать какой процесс shell или ls получит управление. Если окажется, что shell, то его необходимо приостановить, чтобы дать возможность выполниться процессу ls.
  7. Приостановка shell достигается с помощью системного вызова wait. В этой точке выполнение процесса shell прекратится, и он будет ожидать завершения работы процесса ls. После остановки shell начинает работу ядро ОС. Диспетчер процессов определяет процесс, который надо активизировать следующим. Т.к. в нашем случае других готовых к выполнению процессов кроме ls нет, ему и будет передано управление.
  8. Процесс ls начинает работу по выполнению своих функций.
  9. В то время процесс shell будет находиться в состоянии ожидания.
  10. При выполнении процесса ls ему надо будет вводить результаты свой работы на экран терминала. Т.к. в ОС UNIX все программы выполняются последовательно, для их параллельного выполнения требуется создание новых процессов.
  11. Т.е. программа вывода должна выполняться параллельно. Выполнение процесса ls выполняется системным вызовом exit.
  12. Ядро системы по взаимодействию пары системных вызовов wait, exit переводит процесс shell в состояние готовности. Ввиду отсутствия других готовых процессов активирует его.
  13. Интерпретатор shell выполняет завершающее действие по обработке ls.
  14. Shell выдает на экран терминала приглашение для ввода следующей команды.