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

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

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

Методические указания к лабораторной работе - раздел Менеджмент, Управление ресурсами в ОС UNIX Для Порождения Нового Процесса (Процесс-Потомок) Используется Системный Вызов...

Для порождения нового процесса (процесс-потомок) используется системный вызов fork(). Формат вызова:

int fork()

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

Ожидание завершения процесса-потомка родительским процессом выполняется с помощью системного вызова wait()

int wait(int *status)

В результате осуществления процессом системного вызова wait() функционирование процесса приостанавливается до момента завершения порожденного им процесса-потомка. По завершении процесса-потомка процесс-предок пробуждается и в качестве возвращаемого значения системного вызова wait() получает идентификатор завершившегося процесса-потомка, что позволяет процессу-предку определить, какой из его процессов-потомков завершился (если он имел более одного процесса-потомка). Аргумент системного вызова wait() представляет собой указатель на целочисленную переменную status, которая после завершения выполнения этого системного вызова будет содержать в старшем байте код завершения процесса-потомка, установленный последним в качестве системного вызова exit(), а в младшем - индикатор причины завершения процесса-потомка.

Формат системного вызова exit(), предназначенного для завершения функционирования процесса:

void exit(int status)

Аргумент status является статусом завершения, который передается отцу процесса, если он выполнял системный вызов wait().

Для получения собственного идентификатора процесса используется системный вызов getpid(), а для получения идентификатора процесса-отца - системный вызов getppid():

int getpid()

int getppid()

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

int setpgrp()

int getpgrp()

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

execl(name,arg0,arg1,...,argn,0)

char *name, *arg0, *arg1,...,*argn;

execv(name,argv)

char *name, *argv[];

execle(name,arg0,arg1,...,argn,0,envp)

char *name, *arg0, *arg1,...,*argn,*envp[];

execve(name,argv,envp)

char *name, *arg[],*envp[];

Сигналы - это программное средство, с помощью которого может быть прервано функционирование процесса в ОС UNIX. Механизм сигналов позволяет процессам реагировать на различные события, которые могут произойти в ходе функционирования процесса внутри него самого или во внешнем мире. Каждому сигналу ставятся в соответствие номер сигнала и строковая константа, используемая для осмысленной идентификации сигнала. Эта взаимосвязь отображена в файле описаний <signal.h>. Для посылки сигнала используется системный вызов, имеющий формат

void kill(int pid, int sig)

В результате осуществления такого системного вызова сигнал, специфицированный аргументом sig, будет послан процессу, который имеет идентификатор pid. Если pid не превосходит 1, сигнал будет послан целой группе процессов.

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

int (*signal(sig, func) ()

int sig; int (*func)();

Реакцией процесса, осуществившего системный вызов signal() с аргументом func, при получении сигнала sig будет вызов функции func().

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

void pause()

Системный вызов alarm(n) обеспечивает посылку процессу сигнала SIGALARM через n секунд.

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

int fd[2];

pipe(fd)

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

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

Эта тема принадлежит разделу:

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

Управление ресурсами в ОС UNIX... ВВЕДЕНИЕ... Одной из задач любой операционной системы ОС является поддержание надежного и эффективного механизма управления...

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

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

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

Все темы данного раздела:

Методические указания к лабораторной работе
Обычно в ОС UNIX доступны несколько интерпретаторов. Наиболее распространены Bourne-shell (или просто - shell), C-shell, Korn-shell. В идейном плане все эти интерпретаторы близки и в дальнейшем реч

Контpольные вопpосы
21. Что такое внутренние и внешние команды Shell-интерпретатора? Приведите примеры внутренних команд. 22. Какие существуют средства группирования команд? Приведите примеры использования.

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

Функции для работы с файловой системой
Возвращают дескриптор файла Преобразуют имя в описатель Назначают inode Работают с атрибутами Ввод/вывод из файла

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

Контpольные вопpосы
1. Какова структура описателей файлов, таблицы файлов, таблицы открытых файлов процесса? 2. Какова цепочка соответствия дескриптора файла, открытого процессом, и файлом на диске?

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

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

Методические указания к лабораторной работе
Механизм IPC (Inter-Process Communication Facilities) включает: средства, обеспечивающие возможность синхронизации процессов при доступе к совместно используемым ресурсам (семафоры -

I. Семафоры.
Для работы с семафорами поддерживаются три системных вызова: semget() для создания и получения доступа к набору семафоров; semop() для манипулирования значениями семафоров

II. Очереди сообщений.
Для обеспечения возможности обмена сообщениями между процессами механизм очередей поддерживается следующими системными вызовами: msgget() для образования новой очереди сообщений или

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

Int socket (int domain, int type, int protocol);
Параметр domain - домен связи, в котором будет использоваться сокет (значение AF_INET - для домена Internet (соединение через сеть), AF_UNIX

Связывание
Системный вызов bind() связывает сетевой адрес компьютера с идентификатором сокета. #include<sys/types.h> #include<sys/socket.h&

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

Подключение клиента
Для выполнения запроса на подключение к серверному процессу клиент использует системный вызов connect(). #include<sys/types.h> #inc

Пересылка данных
Для сокетов типа SOCK_STREAM дескрипторы сокетов, полученные сервером посредством вызова accept() и клиентом с помощью вызова socked(), могут испо

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