
- •Билет 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
3. Концепция потока, как составной части процесса (8) – 139
Концепция процесса характеризуется двумя параметрами: владением ресурсов и планированием и выполнением.
Многопоточность – это способность ОС поддерживать в рамках одного процесса выполнение нескольких потоков. Процесс, представляющий собой единый поток выполнения, называется однопоточным.
Есть различные конфигурации ОС:
один процесс – один поток (MS-DOS)
один процесс – несколько потоков (система типа Java)
несколько процессов – один поток (ОС UNIX на первых этапах)
несколько процессов и несколько потоков в процессе (Windows, OS/2, LINUX)
В многопоточной среде с каждым процессом также связаны управляющий блок и адресное пространство. Но для каждого потока создаётся свой отдельный стек и свой управляющий блок, в котором содержится значение регистров, приоритет и другая информация о состоянии потока.
Все потоки процесса разделяют между собой состояние и ресурсы этого процесса. Они находятся в адресном пространстве и имеют доступ к данным. Если один поток изменяет какие-то данные, то другие потоки во время своего доступа к данным могут отследить эти изменения. Если один поток открывает файл, то другие потоки могут читать информацию из этого файла. Порождение новых потоков создаёт новую линию выполнения команд притом, что доступ идёт к одним и тем же данным.
С точки зрения производительности, использование потоков имеет следующие преимущества.
1. Создание нового потока в существующем процессе занимает на много меньше времени, чем создание нового процесса.
2. Поток можно завершить на много быстрее, чем процесс.
3. Переключение потоков в рамках одного процесса происходит на много быстрее, чем переключение процессов.
4. При использовании потоков повышается эффективность обмена информацией между двумя выполняющимися программами. В большинстве ОС обмен данными между независимыми процессами происходит с участием ядра. А так как потоки используют одно и тоже адресное пространство, то они могут обмениваться информацией без участия ядра.
Примером приложения, в котором можно применить поток, является файловый сервера. Так как серверу приходится обрабатывать большое количество запросов, то необходимо создание потоков. Если серверная программа работает на многопроцессорной машине, то на разных процессорах в рамках одного процесса могут выполняться одновременно несколько потоков.
БИЛЕТ 9
1. Разработка программ в ос unix. Обработка ошибок, переменные окружения (9) – 11
Выполнение программы начинается с создания в памяти её образа и связывания с процессом структур ядра ОС, инициализации и передачи управления инструкциям программы. Завершение программы приводит к освобождению памяти и соответствующих структур ядра. Образ программы в памяти содержит сегменты инструкций и данных, созданных компилятором, а также стек, которым пользуется программа в ходе выполнения.
Окружение – набор переменных и их значений, с помощью которых программе можно передавать данные общего назначения.
Описание головной функции программы может выглядеть или так:
main (int argc, char *argv[], char *envp[]);
или так:
extern char **environ; // глобальная переменная, указывающая на строки
// с переменными окружения.
main (int argc, char *argv[]);
argc - определяет число параметров, переданных программе, включая её имя. Указатели на каждый из этих параметров хранятся в массиве, являющемся указателем на эти аргументы.
Второй массив - массив указателей на переменные окружения, передаваемые программе. Каждая переменная содержит строку вида:
HOME=/home/student/851003.
Основные переменные окружения следующие.
HOME - имя каталога, который становится текущим после входа пользователя в систему.
PATH - последовательность полных файловых путей, разделенных двоеточием, которые используются некоторыми программами для поиска файлов, заданных относительным именем.
TERM - тип терминала
TZ - информация о часовом поясе.
LOGNAME - регистрационное имя пользователя.
LC_NUMERIC - значение категории локализации, определяющей правила национального представления чисел с плавающей точкой.
LC_TIME - значение категории локализации, определяющей правила национального представления времени и даты.
Пример.
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
void main(int argc, char *argv[])
{
char *ch;
char bufer[200], var[200];
if ((ch=getenv("MYVAR"))==NULL)
{
printf("Переменная MYVAR не определена. Введите значение: ");
gets(bufer);
sprintf(var,"MYVAR=%s",bufer);
putenv(var);
printf("Новое значение %s \n",var);
}
else
{
printf("MYVAR=%s. Изменить? ",ch);
gets(buf);
if (buf[0]=='Y' || buf[0]=='y')
{
printf("Новое значение: ");
gets(buf);
sprintf(var,"MYVAR=%s",bufer);
putenv(var);
printf("Новое значение MYVAR=%s",var);
}
}
}
char *getenv (const char *name);
int putenv(const char *string);
Для получения и установки значений переменной окружения применяются две функции: getenv возвращает значение переменной окружения, имеющей имя name; putenv помещает переменную и ее значение в окружение программы. Переменные окружения позволяют передать программе некоторую информацию, однако большую часть информации программа получает от пользователя в ходе ее выполнения.
Вводимое новое значение переменной окружения будет действительно только для данного процесса и порожденных им процессов. После завершения текущего процесса измененная переменная окружения принимает исходное значение.
Можно модифицировать переменные окружения.
Пример:
#include<stdlib.h>
int setenv(const char * NAME, const char * VALUE, int OV );
int putenv(const char * NAME );
int unsetenv(const char * NAME);
Setenv – добавляет новую переменную окружения или заменяет уже существующую переменную окружения заданную первым аргументом, присваивает ей значение заданное вторым аргументом, третий аргумент – это флаг, показывающий нужно ли перезаписывать переменную, если она уже существует (если 0,то не перезаписывается, в противном случае изменяется). При успешном завершении возвращает 0 и -1 при ошибке.
Putenv - добавляет новую переменную окружения или заменяет уже существующую переменную окружения. Использует аргумент который должен иметь вид ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. При успешном завершении возвращает 0 и -1 при ошибке.
Unsetenv – удаляет переменную заданную в начале аргумента из окружения. При успешном завершении возвращает 0 и -1 при ошибке.