рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Управление ресурсами в ОС UNIX

Управление ресурсами в ОС UNIX - раздел Менеджмент,   Управление Ресурсами В Ос Unix Введение Одн...

 

Управление ресурсами в ОС UNIX

ВВЕДЕНИЕ

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

При этом в рамках различных операционных систем и разных аппаратных платформ функции управления системными ресурсами поддерживаются различными средствами, например, в ОS/360/370 для IBM/360/370 (ЕС ЭВМ) таковыми средствами были макрокоманды супервизора, в операционной системе MS/DOS для персональных компьютеров - прерывания, в ОС UNIX - системные вызовы.

Методические указания включают 8 лабораторных работ, в которых последовательно рассматриваются вопросы управления ресурсами ОС Unix средствами Shell-интерпретатора, управления файловой системой и системой ввода-вывода, средства создания, синхронизации и взаимодействия процессов с помощью сигналов и программных каналов, механизмы клиент-серверного и межпроцессного взаимодействия программ посредством средств IPC. Необходимым условием для выполнения лабораторных работ является знание основ ОС UNIX, владение языком Си и соответствующим инструментарием для разработки и отладки программ в указанной операционной системе.

Лабораторная работа 1. Управление системными ресурсами Shell-интерпретатора

Лабораторная работа 2. Файловая система ОС UNIX

Лабораторная работа 3. Структура системы управления вводом-выводом в ОС UNIX

Лабораторная работа 4. Порождение нового процесса и работа с ним. Запуск программ в рамках порожденного процесса. Сигналы и каналы в В ОС UNIX

Лабораторная работа 5. Синхронизация процессов

Лабораторная работа 6. Моделирование работы интерпретатора

Лабораторная работа 7. Межпроцессное взаимодействие программ

Лабораторная работа 8. Клиент-серверные взаимодействия посредством сокетов в режиме TCP-соединения


 

Лабораторная работа N 1

УПРАВЛЕНИЕ СИСТЕМНЫМИ РЕСУРСАМИ СРЕДСТВАМИ SHELL-ИНТЕРПРЕТАТОРА

Цель работы

Ознакомиться с основами программирования на уровне командного языка Shell путем написания Shell-программ для работы с файловой системой.

Содержание работы

  1. Изучить программные средства языка Shell (структура команды, группирование команд, перенаправление ввода-вывода, конвейер команд, Shell-переменные, макроподстановка результатов в Shell-командах, программные конструкции).
  2. Ознакомиться с заданием к лабораторной работе.
  3. Для указанного варианта составить Shell-программу, выполняющую требуемые действия в файловой системе.
  4. Отладить и оттестировать составленную Shell-программу.
  5. Защитить лабораторную работу, ответив на контрольные вопросы.

Методические указания к лабораторной работе

Работая на командном языке, пользователь может вводить переменные, присваивать им значения, выполнять простые команды, строить составные команды,… Если указанный интерпретатору файл является текстовым и содержит команды… Коротко перечислим средства группирования команд и перенаправления ввода/вывода:

Варианты заданий

1. Shell-программа подсчитывает количество и выводит список всех файлов (без каталогов) в порядке уменьшения их длин в поддереве, начиная с каталога, имя которого задано параметром Shell-программы. Форма вывода результата:

2. Shell-программа подсчитывает количество и выводит перечень каталогов в хронологическом порядке (по дате создания) в поддереве, начиная с каталога, имя которого задано параметром Shell-программы. Форма вывода результата:

3. Задание варианта 1, но список файлов в каталоге выводится в алфавитном порядке.

4. Shell-программа объединяет все временные файлы с указанным суффиксом (например, .tmp) в поддереве, начиная с каталога, имя которого задано параметром Shell-программы. Результат объединения помещается либо в указанный Shell-программой файл, либо выводится на экран в форме:

5. Shell-программа периодически с некоторым интервалом удаляет все временные файлы с указанным суффиксом (например, .tmp) в поддереве, начиная с каталога, имя которого задано параметром Shell-программы и выводит при этом список объединенных файлов в форме, предложенной в варианте 1.

6. Shell-программа просматривает каталог, имя которого указано параметром Shell-программы и выводит имена встретившихся каталогов. Затем осуществляет переход в родительский каталог, который становится текущим и повторяются указанные действия до тех пор, пока текущим каталогом не станет корневой каталог. Форма вывода результата:

7. Задание, аналогичное варианту 6, но выводятся не каталоги, а файлы каталогов.

8. Shell-программа выводит имена тех каталогов в каталоге, которые в себе не содержат каталогов. Имя каталога задано параметром Shell-программы.

9. Shell-программа выводит имена тех каталогов в каталоге, которые в себе содержат каталоги. Имя каталога задано параметром Shell-программы.

10. Shell-программа выводит содержимое каталога, имя которого указано параметром Shell-программы. При выводе сначала перечисляются имена каталогов, а затем в алфавитном порядке имена файлов с указанием их длин, даты создания и числа ссылок на них.

Контpольные вопpосы

22. Какие существуют средства группирования команд? Приведите примеры использования. 23. Как осуществляется перенаправление ввода-вывода? 24. В чем сущность конвейера команд? Приведите примеры использования.

Лабораторная работа N 2

ФАЙЛОВАЯ СИСТЕМА ОС UNIX

Цель работы

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

Содержание работы

  1. Ознакомиться с файловой системой ОС UNIX и программными средствами работы с ней.
  2. Ознакомиться с заданием к лабораторной работе.
  3. Для указанного варианта составить программу на языке Си, реализующую требуемые действия.
  4. Отладить и оттестировать составленную программу, используя инструментарий ОС UNIX.
  5. Защитить лабораторную работу, ответив на контрольные вопросы.

Методические указания к лабораторной работе

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

Таблица 1

Функции для работы с файловой системой

#include <sys/types.h> #include <sys/stat.h> int stat(const char *name, struct stat *stbuf)

Варианты заданий

1. Разработать программу, которая просматривает текущий каталог и выводит на экран имена всех встретившихся в нем каталогов. Затем осуществляется переход в родительский каталог, который затем становится текущим, и указанные выше действия повторяются до тех пор, пока текущим каталогом не станет корневой каталог.

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

3. Разработать программу, которая выводит на экран содержимое текущего каталога в порядке возрастания размеров файлов. При этом имена каталогов должны выводиться первыми.

4. Разработать программу, которая выводит на экран содержимое текущего каталога, упорядоченное по времени создания файлов. При этом имена каталогов должны выводиться последними.

5. Разработать программу, которая выводит на экран содержимое текущего каталога в алфавитном порядке. Каталоги не выводить.

6. Разработать программу, которая выводит на экран в текущем каталоге имена тех каталогов, которые в себе не содержат подкаталогов.

7. Разработать программу, которая выводит на экран в текущем каталоге имена тех каталогов, которые содержат в себе подкаталоги.

8. Разработать программу, которая осуществляет просмотр текущего каталога и выводит на экран его содержимое группами в порядке возрастания числа ссылок на файлы (в том числе имена каталогов). Группа представляет собой объединение файлов с одинаковым числом ссылок на них.

Контрольные вопросы

1. Что представляет собой суперблок?

2. Что представляет собой список свободных блоков?

3. Что представляет собой список свободных описателей файлов?

4. Как производится выделение свободных блоков под файл?

5. Как производится освобождение блоков данных, занятых под файл?

6. Каким образом осуществляется монтирование дисковых устройств?

7. 7. Каково назначение элементов структуры stat?

8. Каким образом осуществляется защита файлов в ОС UNIX?

9. Каковы права доступа к файлу, при которых владелец может выполнять все операции (r, w, x), а прочие пользователи - только читать?

10. Что выполняет системный вызов lseek(fd, (off_t)0, SEEK_END)?


 

Лабораторная работа N 3

СТРУКТУРА СИСТЕМЫ УПРАВЛЕHИЯ ВВОДОМ-ВЫВОДОМ В ОС UNIX

Цель работы

Ознакомиться с системой упpавления вводом-выводом в ОС UNIX и основными стpуктуpами данных, используемыми этой системой. Исследовать механизм pаботы системы упpавления вводом-выводом.

Содержание работы

1. Изучить систему упpавления вводом-выводом ОС UNIX.

2. Изучить стpуктуpы данных, используемые этой системой.

3. Ознакомиться с заданием к лабораторной работе.

4. Для указанного ваpианта pазpаботать пpогpамму, моделиpующую pаботу системы упpавления вводом-выводом ОС UNIX по ведению стpуктуp (таблиц), отслеживающих опеpации ввода-вывода в системе.

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

Методические указания к лабораторной работе

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

Варианты заданий

1. Пpоцесс откpывает N файлов, pеально существующие на диске, либо вновь созданные. Разpаботать пpогpамму, демонстpиpующую динамику фоpмиpования таблицы описателей файлов и изменения инфоpмации в ее элементах (пpи изменении инфоpмации в файлах). Например, сценарий программы может быть следующим:

· открытие первого пользовательского файла;

· открытие второго пользовательского файла;

· открытие третьего пользовательского файла;

· изменение размера третьего файла до нулевой длины;

· копирование второго файла в третий файл.

После каждого из этапов печатается таблица описателей файлов для всех открытых файлов.

2. Пусть N пpоцессов осуществляют доступ к одному и тому же файлу на диске (но с pазными pежимами доступа). Разpаботать пpогpамму, демонстpиpующую динамику фоpмиpования таблицы файлов и изменения ее элементов (пpи пеpемещении указателей чтения-записи, напpимеp). Например, сценарий программы может быть следующим:

· открытие файла процессом 0 для чтения;

· открытие файла процессом 1 для записи;

· открытие файла процессом 2 для добавления;

· чтение указанного числа байт файла процессом 0;

· запись указанного числа байт в файл процессом 1;

· добавление указанного числа байт в файл процессом 2.

После каждого из этапов печатаются таблицы файлов всех процессов.

3. Пусть каждый из N пpоцессов осуществляет доступ к P(i), i=1,N файлам. Далее, пусть M<N пpоцессов поpодили пpоцессы-потомки (с помощью системного вызова fork()) и сpеди этих потомков K<M пpоцессов дополнительно откpыли еще S(j),j=1,K файлов. Разpаботать пpогpамму, демонстpиpующую динамику фоpмиpования таблиц откpытых файлов пpоцессов. Например, сценарий программы может быть следующим:

· процесс 0 открывает два файла (общее число открытых файлов, включая стандартные файлы, равно пяти);

· процесс 1 открывает два файла (общее число открытых файлов, включая стандартные файлы, равно пяти);

· процесс 2 открывает два файла (общее число открытых файлов, включая стандартные файлы, равно пяти);

· процесс 0 порождает процесс 3, который наследует таблицу открытых файлов процесса 0;

· процесс 1 порождает процесс 4, который наследует таблицу открытых файлов процесса 1;

· процесс 4 дополнительно открыл еще два файла.

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

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

· неявное открытие стандартного файла ввода;

· неявное открытие стандартного файла вывода;

· неявное открытие стандартного файла вывода ошибок;

· открытие первого пользовательского файла;

· открытие второго пользовательского файла;

· открытие третьего пользовательского файла.

После каждого из этапов печатаются таблица описателей файлов, таблица файлов, таблица открытых файлов процессов.

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

· неявное открытие стандартного файла ввода;

· неявное открытие стандартного файла вывода;

· неявное открытие стандартного файла вывода ошибок;

· открытие пользовательского файла;

· закрытие стандартного файла ввода (моделирование close(0));

· получение копии дескриптора пользовательского файла (моделирование dup(fd), где fd - дескpиптоp пользовательского файла);

· закрытие пользовательского файла (моделирование close(fd), где fd - дескpиптоp пользовательского файла).

После каждого из этапов печатаются таблица описателей файлов, таблица файлов, таблица открытых файлов процессов.

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

После каждого из этапов печатаются таблицы файлов и открытых файлов обоими процессами.

7. Пусть процесс, открывший N файлов, перед порождением процесса-потомка с помощью системного вызова fork() закрывает K<N файлов. Процесс-потомок сразу после порождения закрывает M<N-K файлов и через некоторое время завершается (в это время процесс-предок ожидает его завершения). Разработайте программу, демонстрирующую динамику изменения данных в системе управления вводом-выводом ОС UNIX (таблицы файлов и таблицы открытых файлов процессов). Например, сценарий программы может быть следующим:

· открытие процессом-предком стандартных файлов ввода-вывода и четырех пользовательских файлов для чтения;

· закрытие процессом-предком двух пользовательских файлов;

· процесс-предок порождает процесс, который наследует таблицы файлов и открытых файлов процесса-предка;

· завершается процесс-потомок.

После каждого из этапов печатаются таблицы файлов и открытых файлов для обоих процессов.

8. Пусть процесс осуществляет действия в соответствии со следующим фрагментом программы:

main()

{

...

fd=creat(temporary, mode); /* открыть временный файл */

...

/* выполнение операций записи-чтения */

...

close(fd);

}

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

Контpольные вопpосы

2. Какова цепочка соответствия дескриптора файла, открытого процессом, и файлом на диске? 3. Опишите функциональную структуру операции ввода-вывода (пулы, ассоциация их… 4. Каким образом осуществляется поддержка устройств ввода-вывода в ОС UNIX?

Лабораторная работа N 4

ПОРОЖДЕНИЕ НОВОГО ПРОЦЕССА И РАБОТА С НИМ. ЗАПУСК ПРОГРАММЫ В РАМКАХ ПОРОЖДЕННОГО ПРОЦЕССА. СИГНАЛЫ И КАНАЛЫ В ОС UNIX

Цель работы

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

Содержание работы

1. Изучить правила использования системных вызовов fork(), wait(), exit().

2. Ознакомиться с системными вызовами getpid(), getppid(), sеtpgrp(), getpgrp().

3. Изучить средства динамического запуска программ в ОС UNIX ( системные вызовы execl(), execv(),...).

4. Изучить средства работы с сигналами и каналами в ОС UNIX.

5. Ознакомиться с заданием к лабораторной работе.

6. Для указанного варианта составить программу на языке Си, реализующую задание.

7. Отладить и оттестировать составленную программу, используя инструментарий ОС UNIX.

8. Защитить лабораторную работу, ответив на контрольные вопросы.

Методические указания к лабораторной работе

int fork() Порожденный таким образом процесс представляет собой точную копию своего… Ожидание завершения процесса-потомка родительским процессом выполняется с помощью системного вызова wait()

Задание к лабораторной работе

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

1. все действия, относящиеся как к родительскому процессу, так и к порожденным процессам, выполняются в рамках одного исполняемого файла;

2. обмен данными между процессом-отцом и процессом-потомком предлагается выполнить посредством временного файла: процесс-отец после порождения процесса-потомка постоянно опрашивает временный файл, ожидая появления в нем информации от процесса-потомка;

3. если процессов-потомков несколько, и все они подготавливают некоторую информацию для процесса-родителя, каждый из процессов помещает в файл некоторую структурированную запись, при этом в этой структурированной записи содержатся сведения о том, какой процесс посылает запись, и сама подготовленная информация.

II. Модифицировать ранее разработанную программу с учетом следующих требований:

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

2. процесс-потомок, после порождения, должен начинать и завершать свое функционирование по сигналу, посылаемому процессом-предком (это же относится и к нескольким процессам-потомкам);

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

Варианты заданий

  1. Разработать программу, вычисляющую число сочетаний C(k,n)=n!/(k!*(n-k)!). Для вычисления факториалов n!, k!, (n-k)! должны быть порождены три параллельных процесса-потомка.
  2. Разработать программу, вычисляющую плотность нормального распределения в точке x по формуле f(x)=Exp(-x**2/2)/Sqrt(2*Пи). Для нахождения Пи и Exp(-x**2/2) программа должна породить два параллельных процесса, вычисляющих эти величины путем разложения в ряд по формулам вычислительной математики.
  3. Разработать программу, вычисляющую плотность выпуклого распределения в точке х по формуле f(x)=(1-Cos(x))/(Пи*x**2). Для нахождения Пи и Cos(х) программа должна породить два параллельных процесса, вычисляющих эти величины путем разложения в ряд по формулам вычислительной математики.
  4. Разработать программу, вычисляющую значение плотности распределения Коши в точке х=е по формуле f(x)=1/(Пи*(1+x**2)). Для нахождения Пи и е**2 программа должна породить два параллельных процесса, вычисляющих эти величины путем разложения в ряд по формулам вычислительной математики.
  5. Разработать программу, вычисляющую интеграл в диапазоне от 0 до 1 от подинтегрального выражения 4*dx/(1+x**2) с помощью последовательности равномерно распределенных на отрезке [0,1] случайных чисел, параллельно генеририруемую процессом-потомком. Процесс-потомок должен завершиться после заранее заданного числа генераций N.
  6. Разработать программу, вычисляющую значение f(x) как сумму ряда от k=1 до k=N от выражения (-1)**(k+1)*x**(2k-1)/(2k-1)! для значений x, равномерно распределенных на интервале [0,Пи], и выводящую полученный результат f(x) в файл в двоичном формате. В это время предварительно подготовленный процесс-потомок читает данные из файла, преобразовывает их в текстовую форму и выводит на экран до тех пор, пока процесс-предок не передаст ему через файл ключевое слово (например, "STOP"), свидетельствующее об окончании процессов.
  7. Задание, аналогичное варианту 6, но для вычисления суммы ряда от k=0 до k=N для выражения x**(2k+1)/(2k+1).
  8. Разработать программу, вычисляющую число размещений по r ячейкам n элементов N=n!/n(1)!*n(2)!*...*n(r)!, удовлетворяющих требованию, что в ячейку с номером i попадает ровно n(i) элементов; i=1,...,r и n(1)+n(2)+...+n(r)=n. Естественно, что на каждый факториал необходимо породить один процесс-потомок, как указано в варианте 1.

Контрольные вопросы

1. Каким образом может быть порожден новый процесс? Какова структура нового процесса?

2. Если процесс-предок открывает файл, а затем порождает процесс-потомок, а тот, в свою очередь, изменяет положение указателя чтения-записи файла, то изменится ли положение указателя чтения-записи файла процесса-отца?

3. Что произойдет, если процесс-потомок завершится раньше, чем процесс-предок осуществит системный вызов wait()?

4. Могут ли родственные процессы разделять общую память?

5. Каков алгоритм системного вызова fork()?

6. Какова структура таблиц открытых файлов, файлов и описателей файлов после создания процесса?

7. Каков алгоритм системного вызова exit()?

8. Каков алгоритм системного вызова wait()?

9. В чем разница между различными формами системных вызовов типа exec()?

10. Для чего используются сигналы в ОС UNIX?

11. Какие виды сигналов существуют в ОС UNIX?

12. Для чего используются каналы?

13. Какие требования предъявляются к процессам, чтобы они могли осуществлять обмен данными посредством каналов?

14. Каков максимальный размер программного канала и почему?


 

Лабораторная работа N 5

СИНХРОНИЗАЦИЯ ПРОЦЕССОВ

Цель работы

Практическое освоение механизма синхронизации процессов и их взаимодействия посредством программных каналов.

Содержание работы

1. Ознакомиться с заданием к лабораторной работе.

2. Выбрать набор системных вызовов, обеспечивающих решение задачи.

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

4. Отладить и оттестировать составленную программу, используя инструментарий ОС UNIX.

5. Защитить лабораторную работу, ответив на контрольные вопросы.

Методические указания к лабораторной работе

Кратко перечислим состав системных вызовов, требуемых для выполнения данной лабораторной работы: 1. Создание, завершение процесса, получение информации о процессе, - fork(),… 2. Синхронизация процессов - signal(), kill(), sleep(), alarm(), wait(), pause();

Варианты заданий

1. Исходный процесс создает программный канал К1 и порождает два процесса Р1 и Р2, каждый из которых готовит данные для обработки их основным процессом. Схема взаимодействия процессов показана ниже.

Подготовленные данные последовательно помещаются процессами-сыновьями в программный канал и передаются основному процессу.

Порядок передачи данных в канал и структура подготавливаемых данных показана ниже.

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

2. Исходный процесс создает два программных канала К1 и К2 и порождает два процесса Р1 и Р2, каждый из которых готовит данные для обработки их основным процессом. Схему взаимодействия процессов и структуру подготавливаемых данных см. в варианте 1.

Подготавливаемые данные процесс Р2 помещает в канал К1, затем они оттуда читаются процессом Р1, переписываются в канал К2, дополняются своими данными. Порядок передачи данных в канал изображен ниже

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

3. Исходный процесс создает программный канал К1 и порождает новый процесс Р1, а тот, в свою очередь, еще один процесс Р2, каждый из которых готовит данные для обработки их основным процессом. Схема взаимодействия процессов показана ниже.

Подготовленные данные последовательно помещаются процессами-сыновьями в программный канал и передаются основному процессу.

Порядок передачи данных в канал и структура подготавливаемых данных показана ниже.

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

4. Исходный процесс создает два программных канала К1 и К2 и порождает новый процесс Р1, а тот, в свою очередь, еще один процесс Р2, каждый из которых готовит данные для обработки их основным процессом. Схему взаимодействия процессов и структуру подготавливаемых данных см. в варианте 3.

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

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

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

6. Исходный процесс создает программный информационный канал К1, канал синхронизации К0 и порождает два процесса Р1 и Р2, из которых один (Р1) порождает еще один процесс Р3. Назначение всех трех порожденных процессов - подготовка данных для обработки их основным процессом. Схема взаимодействия процессов показана ниже.

Подготовленные данные последовательно помещаются процессами-сыновьями в программный канал К1 и передаются основному процессу. Кроме того, процесс Р1 через канал синхронизации К0 сообщает процессу Р2 идентификатор процесса Р3 с тем, чтобы процесс Р2 мог послать процессу Р3 сигнал. Порядок передачи данных в канал и структура подготавливаемых данных показана ниже.

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

7. Исходный процесс создает два программных информационных канала К1 и К2, канал синхронизации К0 и порождает два процесса Р1 и Р2, из которых один (Р1) порождает еще один процесс Р3. Назначение всех трех порожденных процессов - подготовка данных для обработки их основным процессом. Схему взаимодействия процессов и структуру подготавливаемых данных см. в варианте 6.

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

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

8. Исходный процесс создает программный канал К1 и порождает новый процесса Р1, а тот, в свою очередь, порождает еще один процесс Р2. Схема взаимодействия процессов показана ниже.

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

Порядок передачи данных в канал и структура подготавливаемых данных показана ниже.

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


 

Лабораторная работа N 6

МОДЕЛИРОВАНИЕ РАБОТЫ ИНТЕРПРЕТАТОРА

Цель работы

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

Содержание работы

1. Изучить программные средства наследования дескрипторов файлов (системные вызовы dup(), fcntl()).

2. Ознакомиться с заданием к лабораторной работе.

3. Выбрать набор системных вызовов, обеспечивающих решение задачи.

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

5. Отладить и оттестировать составленную программу, используя инструментарий ОС UNIX.

6. Защитить лабораторную работу, ответив на контрольные вопросы.

Методические указания к лабораторной работе

Системный вызов dup() обрабатывает свой единственный параметр как пользовательский дескриптор открытого файла и возвращает целое число, которое… Системный вызов fcntl(), имеющий формат int fcntl(int fd, char command, int argument),

Варианты заданий

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

1. who | wc -l & ps | wc -l

2. (cc pr1.c & cc pr2.c) && cat pr1.c pr2.c > prall.c

3. ls -al | grep "April" | wc -l > a.txt

4. ls -lisa | sort | wc -l > a.txt

5. tr -d "[0-9]" < a.txt | sort | uniq > b.txt

6. cat a.txt b.txt c.txt | tr -d "[a-i] | wc -w

7. tr -d "[p-z]" < a.txt |wc -c & wc -c < a.txt

8. ls -la > a.txt & ps > b.txt; cat a.txt b.txt | sort


 

Лабораторная работа N 7

МЕЖПРОЦЕССОЕ ВЗАИМОДЕЙСТВИЕ ПРОГРАММ

Цель работы

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

Содержание работы

1. Ознакомиться с заданием к лабораторной работе.

2. Ознакомиться с основными понятиями механизма IPC.

3. Изучить набор системных вызовов, обеспечивающих решение задачи.

4. Отладить и оттестировать составленную программу, используя инструментарий ОС UNIX.

5. Защитить лабораторную работу, ответив на контрольные вопросы.

Методические указания к лабораторной работе

Наиболее общим понятием IPC является ключ, хранимый в общесистемной таблице и обозначающий объект межпроцессного взаимодействия, доступный…

I. Семафоры.

Прототипы перечисленных системных вызовов описаны в файлах #include <sys/ipc.h> #include <sys/sem.h>

II. Очереди сообщений.

Прототипы перечисленных системных вызовов описаны в файлах #include <sys/ipc.h> #include <sys/msg.h>

III. Работа с разделяемой памятью.

Для работы с разделяемой памятью используются системные вызовы:

  • shmget() создает новый сегмент разделяемой памяти или находит существующий сегмент с тем же ключом;
  • shmat() подключает сегмент с указанным описателем к виртуальной памяти обращающегося процесса;
  • shmdt() отключает от виртуальной памяти ранее подключенный к ней сегмент с указанным виртуальным адресом начала;
  • shmctl() служит для управления разнообразными параметрами, связанными с существующим сегментом.

Прототипы перечисленных системных вызовов описаны в файлах

#include <sys/ipc.h>

#include <sys/shm.h>

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

Системный вызов

int shmid = shmget (key_t key, size_t size, int flag)

на основании параметра size определяет желаемый размер сегмента в байтах. Если в таблице разделяемой памяти находится элемент, содержащий заданный ключ, и права доступа не противоречат текущим характеристикам обращающегося процесса, то значением системного вызова является идентификатор существующего сегмента. В противном случае создается новый сегмент с размером не меньше установленного в системе минимального размера сегмента разделяемой памяти и не больше установленного максимального размера. Создание сегмента не означает немедленного выделения под него основной памяти и это действие откладывается до выполнения первого системного вызова подключения сегмента к виртуальной памяти некоторого процесса. Флаги IPC_CREAT и IPC_EXCL аналогичны рассмотренным выше.

Подключение сегмента к виртуальной памяти выполняется путем обращения к системному вызову shmat():

void *virtaddr = shmat(int shmid, void *daddr, int flags).

Параметр shmid - это ранее полученный идентификатор сегмента, а daddr - желаемый процессом виртуальный адрес, который должен соответствовать началу сегмента в виртуальной памяти. Значением системного вызова является фактический виртуальный адрес начала сегмента. Если значением daddr является NULL, ядро выбирает наиболее удобный виртуальный адрес начала сегмента. Флаги системного вызова shmat() приведены ниже в таблице.

Таблица

Флаги системного вызова shmat()

SHM_RDONLY ядро подключает участок памяти только для чтения;
SHM_RND определяет, если возможно, способ обработки ненулевого значения daddr.

Для отключения сегмента от виртуальной памяти используется системный вызов shmdt():

int shmdt(*daddr);

где daddr - это виртуальный адрес начала сегмента в виртуальной памяти, ранее полученный от системного вызова shmat().

Системный вызов shmctl:

int shmctl (int shmid, int command, struct shmid_ds *shm_stat);

по синтаксису и назначению системный вызов полностью аналогичен msgctl().

Варианты заданий

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

2. Четыре дочерних процесса выполняют некоторые циклы работ, передавая после окончания очередного цикла через один и тот же сегмент разделяемой памяти родительскому процессу очередную строку некоторого стихотворения, при этом первый процесс передает 1-ю, 5-ю, 9-ю и т.д. строки, второй - 2-ю, 6-ю, 10-ю и т.д. строки, третий - 3-ю, 7-ю, 11-ю и т.д. строки, четвертый - 4-ю, 8-ю, 12-ю и т.д. строки. Циклы работ процессов не сбалансированы по времени. Родительский процесс компонует из передаваемых фрагментов законченное стихотворение и выводит его по завершении работы всех процессов. Решить задачу с использованием аппарата семафоров.

3. Решить задачу из варианта 1 при условии, что передаваемые процессами тексты передаются родительскому процессу не через сегмент разделяемой памяти, а через очередь сообщений.

4. Решить задачу из варианта 2 при условии, что передаваемые процессами тексты передаются родительскому процессу не через сегмент разделяемой памяти, а через очередь сообщений.

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

6. Решить задачу из варианта 5 при условии, что должно быть обеспечено, чтобы не были одновременно запущены две программы от одного процесса.

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

8. Программа моделирует работу примитивной СУБД, хранящей единственную таблицу в оперативной памяти. Выполняя некоторые циклы работ, порожденные процессы посредством очереди сообщений передают родительскому процессу информацию об операции, которая должна быть выполнена: тип операции (вставка, модификация, удаление строки), номер строки, содержимое строки. Родительский процесс от имени процесса, выдавшего запрос, выполняет операцию.

Контрольные вопросы

1. В чем разница между двоичным и общим семафорами?

2. Чем отличаются P() и V()-операции от обычных операций увеличения и уменьшения на единицу?

3. Для чего служит набор программных средств IPC?

4. Для чего введены массовые операции над семафорами в ОС UNIX?

5. Каково назначение механизма очередей сообщений?

6. Какие операции над семафорами существуют в ОС UNIX?

7. Каково назначение системного вызова msgget()?

8. Какие условия должны быть выполнены для успешной постановки сообщения в очередь?

9. Как получить информацию о владельце и правах доступа очереди сообщений?

10. Каково назначение системного вызова shmget()?


 

Лабораторная работа N 8

КЛИЕНТ-СЕРВЕРНЫЕ ВЗАИМОДЕЙСТВИЯ ПОСРЕДСТВОМ СОКЕТОВ В РЕЖИМЕ TCP-СОЕДИНЕНИЯ

Цель работы

Практическое освоение механизма сокетов. Построении TCP-соединений для межпроцессного взаимодействия программ Клиента и Сервера в модели "Клиент-сервер".

Содержание работы

1. Ознакомиться с заданием к лабораторной работе.

2. Ознакомиться с понятиями сокета, моделей взаимодействия между процессами на основе сокетов, структурами данных и адресацией, используемых при работе с сокетами, основными шагами при организации взаимодействия процессов в сети в режиме TCP-соединения.

3. Выбрать и изучить набор системных вызовов, обеспечивающих решение задачи.

4. Для указанного варианта составить на языке Си две программы: программу сервера и программу клиента, реализующии требуемые действия.

5. Отладить и оттестировать составленную программу, используя инструментарий ОС UNIX.

6. Защитить лабораторную работу, ответив на контрольные вопросы.

Методические указания к лабораторной работе

Существует две модели взаимодействия между процессами в сети: модель соединений с протоколом TCP (Transmission Control Protocol), и модель дейтаграмм с протоколом UDP (User Datagram Protocol). В данной лабораторной работе используется первая из названных моделей.

Ниже приводятся основные шаги и необходимые системные вызовы для выполнения основных этапов при работе с сокетами в режиме TCP-соединения.

Адресация и создание сокета

struct sockaddr { u_char sa_family; /* Семейство адресов (домен) */ char sa_data[]; }; /* Адрес сокета */ Сокеты для связи через сеть, определяется в файле <netinet/in.h>:

Int socket (int domain, int type, int protocol);

Сетевые вызовы inet_addr() и inet_ntoa() выполняют преобразования IP-адреса из формата текстовой строки "x.y.z.t" в структуру типа in_addr… #include <arpa/inet.h> in_addr_t inet_addr (const char *ip_address);

Связывание

#include<sys/types.h> #include<sys/socket.h> int bind (int sockfd, const struct sockaddr *address, size_t add_len); sockfd - дескриптор файла сокета, …

Включение приема TCP-соединений

После выполнения связывания с адресом и перед тем, как какой-либо клиент сможет подключиться к созданному сокету, сервер должен включить прием соединений посредством системного вызова listen().

#include<sys/socket.h>

Int listen (int sockfd, int queue_size);

  • sockfd - дескриптор файла сокета, созданным с помощью вызова socket(),
  • queue_size - число запросов на соединение с сервером, которые могут стоять в очереди.

Данная операция выполняется только в программе сервера.

Прием запроса на установку TCP-соединения

#include<sys/types.h> #include<sys/socket.h> int accept (int sockfd, struct sockaddr *address, size_t *add_len); sockfd - дескриптор сокета, для которого…

Подключение клиента

#include<sys/types.h> #include<sys/socket.h> int connect (int csockfd, const struct sockaddr *address, size_t add_len); сsockfd - дескриптор файла сокета …

Пересылка данных

#include<sys/types.h> #include<sys/socket.h> ssize_t recv (int sockfd, void *buffer, size_t length, int flags);

Закрытие TCP-соединения

Закрываются сокеты так же, как и обычные дескрипторы файлового ввода/вывода, - при помощи системного вызова close(). Для сокета SOCK_STREAM ядро гарантирует, что все записанные в сокет данные будут переданы принимающему процессу.

Данные операции выполняются и в программе сервера и в программе клиента.

Варианты заданий

1. Организовать взаимодействие типа клиент - сервер. Клиент делает запрос серверу на выполнение какой-либо команды. Сервер выполняет эту команду и возвращает результаты клиенту.

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

3. Организовать взаимодействие типа клиент - сервер. Сервер при подключении к нему нового клиента высылает список IP-адресов уже подключенных клиентов. А остальным клиентам рассылается сообщение в виде IP-адреса о том, что подключился такой-то клиент.

4. Организовать взаимодействие типа клиент - сервер. Клиент при входе в связь с сервером должен ввести пароль. Разрешено сделать три попытки. Если пароль не верен, сервер должен блокировать IP-адрес клиента на 5 минут.

5. Организовать взаимодействие типа клиент - сервер. Клиенты подключается к первому серверу, и передают запрос на получение определенного файла. Если этого файла нет, сервер подключается ко второму серверу и ищет файл там. Затем либо найденный файл пересылается клиенту, либо высылается сообщение, то такого файла нет.

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

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

8. Эмуляция DNS сервера. Клиент подсоединяется к серверу, IP которого хранится в файле dns.url и делает ему запрос на подключение к серверу "Имя сервера". DNS-сервер имеет список, хранящийся в файле о соответствии имен серверов и IP-адресов. Если в списке нет "имени сервера" запрошенного клиентом, то сервер DNS подключается последовательно к другим серверам, хранящимся в файле dns.url и т.д. Если сервер не найден, клиенту возвращается соответствующее сообщение.

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

Контрольные вопросы

1. Какова структура IP-адреса?

2. Как поместить и извлечь IP-адрес из структуры сокета?

3. В чем разница между моделями TCP-соединения и дейтаграмм ?

4. Каковы основные шаги межпроцессоного взаимодействия в модели TCP-соединения?

5. Каковы основные шаги межпроцессоного взаимодействия в модели дейтаграмм?

6. Как занести в структуру сокета IP-адрес своего компьютера?

7. Каким образом извлечь информацию о клиенте после установки TCP-соединения?

8. Какова реакция системных вызовов посылки и приема сообщений в модели TCP-соединения при разрыве связи?

 

– Конец работы –

Используемые теги: управление, ресурсами, ОС, Unix0.072

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Управление ресурсами в ОС UNIX

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

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

ПБУ 6/01 Учет ОС. Порядок признания ОС в учете. Организация аналитического учета ОС. Первичная документация по учету и инвентаризации ОС
Определение и классификация нематериальных активов особенности их учета ПБУ Учет НМА Условия признания НМА в бухгалтерском учете... Порядок бухгалтерского учета нематериальных активов регулируется Положением по бухгалтерскому учету Учет...

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

Понятие управления. Виды управления. Управленческий труд и его особенности. МОДЕЛИ УПРАВЛЕНИЯ. ПОДХОДЫ К УПРАВЛЕНИЮ
Основатель Ф У Тейлор В г выпустил первую печатную работу которая... Основная идея используя замеры и наблюдения за работой исполнителей можно оптимизировать технологию выполнения работ...

ПБУ 6/01 Учет ОС. Порядок признания ОС в учете. Организация аналитического учета ОС. Первичная документация по учету и инвентаризации ОС
Определение и классификация нематериальных активов особенности их учета ПБУ Учет НМА Условия признания НМА в бухгалтерском учете... Порядок бухгалтерского учета нематериальных активов регулируется Положением по бухгалтерскому учету Учет...

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

Управление, его цель и задачи функции. Организация управления. Система управления в составе системы производства
Информационная система ИС это организационно упорядоченная взаимосвязанная совокупность средств и методов ИТ а также используемых для хранения... Российский ГОСТ РВ определяет информационную систему как... Основной задачей ИС является удовлетворение конкретных информационных потребностей в рамках конкретной предметной...

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

Лекция: Обзор функций ОС: управление памятью, файлами, процессами, сетями, командными интерпретаторами, сервисы ОС, системные вызовы
В лекции рассмотрены обзор функциональности ОС управление памятью файлами... Содержание Введение Управление основной памятью Управление файлами Управление вторичной памятью Система защиты ptotection Система...

Имеется 4 основные задачи управления: стабилизация; программное управление; слежение; оптимальное управление
Управление это такое входное воздействие или сигнал в результате которого система ведет себя заданным образом... Различают способа управления в зав сти от того на основе какой информации...

0.039
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам