- •Билет 1
- •1. Основы ос Unix, возможности, стандартизация (1) – 4
- •Отличительные черты ос unix
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 4 (1, 16, 18) – 146
- •3. Последовательность действий по преобразованию адреса в защищенном режиме
- •Билет 2
- •1. Понятие системного вызова в ос unix. Обработка ошибок (2) – 9
- •Обработка ошибок
- •Void perror (s)
- •Void perror (const char *s);
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 2 (2, 6, 15, 27) – 143
- •3. Особенности современных операционных систем (2, 28) – 122
- •Концепция ос на основе микроядра
- •Многопоточность
- •Cимметричная многопроцессорность.
- •Распределенные ос
- •Int chmod(const char *path, mode_t mode);
- •Int fcmod(int fd, mode_t mode);
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 3 (3, 28) – 144
- •3. Концепция слоистой операционной системы и системы на основе микроядра.
- •Билет 4
- •1. Владельцы файлов. Права доступа к файлам. Атрибуты файлов (4, 18) – 23
- •Атрибуты файла
- •Int chmod(const char *path, mode_t mode);
- •Int fcmod(int fd, mode_t mode);
- •Int chown (const char *path, uid_t owner, gid_t group);
- •Int lchown (const char *path, uid_t owner, gid_t group);
- •Int fchown (int fd, uid_t owner, gid_t group): ,
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 1 (4, 26) – 142
- •3. Функции микроядра (4, 12, 15, 27) – 126
- •Билет 5
- •1. Неименованные каналы в ос unix (5) – 77
- •Int pipe(int fd[2]);
- •2. Взаимодействие процессов. Задача взаимного исключения. Алгоритм Деккера (5) – 147
- •3. Понятие процесса, модели процессов (5) – 132
- •Билет 6
- •Метаданные файлов в ос unix (7) – 36
- •Int stat(const char *path, struct stat *buf);
- •Int fstаt(int fd, struct stat *buf);
- •Int lstat(const char *path, struct stat *buf);
- •2.Взаимодействие последовательных процессов. Задача взаимного исключения. Вариант2.
- •3. Описание процесса, таблица процесса (6) – 136
- •Билет 7
- •1. Процессы в ос unix. Типы процессов. (7, 23) – 56
- •2. Синхронизирующие примитивы. Решение задачи взаимного исключения с использованием семафоров (7, 8, 19, 20) - 152
- •3. Принципы построения ос (7, 19, 26) – 128
- •Билет 8
- •1. Атрибуты процессов в unix (8) – 66
- •2.Применение общего семафора для решения задачи "производитель-потребитель" с неограниченным буфером.
- •3. Концепция потока, как составной части процесса (8) – 139
- •Билет 9
- •1. Разработка программ в ос unix. Обработка ошибок, переменные окружения (9)
- •Int putenv(const char *string);
- •Int setenv(const char * name, const char * value, int ov );
- •Int unsetenv(const char * name);
- •Обработка ошибок
- •Void perror (const char *s);
- •2. Применение двоичных семафоров для решения задачи «производитель» - «потребитель» (буфер неограниченный) (9, 21)
- •3. Концепция виртуализации (9, 17) –
- •Билет 10
- •1. Файлы, отображаемые в память (10) – 33
- •Void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);
- •2. Применение семафоров для решения задачи «производитель» - «потребитель» с неограниченным буфером. Решение «спящий парикмахер». (10, 22) – 155
- •3. Подсистема управления памятью, требования, предъявляемые к ней (10)
- •1. Процессы в ос unix. Порождение процесса (11, 25) – 57
- •2. Применение общих семафоров для решения задачи «производитель-потребитель» с ограниченным буфером (11, 23) – 157
- •3. Виртуальная память. Задачи управления виртуальной памятью (11, 25)
- •Билет 12
- •1. Сигналы в ос unix. Их назначение и обработка (12) – 70
- •Void (*sa_handler)(int);
- •Void (*sa_sigaction)(int, siginfo_t *, void *);
- •Int sa_flags;
- •Int pause (void);
- •2. Взаимодействие процессов через переменные состояния. Пример приоритетного правила (12) – 157
- •3. Функции микроядра (4, 12, 15, 27) – 126
- •Билет 13
- •1. Функции для работы с сигналами (13) – 70
- •Void (*sa_handler)(int);
- •Void (*sa_sigaction)(int, siginfo_t *, void *);
- •Int sa_flags;
- •Int pause (void);
- •Наборы сигналов
- •Блокировка сигналов
- •Int sigprocmask(int how, const sigset_t *set, sigset_t, *oldset);
- •Int sigaсtion(int signo, const struct sigactoin *act, struct sigaction *oldact);
- •Void my_handler(int signo)
- •Void my_handler(int signo, siginfo_t *si, void ucontext )
- •2. Проблема тупиков. Алгоритм банкира (13)
- •3. Задача замещения при управлении виртуальной памятью, часовой алгоритм.
- •Билет 14
- •Int chmod(const char *path, mode_t mode);
- •Int fcmod(int fd, mode_t mode);
- •2. Задача взаимного исключения. Алгоритм Петерсона (14, 25) – 148
- •3.Распределение памяти. Система двойников.
- •Система двойников при распределении памяти.
- •Билет 15
- •1. Файловая система в ос unix ext2 (15) – 51
- •Организация файловой системы ext2
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 2 (2, 6, 15, 27) – 143
- •3. Функции микроядра (4, 12, 15, 27) – 126
- •Билет 16
- •1.Каналы в ос unix (16) – 80
- •Int pipe(int fd[2]);
- •Int mkfifo(const char *pathname,mode_t mode);
- •Размер канала и взоимодействие процессов при передаче данных
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 4 (1, 16, 18) – 146
- •3. Организация защиты в процессорах ia32
- •Билет 17
- •1. Процессы в ос unix, системные вызовы wait, exit (17) – 60, 63
- •Void _exit(int exit_code);
- •Void exit(int status);
- •Int atexit(void(*func)(void));
- •2. Монитороподобные средства синхронизации для решения задачи взаимного исключения (17) – 160
- •Механизм типа «условная критическая область»
- •3. Концепция виртуализации
- •Билет 18
- •1. Владельцы файлов. Права доступа к файлам. Атрибуты файлов
- •Атрибуты файла
- •Int chmod(const char *path, mode_t mode);
- •Int fcmod(int fd, mode_t mode);
- •Int chown (const char *path, uid_t owner, gid_t group);
- •Int lchown (const char *path, uid_t owner, gid_t group);
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 4 (1, 16, 18) – 146
- •3. Схемы распределения памяти
- •Билет 19
- •1. Взаимодействие процессов в ос unix, очереди сообщений (19) – 83
- •Int msgget (key_t key, int permflags);
- •Int msgsnd(int mqid, const void *message, size_t size, int flags);
- •Int msgrcv(int mqid, void *message, size_t size, long msg_type, int flags);
- •Int msgctl(int mqid, int command, struct msqid_ds *msq_stat);
- •2. Синхронизирующие примитивы. Решение задачи взаимного исключения с использованием семафоров (7, 8, 19, 20) - 152
- •3. Принципы построения ос (7, 19, 26) – 128
- •Билет 20
- •1 Взаимодействие процессов в ос unix с применением семафоров (20) – 93
- •V(sem) или signal (sem)
- •Int semget(key_t key, int nsems, int permflags);
- •Int semctl (int semid, int sem_num, int command, union semun ctl_arg);
- •Int semop(int semid, struct sembuf *op_array, size_t num_ops);
- •2. Применение общего семафора для решения задачи "производитель-потребитель" с неограниченным буфером.
- •3. Механизмы поддержки многозадачности в процессорах ia32 (20)
- •Билет 21
- •1. Работа с файлами в ос unix. Системные вызовы (21) – 25
- •Int open(const char *name, int flags);
- •Int open(const char *name, int flags, mode_l mode);
- •2. Применение двоичных семафоров для решения задачи "производитель-потребитель" (буфер неограниченный).
- •3. Страничная организация памяти в процессоре ia32
- •Билет 22
- •1. Взаимодействие процессов в ос unix. Разделяемая память (22) – 100
- •Int shmget(key_t key, size_t size, int permflags);
- •Void *shmat(int shmid, const void *daddr, int shmflags);
- •Int shmctl(int shmid, int command, struct shmid ds *shm_stat);
- •2. Применение семафоров для решения задачи «производитель» - «потребитель» с неограниченным буфером. Решение «спящий парикмахер». (10, 22) – 155
- •3. Организация защиты в процессорах ia32
- •Билет 23
- •1. Процессы в ос unix. Типы процессов. (7, 23) – 56
- •2. Применение общих семафоров для решения задачи «производитель-потребитель» с ограниченным буфером (11, 23) – 157
- •3. Задача замещения при управлению виртуальной памятью, часовой алгоритм.
- •Билет 24
- •1. Понятие потока в ос unix. Создание потока, завершение потока (24) – 106
- •Int pthread_create(pthread_t *tid, const pthread_attr_t *tattr,
- •Void*(*start_routine)(void *), void *arg);
- •Функция для завершения нити (потока) исполнения
- •Int pthread_join(thread_t tid, void **status);
- •Int pthread_detach(thread_t tid);
- •Досрочное завершение потока
- •Int pthread_cancel(pthread_t thread);
- •2. Синхронизирующие примитивы. Решение задачи взаимного исключения с использованием семафоров (7, 8, 19, 20, 24) - 152
- •3. Схемы распределения памяти (18, 24)
- •1. Процессы в ос unix. Порождение процесса (11, 25) – 57
- •2. Задача взаимного исключения. Алгоритм Петерсона
- •3. Виртуальная память. Задачи управления виртуальной памятью (11, 25)
- •Билет 26
- •1. Поток в ос unix. Синхронизация потоков, получение информации о потоке.
- •Int pthread_key_create(pthread_key_t *key, void(*destructor)(void *));
- •Int pthread_setschedparam(pthread_t tid, int policy,
- •Int pthread_getschedparam(pthread_t tid, int policy, struct schedparam *param);
- •Int pthread_sigmask(int how, const sigset_t *new, sigset_t *old);
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 1 (4, 26) – 142
- •3. Принципы построения ос (7, 19, 26) – 128
- •Билет 27
- •1. Применение мьютексов при взаимодействии потоков в ос unix.
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 2 (2, 6, 15, 27) – 143
- •3. Функции микроядра (4, 12, 15, 27) – 126
- •1. Применение блокировок чтения-записи при взаимодействии потоков в ос unix.
- •2. Взаимодействие процессов. Задача взаимного исключения. Вариант 3 (3, 28) – 144
- •3. Особенности современных операционных систем (2, 28) – 122
- •Концепция ос на основе микроядра
- •Многопоточность
- •Cимметричная многопроцессорность.
- •Распределенные ос
Void (*sa_handler)(int);
Void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
Int sa_flags;
}
sa_handler задает тип действий процесса, связанный с сигналом signum, и может быть равен: SIG_DFL для выполнения стандартных действий, SIG_IGN для игнорирования сигнала,- или быть указателем на функцию обработки сигнала.
sa_mask задает маску сигналов, которые должны блокироваться при обработке сигнала. Также будет блокироваться и сигнал, вызвавший запуск функции, если только не были использованы флаги SA_NODEFER или SA_NOMASK.
sa_flags содержит набор флагов, которые могут влиять на поведение процесса при обработке сигнала. Так, SA_SIGINFO - Обработчик сигнала требует 3-х аргументов, а не одного. В этом случае надо использовать параметр sa_sigaction вместо sa_handler.
Функция ожидания:
#include <unistd.h>
Int pause (void);
После вызова функции pause вызывающий процесс (или подзадача) приостанавливается до тех пор, пока не получит сигнал. Данный сигнал либо остановит процесс, либо заставит его вызвать функцию обработки этого сигнала. Сигнал должен отличаться от тех сигналов, которые игнорируются вызывающим процессом. Если сигнал привел к завершению выполнения вызывающего процесса, то возврата из pause не будет.
Когда порождается новый процесс, для него устанавливается поведение всех сигналов по умолчанию, если только родительский процесс не игнорирует какие-то сигналы. Таким образом, новый процесс выполняет действие по умолчанию для всех сигналов захватываемых предком, а все прочие сигналы не вызывают действий
Свойство игнорирования сигналов порожденным процессом, заимствованное у родительского процесса, можно использовать для создания фоновых процессов.
2. Взаимодействие процессов через переменные состояния. Пример приоритетного правила (12) – 157
Рассматриваются производители, которые выдают порции информации различного размера и размер порции выражается в некоторых единицах. Потребитель обрабатывает последовательные порции из буфера и умеет обрабатывать порции, размер которых заранее не задан. Максимальный размер порции известен. Максимальный размер буфера определён в единицах информации, а не в количестве порций. Размер буфера - не менее максимального размера порции информации. Вопрос о возможности размещения в буфере определенной выработанной порции зависит от размера этой порции.
Если имеется более одного производителя и какой-то из них ждет из-за отсутствия достаточного места в буфере, то другие производители могут продолжать работу и достигнуть точки, когда они желают выдать выработанную порцию информации в буфер.
При принятии решения, кому первому поместить информацию в буфер, формируется требование: производитель, предлагающий большую порцию, имеет больший приоритет. Если порции равны, то не имеет значения, кто добавит информацию первым.
Дано: N производителей; M потребителей; RB размер буфера.
СП – семафор производителя
ЧСЕБ - число свободных единиц в буфере
ББ – блокировка буфера
РП – размер порции
begin
integer array желание[1:N], СП[1:N];
integer ЧПБ, ББ, РБ, ЧСЕБ, i;
for цикл:=1 step 1 until N do begin
желание[i]:=0;
СП[i]:=0;
end;
ЧПБ:=0; ЧСЕБ:=RB;
ББ:=0; РБ:=1;
parbegin
производитель 1: begin ... end;
. . . . . . . . . . . . . . . .
производитель n: begin integer РП;
цикл n: производство новой порции и установка размера порции (РП);
P(РБ);
if ( (ББ=0) and (ЧСЕБ>=РП) ) then
ЧСЕБ:=ЧСЕБ-РП
else
begin
ББ:=ББ+1;
желание[n]:=РП;
V(РБ);
P(СП[n]);
P(РБ);
end;
добавление порции к буферу;
V(РБ);
V(ЧПБ);
goto цикл n;
end;
... ... ...
производитель N: begin ... end;
потребитель 1: begin ... end;
... ... ...
потребитель m: begin integer РП, i, max, nmax;
цикл m: P(ЧПБ);
P(РБ);
взятие порции из буфера и установка РП;
ЧСЕБ:=ЧСЕБ+РП;
проверка: if (ББ>0) then
begin
max:=0;
for i:=1 step 1 until N do
begin
if(max<желание[i]) then
begin
max:=желание[i];
nmax:=i;
end
end;
if (max=<ЧСЕБ) then
begin
ЧСЕБ:=ЧСЕБ-max;
желание[nmax]:=0;
ББ:=ББ-1;
V(СП[nmax]);
goto проверка;
end;
end;
V(РБ);
обработка взятой порции;
goto цикл m;
end;
Для решения задачи вводится переменная состояния для каждого производителя - “желание”, обозначающая число единиц информации в буфере, необходимых для размещения порции, которая в текущий момент не может быть добавлена к буферу. Если для процесса-производителя эта переменная равна нулю, то процесс-производитель не имеет неудовлетворённых требований на добавление порций. Для каждого производителя вводится двоичный семафор СП (семафор производителя). Для буфера вводится двоичный семафор РБ (работа с буфером), предназначенный для взаимного исключения при работе с буфером в широком смысле, т.е. не только взятие и добавление, но также проверка и модификация связанных с буфером переходных состояний. Как только в буфер добавляется новая порция, она может быть обработана. Так как безразлично, кто из потребителей её возьмёт, то для определения этого может быть использован общий семафор ЧПБ (число порций в буфере). О свободных областях в буфере производителям сообщается через целочисленную переменную состояния ЧСЕБ (число свободных единиц в буфере). Введена целочисленная переменная ББ (блокировка буфера), значение которой определяет, сколько процессов-производителей имеют желание добавить порцию в буфер, но не смогли разместить свои порции в буфере и она уведомляет производителя в том, что уже есть процессы, которые обнаружили, что ББ>0, то он должен присоединиться к процессам, которые ожидают размещения порции в буфер.