Схема переходов процесса из состояния в состояние 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Схема переходов процесса из состояния в состояние



 
 

 


1) Процесс выполняется в режиме задач(польз. режим)

2) в режиме ядра

3) Процесс не выполняется,но готов к запуску(в оп.памяти)

4) Процесс приостановлен(в оп.памяти)

5) процесс готов к запуску(на диске)

6) процесс приостановлен(на диске)

7) Процесс зарезервирован

8) Процесс вновь создан

9) Процесс вызывает exit

 

Системные вызовы getpid, getppid

pid_t getpid(void)

pid_t getppid(void)

Возвращают идентификаторы текущего(PID) и родительского(PPID) процессов соответственно

 

Системный вызов times. Ядерная и пользовательские фазы процессов.

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

struct tms{

clock_t tms_utime; //время процесса

clock_t tms_stime; //ядерное время процесса

clock_t tms_сutime; //время детей

clock_t tms_сstime; //ядерное время детей

};

Программные каналы. FIFO-файлы.

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

Аббревиатура FIFO расшифровывается как «first in, first out» — «первым вошел, первым вышел», то есть эти каналы работают как очереди. Именованные каналы в Unix функционируют подобно неименованным — они позволяют передавать данные только в одну сторону. Однако в отличие от программных каналов каждому каналу FIFO сопоставляется полное имя в файловой системе, что позволяет двум неродственным процессам обратиться к одному и тому же FIFO.

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

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

mknode(nameFile, S_IFIFO | 0666, 0) – создает именованный программный канал.

 

Очередь сообщений. Последовательность системных вызовов.

Очередь сообщений - это область памяти, доступная для чтения\записи нескольким процесса. В адресном пространстве ядра имеется таблица очередей сообщений, в которой отслеживаются все очереди сообщений, создаваемые в системе. Для работы с очередью сообщений определены функции: msgget, msgsnd, msgrcv, msgctl.

Параметры функции msgget.

функция msgget- для работы с очередью сообщений

Прототип Функции msgget выглядит следующим образом:

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/message.h>

int msgget (key_t key, int flag);

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

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

Если аргумент flag имеет нулевое значение очереди сообщений, идентификатор которой совпадал бы с заданным значением key, то вызов прерывается; в противном случае возвращается дескриптор этой очереди. Если процессу необходимо создать новую очередь (когда нет ни одной очереди), то значение аргумента flag должно содержать макрос IPC_CREAT, а также права на чтение сообщения из новой очереди и запись в неё (для. владельца, группы и прочих).

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

Параметры функции msgsnd.

Прототип функции msgsnd выглядит следующим образом:
#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>

int msgsnd(int msgfd, const void*msgPtr, int len, int flag)

Эта функция передает сообщение (на которое указывает msgPtr) в очередь, обозначенную дескриптором msgfd.

Значение msgfd определяется возвращаемым значащем функции msgget.

Фактическое значение аргумента msgPtr — указателе на объект, который содержит реальный текст и тип сообщения, подлежащего передаче

Значение аргумента 1еn —это размер (в байтах поля mtext объекта, на который указывает аргумент msgPtr.

Аргумент flag может иметь значение 0. Это означает, что при необходимости процесс можно блокировать до тех пор, пока данная функция не будет успешно выполнена. Бела этот аргумент имеет значение IPC_NOWAIT, то при блокировании процесса выполнение функция прерывается. В случае успешного выполнения возвращается 0, а в случае неудачи -1.

Параметры функции msgrcv.

Прототип функции msgrcv выглядит так:

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>

int msgrcv (int msgfd, const void* msgPtr, int len, int mtype, int flag);

Эта функция принимает сообщение типа mtype из очереди сообщений, обозначенной дескриптором msgfd. Полученное сообщение хранится в объекте, на который указывает аргумент msgPtr. Значение аргумента len — это максимальный размер (в байтах) текста сообшения, которое может быть принято данным вызовом.

Значение msgfd берется из вызова функции msgget

Фактическое значение аргумента msgPtr - указатель на объект, имеющий структуру данных, похожую на struct msgbuf.

Значение mtype.— это тип сообщения, подлежащего приему. Ниже перечислены возможные значения данного аргумента и их смысл.

Значение mtype

Положительное целое Принять самое старое сообщение указанного типа

Отрицательное целое Принять сообщение, тип которого меньше абсолютного значения, mtype или равен ему

Если таких сообщение в очереди несколько, принять то, которое является самым старым и имеет наименьшее значение типа

Аргумент flag может иметь значение 0. Это означает, что провесе можно блокировать, если ни одно сообщение в очереди не удовлетворяет критериям выбора, заданным аргументом mtype. Если в очереди есть сообщение, которое удовлетворяет этим критериям, но превышает величину len, то функция возвращает код неудачного завершения.

Если процесс указал в аргументе flag значение IPC_NOWAIT, то вызов будет неблокирующим. Кроме того, если в названном аргументе установлен флаг MSG_NOERROR, то сообщение, находящееся в очереди, можно читать (даже если его размер превышает len байтов). Функция возвращает вызывающему процессу первые 1еи байтов текста сообщения, а остальные данные отбрасывает.

Функция msgrcv возвращает количество байтов объекта, на который указывает аргумент msgPtr, или -1 (в случае неудачи).

Значение cmd Смысл
IPC_STAT Копировать управляющие параметры очереди в объект, указанный аргументом mbufPtr
IPC_SET Заменить управляющие параметры очереди параметрами, содержащимися в объекте, на который указывает аргумент mbufPtr. Чтобы выполнить эту операцию, вызывающий процесс должен иметь права либо привилегированного пользователя, либо создателя или назначенного владельца очереди. С помощью этого вызова можно устанавливать UID владельца очереди и идентификатор его группы, права доступа и (или) уменьшать лимит msg_qhyte очереди
IPC_RMID Удалить очередь из системы. Чтобы выполнить эту операцию, вызывающий процесс должен иметь права либо привилегированного пользователя, либо создателя или назначенного владельца очереди

Параметры функции msgctl.

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

Значение аргумента msgfd берется из вызова функции msgget.

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

В случае успешного выполнения возвращается 0, в случае неудачи -1.

 

 



Поделиться:


Последнее изменение этой страницы: 2017-02-06; просмотров: 163; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.23.201.145 (0.007 с.)