1. 2. Последовательность выполнения работы
1) Прогон программы для записи информации в файл. Для иллюстрации вышесказанного давайте рассмотрим программу_1, находящуюся в файле откомпилируем ее и запустим на исполнение. Обратите внимание на использование системного вызова umask() с параметром 0 для того, чтобы права доступа к созданному файлу точно соответствовали указанным в системном вызове open().
2) Написание, компиляция и запуск программы для чтения информации из файла. Измените предыдущую программу_1 так, чтобы она читала записанную ранее в файл информацию и печатала ее на экране. Желательно удалить все лишние операторы.
3) Прогон программы для pipe в одном процессе. Достаточно понятной иллюстрацией действий по созданию pip'a, записи в него данных, чтению из него и освобождению выделенных ресурсов может служить программа_2, организующая работу с pip'ом в рамках одного процесса. Откомпилируйте ее и запустите на исполнение.
4) Прогон программы для организации однонаправленной связи между родственными процессами через pipe. Давайте рассмотрим программу_3, осуществляющую однонаправленную связь между процессом-родителем и процессом-ребенком, откомпилируем ее и запустим на исполнение.
5) Написание, компиляция и запуск программы для организации двунаправленной связи между родственными процессами через pipe.. Pipe принципиально служит для организации однонаправленной или симплексной связи. Если бы в предыдущем примере мы попытались организовать через pipe двустороннюю связь, когда процесс-родитель пишет информацию в pipe, предполагая, что ее получит процесс-ребенок, а затем читает информацию из pip'а, предполагая, что ее записал порожденный процесс, то могла бы возникнуть ситуация, в которой процесс-родитель прочитал бы собственную информацию, а процесс-ребенок не получил бы ничего. Для использования одного pip'a в двух направлениях, необходимы специальные средства синхронизации процессов, о которых речь пойдет на лекциях " Алгоритмы синхронизации" и " Механизмы синхронизации" . Более простой способ организации двунаправленной связи между родственными процессами заключается в использовании двух pip'ов. Модифицируйте программу из предыдущего примера для организации такой двусторонней связи, откомпилируйте ее и запустите на исполнение.
Вывод: в этой лабораторной работы мы получили навыки о потоке ввода-вывода информации. Изучили стандартную библиотеку и функции, их системные вызовы на языке С. На практике применили такие функции как open(), read(), write(), close(). А также научились передавать информацию с помощью потоковой модели между различными процессами или даже внутри одного процесса в операционной системе.
Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования «Южно-Уральский государственный университет» (национальный исследовательский университет) Институт естественных и точных наук Факультет математики, механики и компьютерных технологий Кафедра прикладной математики и программирования
ОТЧЕТ К ЛАБОРАТОРНОЙ РАБОТЕ №9 по дисциплине операционные системы
Челябинск 2019
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|