
- •Билет 1 – (4) 1. Основы ос Unix, возможности, стандартизация
- •1.1 Отличительные черты ос unix
- •1.2 Основы архитектуры операционной системы unix
- •1.3 Ядро системы
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 4 (1, 16, 18) – 146
- •3. Последовательность действий по преобразованию адреса в защищенном режиме:
- •1.8 Обработка ошибок
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 2 (2, 6, 15, 27) – 143
- •3. Особенности современных операционных систем (2, 28) – 122
- •Характеристики современных ос
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 3 (3, 28) – 144
- •3. Концепция слоистой операционной системы и системы на основе микроядра.
- •6.Подход на основе микроядра хорошо функционирует среди объектно-ориентированных ос (object-oriented operating system).
- •Билет 4
- •1. Владельцы файлов. Права доступа к файлам. Атрибуты файлов (4, 18) – 23
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 1 (4, 26) – 142
- •3. Функции микроядра (4, 12, 15, 27) – 126
- •1. Неименованные каналы в ос unix (5) – 77
- •2. Взаимодействие процессов. Задача взаимного исключения. Алгоритм Деккера (5) – 147
- •3. Понятие процесса, модели процессов (5) – 132
- •1. Метаданные файлов в ос unix (7) – 36
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 2 (2, 6, 15, 27) – 143
- •3. Описание процесса, таблица процесса (6) – 136
- •1. Процессы в ос unix. Типы процессов. (7, 23) – 56
- •2. Синхронизирующие примитивы. Решение задачи взаимного исключения с использованием семафоров (7, 8, 19, 20) - 152
- •3. Принципы построения ос (7, 19, 26) – 128
- •2. Синхронизирующие примитивы. Решение задачи взаимного исключения с использованием семафоров (7, 8, 19, 20) - 152
- •3. Концепция потока, как составной части процесса (8) – 139
- •1. Разработка программ в ос unix. Обработка ошибок, переменные окружения (9) – 11
- •2. Применение двоичных семафоров для решения задачи «производитель» - «потребитель» (буфер неограниченный) (9, 21)
- •3. Концепция виртуализации (9, 17)
- •1. Файлы, отображаемые в память (10) – 33
- •2. Применение семафоров для решения задачи «производитель» - «потребитель» с неограниченным буфером. Решение «спящий парикмахер». (10, 22) – 155
- •3. Подсистема управления памятью, требования, предъявляемые к ней (10)
- •Билет 11
- •1. Процессы в ос unix. Порождение процесса (11, 25) – 57
- •2. Применение общих семафоров для решения задачи «производитель-потребитель» с ограниченным буфером (11, 23) – 157
- •3. Виртуальная память. Задачи управления виртуальной памятью (11, 25)
- •1. Сигналы в ос unix. Их назначение и обработка (12) – 70
- •2. Взаимодействие процессов через переменные состояния. Пример приоритетного правила (12) – 157
- •3. Функции микроядра (4, 12, 15, 27) – 126
- •1. Функции для работы с сигналами (13) – 70
- •2. Проблема тупиков. Алгоритм банкира (13)
- •3.Задача замещения
- •1. Файлы и файловая система в ос unix. Права доступа (3, 14) – 18
- •2. Задача взаимного исключения. Алгоритм Петерсона (14) – 148
- •3. Схемы распределения памяти
- •1. Файловая система в ос unix ext2 (15) – 51
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 2 (2, 6, 15, 27) – 143
- •3. Функции микроядра (4, 12, 15, 27) – 126
- •Билет 16
- •1. Каналы в ос unix (16) – 80
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 4 (1, 16, 18) – 146
- •3. Организация защиты в процессорах ia32
- •1. Процессы в ос unix, системные вызовы wait, exit (17) – 60, 63
- •2. Монитороподобные средства синхронизации для решения задачи взаимного исключения (17) – 160
- •3. Концепция виртуализации (9, 17)
- •1. Владельцы файлов. Права доступа к файлам. Атрибуты файлов (4, 18) – 23
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 4 (1, 16, 18) – 146
- •3. Схемы распределения памяти (18, 24)
- •1. Взаимодействие процессов в ос unix, очереди сообщений (19) – 83
- •2. Синхронизирующие примитивы. Решение задачи взаимного исключения с использованием семафоров (7, 8, 19, 20) - 152
- •3. Принципы построения ос (7, 19, 26) – 128
- •1 Взаимодействие процессов в ос unix с применением семафоров (20) – 93
- •2. Синхронизирующие примитивы. Решение задачи взаимного исключения с использованием семафоров (7, 8, 19, 20) - 152
- •Механизмы поддержки многозадачности в процессорах ia32 (20)
- •1. Работа с файлами в ос unix. Системные вызовы (21) – 25
- •2. Применение двоичных семафоров для решения задачи «производитель» - «потребитель» (буфер неограниченный) (9, 21)
- •3. Страничная организация памяти в процессоре ia32
- •Билет 22
- •1. Взаимодействие процессов в ос unix. Разделяемая память (22) – 100
- •2. Применение семафоров для решения задачи «производитель» - «потребитель» с неограниченным буфером. Решение «спящий парикмахер». (10, 22) – 155
- •3. Организация защиты в процессорах ia32
- •Билет 23
- •1. Процессы в ос unix. Типы процессов. (7, 23) – 56
- •2. Применение общих семафоров для решения задачи «производитель-потребитель» с ограниченным буфером (11, 23) – 157
- •3.Задача замещения
- •1. Понятие потока в ос unix. Создание потока, завершение потока (24) – 106
- •2. Синхронизирующие примитивы. Решение задачи взаимного исключения с использованием семафоров (7, 8, 19, 20, 24) - 152
- •3. Схемы распределения памяти (18, 24)
- •1. Процессы в ос unix. Порождение процесса (11, 25) – 57
- •2. Задача взаимного исключения. Алгоритм Петерсона
- •3. Виртуальная память. Задачи управления виртуальной памятью (11, 25)
- •Билет 26
- •1. Создание потока
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 1 (4, 26) – 142
- •3. Принципы построения ос (7, 19, 26) – 128
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 2 (2, 6, 15, 27) – 143
- •3. Функции микроядра (4, 12, 15, 27) – 126
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 3 (3, 28) – 144
- •3. Особенности современных операционных систем (2, 28) – 122
Механизмы поддержки многозадачности в процессорах ia32 (20)
Под задачей понимается программа или группа связанных программ, которая выполняется в многозадачном (мультипрограммном) режиме и её выполнение не должно подвергаться воздействиям извне (в смысле другими программами), и в свою очередь, она не должна оказывать влияния на действия, выполняемые другими программами. В процессорах Intel архитектуры задача определяется как совокупность кода и данных, которым назначен сегмент состояния задачи, т.е. сегмент состояния задачи является эквивалентным контекстной памяти, в которой хранится информация о задачи, когда она не выполняется и откуда она берется при повторном старте задачи. Сегмент состояния задачи – небольшой сегмент данных с разрешенными операциями чтения и записи, доступ к которым запрещен всем программам и к сегменту состояния задачи может обращаться только сам процессор.
Для управления многозадачностью в процессоре нет специальных команд. Вместо этого в некоторых случаях по-другому интерпретируются команды межсегментной передачи управления. Переключение задачи может быть вызвано командами межсегментной передачи управления (far call и far jump). Помимо этого новая задача может активизироваться прерыванием или особым случаем. Когда реализуется одна из таких форм передачи управления, по типу адресуемого дескриптора процессор определяет что ему нужно сделать: выполнить обычную межсегментную передачу или переключить задачу.
Имеется два типа дескрипторов, относящихся к задачам:
1. Дескриптор сегмента состояния задачи.
2. Шлюз задачи.
При каждом переключении задачи процессор может перейти к другой локальной дескрипторной таблице.
Переключение задачи похоже на вызов процедуры, но при этом сохраняется намного больше информации. Сохраненная информация должна обеспечивать возобновление работы задачи с той же точки и в том же объеме что и когда задача была прервана.
Для поддержки многозадачности в процессоре имеются:
- регистр задачи;
- сегмент состояния задачи;
- дескриптор сегмента состояния задачи;
- дескриптор шлюза задачи.
Типичным примером многозадачной работы являются системы разделения времени. В ходе функционирования такой системы требуются средства, позволяющие приостановить выполнение задачи, временно сохранить ее состояние, восстановить состояние задачи, на которую осуществляется переключение и инициировать ее продолжение работы.
БИЛЕТ 21
1. Работа с файлами в ос unix. Системные вызовы (21) – 25
Перед тем как выполнять операцию чтения или записи в файл, его необходимо открыть. Ядро ОС ведет списки открытых файлов для всех процессов. Эти списки называют таблицами файлов (file table). Они индексируются при помощи неотрицательных целых значений, называемых файловыми дескрипторами (file descriptor, fd). Каждая запись в списке содержит информацию об открытом файле, включая указатель на находящуюся в памяти копию индексного дескриптора (inode) и связанные метаданные: позицию в файле и режимы доступа. Пользовательское пространство и пространство ядра ОС использует файловые дескрипторы в качестве уникальных для каждого процесса маркеров. При открытии файла возвращается файловый дескриптор (точнее номер), а последующие операторы над файлом принимают файловый дескриптор как основной аргумент.
Файловые дескрипторы представляются типом int. У каждого процесса есть максимальное число файлов, которое он может открыть. Номер файлового дескриптора начинается с 0. По умолчанию максимальное число файлов, которое может открыть процесс, 1024. Таким образом, значения файловых дескрипторов колеблются в пределах 0..1023.
Каждый процесс при создании имеет по крайней мере три открытых дескриптора: 0, 1, 2, которые определяют соответственно стандартный ввод (standart in, stdin), стандартный вывод (standart out, stdout) и дескриптор стандартного вывода ошибочных ситуаций (standart error, stderr):
STDIN_FILEND – 0
STDOUT_FILEND – 1
STDERR_FILEND – 2
Файловые дескрипторы могут ссылаться не только на обычные файлы. Они также используются и для доступа к файлам устройств, каталогам, именованным конвейерам (FIFO-файлам), сокетам (socket) и др.
Открытие файла
Для начала работы с файлом его необходимо открыть. Для этого существует специальный системный вызов open:
#include <sys/types.h>
#include <sys/stat.h>
#include <fentl.h>
int open(const char *name, int flags);
int open(const char *name, int flags, mode_l mode);
Данный системный вызов использует первый параметр name как полный путь к файлу и сопоставляет с этим именем дескриптор файла, который возвращается при успешном завершении операции. Позиция в файле устанавливается в 0, а разрешение на доступ к файлу определяется вторым параметром flags. Он может принимать следующие значения:
O_RDONLY – только для чтения
O_WRONLY – только для записи
O_RDWR – и чтение, и запись
Пример использования системного вызова с проверкой:
int fd;
fd=open(“/home/stud/file1”,O_RDONLY);
if (fd==-1)
{ //обработка ошибки }
Над файлом можно выполнять только разрешенные параметром flags действия. Процесс, который выполняет открытие, должен иметь соответственные права доступа.
Также есть и дополнительные флаги, которые могут присоединяться операцией ИЛИ с основными:
O_APPEND – файл открыт в режиме присоединения, перед каждой записью указатель позиции устанавливается в конец файла;
O_CREAT – если файл name не существует, то он создается, если же файл существует и помимо CREAT используется EXCL, то open завершается с ошибкой (возвращается -1);
O_EXCL – этот флаг совместно с CREAT используется для предотвращения повторного создания файла;
O_SYNC – файл открывается для синхронного ввода/вывода, при этом ни одна операция записи не будет завершена, пока данные физически не будут записаны на диск;
O_NONBLOCK – файл открывается в режиме без блокировки, если это возможно. Т.е. ни вызов open, ни любые другие вызовы не приводят к блокировке (засыпанию) процесса во время ввода-вывода. Флаг определен только для конвейеров FIFO;
O_TRUNC – при использовании этого флага, если файл существует и это обычный файл, он усекается до нулевой длины, запись в него допускается.
Примером использования системного вызова open с некоторыми из выше перечисленных флагов:
fd=open(“/home/stud/file.rot”, O_WRONLY|O_TRUNC);
Владельцем нового файла становится владелец EUID процесса, создавшего файл.