Андрей Робачевский - Операционная система UNIX

Тут можно читать онлайн Андрей Робачевский - Операционная система UNIX - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство BHV - Санкт-Петербург, год 1997. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Операционная система UNIX
  • Автор:
  • Жанр:
  • Издательство:
    BHV - Санкт-Петербург
  • Год:
    1997
  • Город:
    Санкт-Петербург
  • ISBN:
    5-7791-0057-8
  • Рейтинг:
    4.63/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Андрей Робачевский - Операционная система UNIX краткое содержание

Операционная система UNIX - описание и краткое содержание, автор Андрей Робачевский, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).

Для широкого круга пользователей

Операционная система UNIX - читать онлайн бесплатно полную версию (весь текст целиком)

Операционная система UNIX - читать книгу онлайн бесплатно, автор Андрей Робачевский
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#define PERM 0666

/* Структура данных в разделяемой памяти */

typedef struct mem_msg {

int segment;

char buff[MAXBUFF];

} Message;

/* Ожидание начала выполнения клиента */

static struct sembuf proc_wait[1] = { 1, -1, 0 };

/* Уведомление сервера о том, что клиент начал работу */

static struct sembuf proc_start[1] = {

1, 1, 0

};

/* Блокирование разделяемой памяти */

static struct sembuf mem_lock[2] = {

0, 0, 0,

0, 1, 0

};

/* Освобождение ресурса */

static struct sembuf mem_unlock[1] = {

0, -1, 0

};

Сервер:

#include

#include

#include

#include

#include "shmem.h"

main() {

Message* msgptr;

key_t key;

int shmid, semid;

/* Получим ключ, Один и тот же ключ можно использовать как

для семафора, так и для разделяемой памяти */

if ((key = ftok("server", 'A')) < 0) {

printf("Невозможно получить ключ\n");

exit(1);

}

/* Создадим область разделяемой памяти */

if ((shmid = shmget(key, sizeof(Message),

PERM | IPC_CREAT)) < 0) {

printf("Невозможно создать область\n");

exit(1);

}

/* Присоединим ее */

if ((msgptr = (Message*)shmat(shmid, 0, 0)) < 0) {

printf("Ошибка присоединения\n");

exit(1);

}

/* Создадим группу из двух семафоров:

Первый семафор - для синхронизации работы

с разделяемой памятью. Второй семафор -

для синхронизации выполнения процессов */

if ((semid = semget(key, 2, PERM | IPC_CREAT)) < 0) {

printf("Невозможно создать семафор\n");

exit(1);

}

/* Ждем, пока клиент начнет работу и заблокирует разделяемую память */

if (semop(semid, &proc_wait[0], 1) < 0) {

printf("Невозможно выполнить операции\n");

exit(1);

}

/* Ждем, пока клиент закончит запись в разделяемую память

и освободит ее. После этого заблокируем ее */

if (semop(semid, &mem_lock[0], 2) < 0) {

printf("Невозможно выполнить операцию\n");

exit(1);

}

/* Выведем сообщение на терминал */

printf(%s, msgptr->buff);

/* Освободим разделяемую память */

if (semop(semid, &mem_unlock[0], 1) < 0 {

printf("Невозможно выполнить операцию\n");

exit(1);

}

/* Отключимся от области */

if (shmdt(msgptr) < 0) {

printf("Ошибка отключения\n");

exit(1);

}

/* Всю остальную работу по удалению объектов сделает клиент */

exit(0);

}

Клиент:

#include

#include

#include

#include

#include "shmem.h"

main() {

Message *msgptr;

key_t key;

int shmid, semid;

/* Получим ключ. Один и тот же ключ можно использовать как

для семафора, так и для разделяемой памяти */

if ((key = ftok("server", 'A')) < 0) {

printf("Невозможно получить ключ\n");

exit(1);

}

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

if ((shmid = shmget(key, sizeof(Message), 0)) < 0) {

printf("Ошибка доступа\n");

exit(1);

}

/* Присоединим ее */

if ((msgptr = (Message*)shmat(shmid, 0, 0)) < 0) {

prinf("Ошибка присоединения\n);

exit(1);

}

/* Получим доступ к семафору */

if ((semid = semget(key, 2, PERM)) < 0) {

printf("Ошибка доступа\n");

exit(1);

}

/* Заблокируем разделяемую память */

if (semop(semid, &mem_lock[0], 2) < 0) {

printf("Невозможно выполнить операцию\n");

exit(1);

}

/* Уведомим сервер о начале работы */

if (semop(semid, &proc_start[0], 1) < 0) {

printf("Невозможно выполнить операцию\n");

exit(1);

}

/* Запишем в разделяемую память сообщение */

sprintf(msgptr->buff, "Здравствуй, Мир!\n");

/* Освободим разделяемую память */

if (semop(semid, &mem_unlock[0], 1) < 0) {

printf("Невозможно выполнить операцию\n");

exit(1);

}

/* Ждем, пока сервер в свою очередь не освободит

разделяемую память */

if (semop(semid, &mem_lock[0], 2) < 0) {

printf(Невозможно выполнить операцию\n");

exit(1);

}

/* Отключимся от области */

if (shmdt(msgptr) < 0) {

printf("Ошибка отключения\n");

exit(1);

}

/* Удалим созданные объекты IPC */

if (shmctl(shmid, IPC_RMID, 0) < 0) {

printf("Невозможно удалить область\n");

exit(1);

}

if (semctl(semid, 0, IPC_RMID) < 0) {

printf("Невозможно удалить семафор\n");

exit(1);

}

exit(0);

}

Межпроцессное взаимодействие в BSD UNIX. Сокеты

Разработчики системы межпроцессного взаимодействия BSD UNIX руководствовались рядом соображений:

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

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

Во-вторых, коммуникационные характеристики взаимодействия должны быть доступны процессам в некоторой унифицированной форме. Другими словами, приложение должно иметь возможность затребовать определенный тип связи, например, основанный на виртуальном канале (virtual circuit) или датаграммах (datagram), причем эти типы должны быть согласованы для всех коммуникационных доменов. Все сокеты условно можно разделить на несколько типов, в зависимости от предоставляемых коммуникационных характеристик. Полный набор этих характеристик включает:

□ Упорядоченную доставку данных

□ Отсутствие дублирования данных

□ Надежную доставку данных

□ Сохранение границ сообщений

□ Поддержку передачи экстренных сообщений

□ Предварительное установление соединения

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Андрей Робачевский читать все книги автора по порядку

Андрей Робачевский - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Операционная система UNIX отзывы


Отзывы читателей о книге Операционная система UNIX, автор: Андрей Робачевский. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x