- •2 Теоретические вопросы кузнецов д.Б
- •1. Основные команды oc unix.
- •2.Команды для работы с текстовыми файлами
- •3.Тестирующие команды и работы с переменными
- •2. Поддержка многонитевого программирования.
- •3. Сокеты. Системные вызовы для работы с сокетами. Установка tcp-сединения.
- •4. Управление вводом-выводом, драйверы. Алгоритм обработки прерываний обращений к устройствам.
- •5. Диспетчеризация процессов. Алгоритмы планирования.
- •6. Взаимодействие процессов. Сигналы, именованные и неименованные каналы, ipc, сокеты.
- •7. Виды файловых систем. Типовые структуры каталогов в ос unix и Windows.
- •8. Средства разработки программ. Компилятор, средства разработки и отладки программ.
- •9. Системные вызовы для управления файлами. Открытие, чтение, запись, позиционирование, управление дескрипторами.
- •10. Назначение, функции, классификация операционных систем.
- •11. Пользовательский интерфейс операционной среды. Shell. Режимы командной строки и интерпретации программ.
- •12. Архитектура операционных систем. Понятие ядра и процесса. Состояния и контекст процесса.
- •13. Управление памятью в многозадачной операционной системе. Свопинг и подкачка по запросу.
- •14. Трансляторы. Структура компилятора. Лексический, синтаксический и семантический анализ.
- •15. Стандартный ввод-вывод. Переопределение стандартного ввода-вывода в Shell. Выполнение команд в конвеере.
6. Взаимодействие процессов. Сигналы, именованные и неименованные каналы, ipc, сокеты.
Резидентная в RAM часть OS UNIX называется ядром. Программа ядра оформлена как выполняемый файл, который хранится в корневом каталоге корневой файловой системы OS UNIX и имеет имя, однозначно выделяющее его среди других файлов. Все работы вне ядра оформлены в виде процессов выполнения системных и прикладных программ. Под процессом понимается единица вычислительной работы, потребляющая ресурсы, предоставляемые ядром, для обработки системных и прикладных программ, которые оформлены как командные или выполняемые файлы на внешнем устройстве. Процессы могут взаимодействовать между собой посредством программных каналов или сигналов и обращаться к подпрограммам ядра через системные вызовы.
Программный канал есть средство коммуникации процессов, которое можно рассматривать как программно реализованную линию связи для передачи данных между двумя или более процессами. Каналы реализованы в виде снабженных специальным механизмом управления буферов ввода-вывода, которые трактуются как псевдо-файлы.
Каналы принято использовать следующим образом. Один процесс направляет (записывает) данные в канал. Другой процесс получает (читает) данные из канала.
Сигналы генерируется, когда происходят определенные события, которые вызывают посылку сигнала. Сигнальные события могут быть вызваны программными и аппаратными причинами, прерыванием от терминала, результатом измерения времени и выполнением других процессов. Если инициатор сигнала ядро, другой процесс или интерактивные действия пользователя, то сигнал считается асинхронным по отношению к процессу-приемнику сигнала. Когда сигнал инициируется выполнением инструкций процесса-приемника, сигнал считается синхронным.
Каждый сигнал имеет уникальный номер, однозначно определяющий событие, которым он вызван.
Aсинхронные терминальные сигналы. SIGHUP - разрыв связи с терминалом; SIGINT - прерывание от терминала, генерируется при нажатии Ctrl-C; SIGQUIT - сигнал выхода, генерируется при нажатии Ctrl-\.
Синхронные сигналы ловушки SIGILL - попытка выполнить нелегальную машинную инструкцию; SIGFPE - десятичное переполнение или деление на 0; SIGBUS - ошибка шины при неверной косвенной адресации; SIGSEGV - нарушение границ сегментов адресного пространства; SIGSYS - неверный параметр при обращении к системному вызову; SIGPIPE - разрыв программного канала.
Сигнал от таймера реального времени SIGALRM - генерируется ядром при истечении интервала, заданного системным вызовом alarm.
Сигналы от событий в других процессах или системе SIGKILL - безусловное завершение процесса; SIGTERM - условное завершение процесса; SIGUSR1 - сигнал, определенный пользователем; SIGUSR2 - сигнал, определенный пользователем; SIGCONT - возобновление выполнения приостановленного процесса.
Пакет IPC (interprocess communication) включает в себя три механизма. Механизм сообщений дает процессам возможность посылать другим процессам потоки сформатированных данных, механизм разделения памяти позволяет процессам совместно использовать отдельные части виртуального адресного пространства, а семафоры - синхронизировать свое выполнение с выполнением параллельных процессов. Несмотря на то, что они реализуются в виде отдельных блоков, им присущи общие свойства.
С каждым механизмом связана таблица, в записях которой описываются все его детали.
В каждой записи содержится числовой ключ (key), который представляет собой идентификатор записи, выбранный пользователем.
В каждом механизме имеется системная функция типа "get", используемая для создания новой или поиска существующей записи; параметрами функции являются идентификатор записи и различные флаги (flag). Ядро ведет поиск записи по ее идентификатору в соответствующей таблице.
В каждом механизме ядро использует следующую формулу для поиска по дескриптору указателя на запись в таблице структур данных: указатель = значение дескриптора по модулю от числа записей в таблице
Каждая запись имеет некую структуру данных, описывающую права доступа к ней.
В каждой записи имеется другая информация, описывающая состояние записи.
В каждом механизме имеется системная функция типа "control", запрашивающая информацию о состоянии записи, изменяющая эту информацию или удаляющая запись из системы.
Сообщения
С сообщениями работают четыре системных функции: msgget, которая возвращает (и в некоторых случаях создает) дескриптор сообщения, определяющий очередь сообщений и используемый другими системными функциями, msgctl, которая устанавливает и возвращает связанные с дескриптором сообщений параметры или удаляет дескрипторы, msgsnd, которая посылает сообщение, и msgrcv, которая получает сообщение.
Синтаксис вызова системной функции msgget:
msgqid = msgget(key,flag);
где msgqid - возвращаемый функцией дескриптор, а key и flag имеют ту же семантику, что и в системной функции типа "get".
Для посылки сообщения процесс использует системную функцию msgsnd:
msgsnd(msgqid,msg,count,flag);
где msgqid - дескриптор очереди сообщений, обычно возвращаемый функцией msgget, msg - указатель на структуру, состоящую из типа в виде назначаемого пользователем целого числа и массива символов, count - размер информационного массива, flag - действие, предпринимаемое ядром в случае переполнения внутреннего буферного пространства.
Сокеты – универсальные методы взаимодействия процессов на основе использования многоуровневых сетевых протоколов. Сокеты предназначены для работы по сети: блокируют драйверы, для удобства выполнения локальных подпрограмм.
Сокеты можно разбить на 2 типа:
1. Виртуальный канал - обеспечивает надежную доставку данных с сохранением исходной последовательности.
2. Дейтаграммы - не гарантируют надежную доставку с сохранением уникальности и последовательности, но они более экономны в смысле использования ресурсов, поскольку для них не требуются сложные установочные операции; таким образом, дейтаграммы полезны в отдельных случаях взаимодействия.
