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

Конспект лекций по курсу: «Сетевые информационные системы»

4 уровня:

  1. физический;

  2. канальный;

  3. сетевой;

  4. транспортный.

Семафоры

Семафор – счетчик (группа счетчиков), который принимает целочисленные значения. 0 – ресурс открыт, 1 – ресурс закрыт (или наоборот).

Семафор должен находиться в адресном пространстве ядра.

  1. Адресное пространство ядра.

  2. Оперативная проверка и изменение семафора должно быть реализовано в виде атомарного оператора.

int semget (key_t key, int nsems, int semflag);

key – ключ, который возвращает ftok.

nsems – количество семафоров в группе.

semflag – 0666 | IPC_CREATE - доступ всем на чтение и запись, если семафора нет, он будет создан.

key_t ftok(char* filename, char proj); - возвращает тип данных key_t.

semop – для манипуляции семафорами.

int semop (int semid, struct sembuf* semop, rite_t nops);

semop – указатель на структуру данных, указывающую какие операции над семафорами будут выполняться.

nops – количество операций.

struct sembuf

{

short sem_num; // номер

shortsem_op; // операции

short sem_flg; // флаги

};

Флаги

IPC_NOWAIT

SEM_UNDO - откат назад.

Операции

sem_op=

  1. >0 - текущее значение с увеличением на эту величину: s=s+sem_op (безусловное изменение)

  2. =0 – процесс ожидает пока семафор не обслужится ( wait - ожидание )

******************************************************************

Нет страницы 2

******************************************************************

server.c

shmget - для создания объекта из раздела памяти

key = Ftok(“Server.c”, ‘A’);

shmod = shmget (key, sizeof(Message),0666) | IPC_CREATE);

/*Получаем указатель на раздел памяти*/

msgptr = (Message*) shmat(shmid,0,0);

semid = semget(key,2,0666 | IPC_CREATE);

Операции над семафором:

semop(semid, &proc_wait[0],1);

После того, как клиент стартовал:

semop(semid, &mem _lock[0],2);

/* Комментарий

mem_lock – cтруктура для запирания памяти

2 – количество операций над семаформаи

*/

printf(“%s”,msgptr->buff);

semop(semid, &mem _unlock[0],1);

shmdt(msgptr);

exit(0);

client.c

key = ftok(“client.c”,’A’);

shmid = shmget(key,sizeof(Message),0);

msgptr = (Message*) shmat(shmid,0,0);

semid = semget(key,2,0666);

semop(semid, &mem _lock[0],2);

semop(semid, &&proc_start [0],1);

sprintf(msgptr->buff,”K8-361\n”);

semop(semid, &mem _unlock[0],1);

shmdt(msgptr);

shmctl(schmid,IPC_RMID,0);

semctl(semid, 0, IPC_RMID);

exit(0);

С ервер

  • С оздание ресурсов

  • О жидание клиента

  • П опытка блокировки памяти

  • Ч тение

  • Р азблокировка (Осв. Ресурсов)

  • З авершение

К лиент

  • Д оступ к ресурсам

  • Б локировка памяти

  • С ообщение о старте

  • З апись в память

  • Р азблокировка памяти

  • Б локировка

  • У даление

  • З авершение

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]