- •Конспект лекций по курсу: «Сетевые информационные системы»
- •1. Сокеты
- •Вызовы для передачи и получения информации
- •Основные элементы Клиент-серверного Приложения.
- •Сетевые технологии
- •Адресация (требования)
- •3 Схемы адресации хостов
- •Модель взаимодействия открытых систем. Osi / iso
- •3 Типа канала :
- •Формула Найквиста
- •Преобразование фурье
Конспект лекций по курсу: «Сетевые информационные системы»
4 уровня:
физический;
канальный;
сетевой;
транспортный.
Семафоры
Семафор – счетчик (группа счетчиков), который принимает целочисленные значения. 0 – ресурс открыт, 1 – ресурс закрыт (или наоборот).
Семафор должен находиться в адресном пространстве ядра.
Адресное пространство ядра.
Оперативная проверка и изменение семафора должно быть реализовано в виде атомарного оператора.
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=
>0 - текущее значение с увеличением на эту величину: s=s+sem_op (безусловное изменение)
=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);
С ервер
С оздание ресурсов
О жидание клиента
П опытка блокировки памяти
Ч тение
Р азблокировка (Осв. Ресурсов)
З авершение
К лиент
Д оступ к ресурсам
Б локировка памяти
С ообщение о старте
З апись в память
Р азблокировка памяти
Б локировка
У даление
З авершение