Автор: Пользователь скрыл имя, 10 Января 2013 в 15:28, контрольная работа
Вопрос 1. Что такое ОС
•Операционная система как виртуальная машина
•Операционная система как менеджер ресурсов
Операционная система (ОС) – это программа (комплекс программ), которая обеспечивает возможность рационального использования оборудования компьютера удобным для пользователя образом
Вопрос 6. Классификация ОС
-Реализация многозадачности
-Поддержка многопользовательского режима
-ОС мейнфреймов и серверов
-ОС мобильных устройств и ПК
-Многопроцессорная обработка
-Системы реального времени
Реализация многозадачности
два класса:
-многозадачные (Unix, OS/2, Windows);
-однозадачные (например, MS-DOS).
Многозадачная ОС - решает проблемы распределения ресурсов и конкуренции.
Многозадачный режим, который воплощает в себе идею разделения времени, называется вытесняющим. Каждой программе выделяется квант процессорного времени, по истечении которого управление передается другой программе. Говорят, что первая программа будет вытеснена.
В некоторых ОС (Windows 3.11) пользовательская программа может монополизировать процессор, то есть работать в не вытесняющем режиме. Как правило, в большинстве систем не подлежит вытеснению код собственно ОС. Ответственные программы, в частности задачи реального времени, также не вытесняются.
Поддержка многопользовательского режима
По числу одновременно работающих пользователей ОС можно разделить на:
-однопользовательские (MS-DOS, Windows 3.x);
-многопользовательские (
Наиболее существенное
отличие между этими ОС
ОС мейнфреймов и серверов
Linux Debian, Ubuntu Server, Windows Server
ОС мобильных устройств и ПК
PalmOS, Maemo, Android, Windows Mobile
Многопроцессорная обработка
Solaris 2.x, Open Server 3.x, OS/2, Windows NT/2000/XP , NetWare 4.1 и старше.
Системы реального времени
QNX.
-cистемы жесткого DB
-системы мягкого PB
Вопрос 7. Системные вызовы
-управление процессами
-управление файлами и каталогами
-остальные
Системный вызов – интерфейс программ с ОС в виде вызовов процедур, методов или макросов, являющихся частью ОС. Способы передачи параметров системному вызову: через регистр, через таблицу, адрес которой в регистре, или через стек. Системные вызовы выполняют управление процессами, файлами, устройствами, выдают сопровождающую информацию, осуществляют коммуникации.
Управление процессами
Для создания процессов
используются два системных вызова:
fork() и exec. fork() создает новое адресное
пространство, которое полностью
идентично адресному
Теперь, когда мы уже создали процесс, мы можем запустить программу с помощью вызова exec. Параметрами функции exec является имя выполняемого файла и, если нужно, параметры, которые будут переданы этой программе. В адресное пространство порожденного с помощью fork() процесса будет загружена новая программа и ее выполнение начнется с точки входа (адрес функции main).
Управление файлами и каталогами
Потоковая передача информации может осуществляться не только между процессами, но и между процессом и устройством ввода-вывода, например между процессом и диском, на котором данные представляются в виде файла.
функции работы с файлами из стандартной библиотеки ввода-вывода, такие как fopen(), fread(), fwrite(), fprintf(), fscanf(), fgets() и т.д. Эти функции входят как неотъемлемая часть в стандарт ANSI на язык C и позволяют программисту получать информацию из файла или записывать ее в файл при условии, что программист обладает определенными знаниями о содержимом передаваемых данных.
Вопрос 8. Процессы
- Создание и завершение процесса
- Демоны
- Иерархия процессов
- Состояния процесса
- Модель многозадачного режима
процесс это – совокупность программного кода и данных, загруженных в память ЭВМ. На первый взгляд процесс – это запущенная программа (приложение) или команда. Но это не совсем так. Некоторые приложения могут создавать несколько процессов одновременно.
Создание процесса происходит
по следующим причинам:
1) при инициализации ОС;
2) если процесс вызывает системный вызов
создания процесса;
3) если пользователь запускает процесс.
Фоновые процессы работают без взаимодействия
с пользователем. Большую часть времени
они спят и просыпаются только тогда, когда
поступает запрос от пользователя. Фоновый
процесс обрабатывает этот запрос и снова
засыпает. Такие процессы называются демонами.
Понятие демон было взято от демона Максвела,
он объяснял студентам второе начало термодинамики,
говоря что все порождается некоторыми
силами, которые он назвал демонами.
Единственным способом создания процесса
в ОС Unix является системный вызов fork(),
он создает точную копию родительского
процесса, а так же точную копию адресного
пространства родительского процесса
(образа памяти).
Процессы завершаются по следующим причинам:
1) добровольное завершение: системный
вызов exit или действие пользователя в
графическом режиме вызывающее выход;
2) возникновение ошибки:
$gcc main.c
Нет файла main.c
$
3) возникновение фатальной ошибки: ошибка
содержится в самой программе.
4) принудительное завершение процесса.
Процесс бывает в следующих состояниях:
1. Выполнение: когда процесс выполняется
ЦП;
2. Готовность: когда процесс готов к выполнению,
но ЦП занят другим процессом;
3. Блокировка: когда процесс ожидает происшествия
каких-то внешних событий.
например, ввода данных, команд.Процессы, не привязанные к какому-то конкретному терминалу называются “демонами” (daemons). Такие процессы, будучи запущенными пользователем, не завершают свою работу по окончании сеанса, а продолжают работать, так как они не связаны никак с текущим сеансом и не могут быть автоматически завершены. Как правило, с помощью демонов реализуются серверные службы, так например сервер печати реализован процессом-демоном cupsd, а сервер журналирования – syslogd.
Вопрос 9. Потоки
- Классическая модель потока
- Потоки в POSIX
- Потоки в режиме пользователя и ядра
Понятие потока
Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством.
Модель потока
С каждым потоком связывается:
Потоки делят между собой элементы своего процесса:
В остальном модель идентична модели процессов.
В POSIX и Windows есть поддержка потоков на уровне ядра.
Преимущества использования
-Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
-Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.
Повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода.
Потоки в POSIX
Все потоки Pthreads имеют
определенные свойства. У каждого
потока есть свой идентификатор, набор
регистров (включая счетчик команд) и набор атрибутов, которые сохраняются
в определенной структуре. Атрибуты включают
размер стека, параметры планирования
и другие элементы, необходимые при использовании
потока.
Новый поток создается
с помощью вызова функции pthread_create.
В качестве значения функции возвращается
идентификатор только что созданного
потока. Этот вызов намеренно сделан очень
похожим на системный вызов fork, а идентификатор
потока играет роль PID, главным образом
для идентификации ссылок на потоки в
других вызовах.
Когда поток заканчивает возложенную
на него работу, он может быть завершен
путем вызова функции pthread_exit. Этот
вызов останавливает поток и освобождает
пространство, занимавшееся его стеком.
Зачастую потоку необходимо перед продолжением
выполнения ожидать окончания работы
и выхода из другого потока. Ожидающий поток вызывает
функцию pthread Join, чтобы ждать завершения
другого указанного потока. В качестве
параметра этой функции передается идентификатор
потока, чьего завершения следует ожидать.
Иногда бывает так, что поток не является
логически заблокированным, но считает,
что он проработал достаточно долго, и намеревается дать шанс
на выполнение другому потоку. Этой
цели он может добиться за счет вызова функции
pthread_yield.
Реализация потоков в
А - потоки в пространстве пользователя
B - потоки в пространстве ядра
В случае А ядро о потоках ничего не знает. Каждому процессу необходима таблица потоков, аналогичная таблице процессов.
Преимущества случая А:
Недостатки случая А:
Вопрос 10. Операции над процессами и связанные с ними понятия
- Состязательная ситуация
- Критическая секция
Операции над процессами удобно объединить их в три пары:
Операции создания и завершения процесса являются одноразовыми, так как применяются к процессу не более одного раза (некоторые системные процессы при работе вычислительной системы не завершаются никогда). Все остальные операции, связанные с изменением состояния процессов, будь то запуск или блокировка, как правило, являются многоразовыми.
Критическая секция — часть программы, в которой есть обращение к совместно используемым данным. При нахождении в критической секции двух (или более) процессов, возникает состояние «гонки» («состязания»). Для избежания данной ситуации необходимо выполнение четырех условий:
Невозможна ситуация, в которой процесс вечно ждет попадания в критическую область.
Вопрос 11. Взаимное исключение с активным ожиданием
- Запрет на прерывание
- Блокирующие переменные
- Строгое чередование
- Алгоритм Петерсона
- Команда TSL
Запрет на прерывание - Самое простое решение состоит в запрете всех прерываний при входе процесса в критическую область и разрешение прерываний по выходу из нее. Если прерывания запрещены, невозможно прерывание по таймеру. Отключение прерываний исключает передачу процессора другому процессу. Таким образом, запретив прерывания, процесс может спокойно считывать и сохранять совместно используемые данные, не опасаясь вмешательства конкурентов.
Блокирующие переменные – перед входом в критическую секцию создается переменная флаг которая указывает занята критическая секция или нет(0 или 1). Недостатками такого подхода является ситуация когда один процесс считает значение 0 и изменит его на 1, параллельно другой процесс так же считает 0 и изменит его на 1, в результате для обоих процессов критическая секция будет заблокирована.
Строгое чередование
While(true){
While(turn!=0)
Critical_region(); //Функция входа в критич. секцию
Turn=1; //определяет какому процессу входить в критич. секцию
Noncritical_region(); //Функция выхода из критич. секции
}
While(true){
While(turn!=0)
Critical_region();
Turn=0;
Noncritical_region();
}
Недостатками такого подхода является такая ситуация когда одновременно идет обращение двух процессов к критич. секции.
В этом случае переменная Turn может быть одновременно равна либо 1 либо для обоих случаев. Это приведет к невозможности доступа к критич. секции.
Алгоритм Петерсона
Алгоритм Петерсона, представленный в листинге 2.1, состоит из двух процедур, написанных на ANSI С, что предполагает необходимость прототипов для всех определяемых и используемых функций.
Решение Петерсона для взаимного исключения
#define FALSE О
#define TRUE 1
idefine N 2 /* Количество процессов */
int turn: /* Чья сейчас очередь? */
int interested[N]; /* Все переменные изначально равны О (FALSE) */
void enter region(int process): /* Процесс О или 1 */
int other; /* Номер второго процесса */
other = 1 - process: /* противоположный процесс */
interested[process] = TRUE: /* Индикатор интереса */
turn = process: /* Установка флага */
while (turn == process && interested[other] == TRUE) /* Пустой цикл */:
void leave region(int process) /* Процесс, покидающий критическую область */
interestedCprocess] = FALSE:
/* Индикатор выхода из
Команда TSL(Test and send Lock) с помощью этой команды можно запретить доступ к шине данных. Формат команды: TSL REGISTER, Lock В отличие от запрета прерываний запрет доступа к шине данных позволяет заблокировать все процессы на всех процессах.