Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций 2009.doc
Скачиваний:
41
Добавлен:
13.11.2019
Размер:
2.3 Mб
Скачать

0,0,0, //Ожидать обнуления семафора

0,1,0 // Затем увеличить значение семафора на 1};

Система производит вызов semop (semid, &sop_lock[0], 2); , обеспечивающий атомарное выполнение двух операций: 1) ожидание доступности ресурса, 2) запирание ресурса.

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

static struct sembuf sop_unlock[1]={

0, -1, 0 // обнулить значение семафора};

Система производит вызов semop (semid, &sop_unlock[0], 1);, который уменьшит значение семафора на 1, и он станет равным 0, что соответствует освобождению ресурса. Если какой- либо из процессов ожидает ресурса, он будет «разбужен» системой, и сможет в свою очередь запереть ресурс и работать с ним.

Пример №2: 1 – разрешающее значение; 0– запрещающее

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

static struct sembuf sop_lock[1]={

0,-1,0 // ожидать разрешающего сигнала (1)

//затем обнулить семафор};

Система производит вызов semop (semid, &sop_lock[0], 1); , обеспечивающий запирание ресурса.

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

static struct sembuf sop_unlock[1]={

0,1, 0 // Увеличитьзначение семафора на 1};

Система производит вызов semop (semid, &sop_unlock[0], 1);

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

Функция semctl

#include<sys/types.h>

#include<sys/ips.h>

#include<sys/sem.h>

int semctl(int semfd, int num, int cmd,union semun arg);

С помощью этого API можно изменять управляющие параметры набора семафоров, указанного аргументом semfd, а также удаляет семафор.

semfd –это дескриптор набора семафоров, который берется из вызова функции semget.

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

Аргумент arg – это объект типа union, который может использоваться для задания или выборки управляющих параметров одного или нескольких семафоров в соответствии с аргументом cmd. Тип данных union semun определяется в заголовке <sys/sem.h>:

union semun{

int val;// значение семафора

struct semid_ds *mbuf;// управляющие параметры набора

ushort *array;//массив значений семафора}

рекомендованная литература

  1. Ахо А. Дж Удльман Компиляторы: принципы, технологии инструменты – К.: «Вильямс» 2008 – 750 с

  2. Круз И., Талер Л. Основы MAPI – М. Русская редакция, 1997

  3. Олифер В.Г., Олифер Н.А. Сетевые операционные системы

  4. Рихтер Дж. Windows для профессионалов – К.: Вильямс, 2007. – 702с.

  5. Рихтер Дж. программирование серверных приложений для Microsoft Windows 2000 – М.: Русская редакция, 2001 – 592 с.

  6. Роджерсон Д. Основы COM – К.: Вильямс, 2008

  7. Романец Ю. В., Тимофеев П.А., Шаньгин В.Ф. Защита информации в компьютерных системах и сетях. – М.: Радио и связь, 2001 г. – 376 с.

  8. Рочкинд Марк Дж. Программирование для UNIX. Наиболее полное руководство К.: BHV 2007 – 704 с.

  9. Соколов А.И., Шаньгин В.Ф. Защита информации в распределённых корпоративных сетях и системах – М.: ДМК, 2002 . – 656 с.

  10. Солдатов В.П. Программирование драйверов Windows – М.: Бином, 2004

  11. Столлингс В. Современные операционные системы 2е изд – М.: Питер 2004 г.

  12. Таненбаум Э. Современные операционные системы 2-е изд – М.: Питер, 2002 г. . - 1040с

  13. Теренс Чан Системное программирование на С++ для UNIX К.: Изд. группа "BHV" .- 1997 . – 589 с.

1 Далее в конспекте термин "таблица страниц" (написанный строчными буквами) означает любую страницу, хранящую отображение линейных адресов в физические. В то же время термин "Таблица Страниц" (с заглавных букв) означает страницу на последнем уровне иерархии страничных таблиц.