- •Билет 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имметричная многопроцессорность.
- •Распределенные ос
2. Применение семафоров для решения задачи «производитель» - «потребитель» с неограниченным буфером. Решение «спящий парикмахер». (10, 22) – 155
В парикмахерской 2 помещения: рабочая комната и
комната для ожидания
• Парикмахер обслуживает клиента, провожает его к выходной двери, затем приглашает очередного клиента из комнаты для ожидания; если клиентов нет, парикмахер садится в кресло и засыпает
• Клиент заходит в комнату для ожидания;
- если в комнате уже есть другие клиенты, новый посетитель занимает очередь и ожидает;
- если комната для ожидания пуста, новый клиент заглядывает в рабочую комнату и, если парикмахер занят, остается в комнате для ожидания
- Если парикмахер спит, то посетитель переходит в рабочую комнату и будит парикмахера
ЗП - задержка потребителя.
ЧПБ – число порций в буфере.
РБ – работа с буфером.
begin
integer ЧПБ, РБ, ЗП;
ЧПБ:=0; РБ:=1; ЗП:=0;
parbegin
производитель: begin
n1: производство новой порции;
P(РБ);
добавление новой порции к буферу;
ЧПБ:=ЧПБ+1;
if (ЧПБ=0) then begin V(РБ); V(ЗП); end
else V(РБ);
goto n1;
end;
потребитель: begin
n2: P(РБ);
ЧПБ:=ЧПБ-1;
if (ЧПБ=-1) then begin V(РБ); P(ЗП); P(РБ); end;
взятие порции из буфера;
V(РБ);
обработка взятой порции;
goto n2;
end;
parend;
Используется два двоичных семафора: работа с буфером и задержка потребителя. Особенности:
- используются только двоичные семафоры;
- задача взаимного исключения реализуется через семафоры;
- через семафоры реализуется задержка потребителя, которая действует при попытке потребителя читать данные из пустого буфера.
3. Подсистема управления памятью, требования, предъявляемые к ней (10)
В многозадачных системах пользовательская часть памяти должна быть распределена для размещения нескольких процессов. Задача распределения выполняется ОС динамически,
и известна под названием управления памятью. Если в памяти располагается мало процессов, то большие процессы находятся в состоянии ожидания выполнения операции
ввода/вывода и загрузки процессора низкая. Поэтому требуется эффективно распределять память, чтобы разместить в ней большее число процессов. При реализации механизмов и стратегий, связанных с управлением памятью, требуется обеспечить реализацию следующих требований:
перемещение;
защита;
совместное исполнение;
логическая организация;
физическая организация.
Перемещение. В многозадачной системе заранее неизвестно, где будет размещена загружаемая программа, кроме этого программа может перемещаться из одной области памяти в другую при спулинге. ОС должна знать местоположение управляющей информации процессов и стека выполнения, а также точку входа в исполняемый код. Т.к. управлением памятью занимается ОС, а также ОС управляет загрузкой процессов в память, соответствующие адреса она получает автоматически. При выполнении программы процесс должен иметь возможность обращения к памяти в самой программе. Таким образом, процессор и программа ОС должны переводить ссылки в коде программы в реальные физические адреса, которые соответствуют текущему расположению программы в основной памяти. Логический адрес представляет ссылку на ячейку памяти, не зависящую от текущего расположения данных в памяти. Относительный адрес – это частный случай логического адреса, когда адрес определяется положением относительно некоторой конкретной точки, обычно начало программы. Физический адрес представляет собой действительное расположение конкретной ячейки программы в основной памяти.
Защита. Каждый процесс должен быть защищен от нежелательного воздействия других процессов, как случайного, так и преднамеренного. Это означает, что из программного кода одного процесса нельзя обращаться к памяти, отведенной под другой процесс, для чтения или записи. Но обеспечение перемещаемости программы усложняет организацию механизма защиты. Требования защиты памяти должны удовлетворяться на уровне аппаратного обеспечения процессов, а не на уровне ОС, так как ОС не может предвидеть, куда будет обращаться программа.
Совместное использование. Предусматривает возможность обращения нескольких процессов к ОП. Если несколько процессов выполняют один и тот же машинный код, то целесообразно разрешить каждому из процессов работать с одной и той же копией этого кода, а не создавать каждому процессу копию. Система управления памятью должна обеспечить управляемый доступ к разделенным областям памяти, не ослабляя при этом защиту памяти.
Логическая организация памяти. И основная память и вторичная (внешняя) организованы как линейное адресное пространство, где элементом адресации является байт или слово. Такая организация отражает систему аппаратного обеспечения, но не соответствует страничной организации программ. Большинство программ организуется из модулей, часть из которых неизменна (используются только для чтения или исполнения), а другие содержат данные, которые могут изменяться.
Если ОС или аппаратное обеспечение ЭВМ могут работать с программами, представленными в виде модулей, то это обеспечивает ряд преимуществ:
- модули могут быть созданы и откомпилированы независимо друг от друга, при этом ссылка из одного модуля во второй разрешается системой во время работы программы;
- разные модули могут получать разные модули защиты;
- возможно применение механизмов совместного использования модулей различными процессами.
Наиболее подходящим способом для решения таких задач является сегментация.
Физическая организация памяти. Память в ЭВМ разделяется как минимум на два уровня - основную и вторичную. Основная обеспечивает быстрый доступ по достаточно высокой цене, она энергозависима, следовательно, не обеспечивает долговременного хранения. Вторичная память медленнее и дешевле, и энергонезависима. Следовательно, она может использоваться для долговременного хранения данных и программ и по емкости значительно превышает основную память. Основная память применяется для хранения программ, используемых в текущее время.
Одной из основных задач ОС является организация потоков информации между основной и вторичной памятью.
БИЛЕТ 11