Рефераты. Операционные системы (шпаргалка)

Например, один процесс копирует данные со стримера на кассету Exabyte, а другой - в обратном направлении. Доступ к стримеру контролируется семафором sem1, а к кассете - семафором sem2.

Первая программа сначала закрывает семафор sem1, затем sem2. Вторая программа поступает наоборот. Поэтому, если вторая программа получит управление и защелкнет sem2 в промежутке между соответствующими операциями первой программы, то мы получим мертвую блокировку - первая программа никогда не освободит sem1, потому что стоит в очереди у sem2, занятого второй программой, которая стоит в очереди у sem1, занятого первой... Все остальные программы, пытающиеся получить доступ к стримеру или кассете, также будут становиться в соответствующие очереди и ждать, пока администратор не убьет одну из защелкнувшихся программ. (Нетрудно заметить, что здесь мы имеем дело с частным случаем задачи “обедающие философы”, где происходит доступ к пересекающимся группам ресурсов).

Эта проблема может быть решена несколькими способами. Первый способ - разрешить программе в каждый момент времени держать закрытым только один семафор - прост и решает проблему в корне, но часто оказывается неприемлемым. Более приемлемым оказывается соглашение, что семафоры всегда должны закрываться в определенном порядке. Этот порядок может быть любым, важно только чтобы он всегда соблюдался. Третий, наиболее радикальный, вариант состоит в предоставлении возможности объединить семафоры и/или операции над ними в неразделяемые группы. При этом программа может выполнить операцию закрытия семафоров sem1 и sem2 единой командой, во время исполнения которой никакая другая программа не может получить

При доступе к нескольким различным ресурсам с использованием семафоров может возникнуть специфическая проблема, называемая мертвой блокировкой (dead lock). Остановимся на ней несколько подробнее.(Тупик)


Процессор считывает номер и вызывает соответствующую процедуру из таблицы. При этом вызов обработчика прерывания отличается от вызова обычной процедуры: при обычном вызове в стеке сохраняется только адрес команды, на которую следует возвратить управление.

При завершении процедуры обработки вызывается команда RTI (ReTurn from Interrupt - возврат из прерывания). Эта команда выталкивает из стека адрес прерванной команды и старое слово состояния.

Блокировка участков файлов

Если говорить именно о файле с базой данных, оказывается удобно блокировать доступ к участкам файла. При этом целесообразно ввести два типа блокировок: на чтение и на запись. Блокировка на чтение разрешает другим процессам читать из заблокированного участка и даже ставить туда такую же блокировку, но запрещает писать в этот участок и, тем более, блокировать его на запись. Этим достигается уверенность в том, что структуры данных, считываемые из захваченного участка, никем не модифицируются, поэтому гарантирована их целостность и непротиворечивость.

В свою очередь, блокировка на запись запрещает всем, кроме блокирующего процесса, любой доступ к заблокированному участку файла. Это означает, что данный участок файла сейчас будет модифицироваться, и целостность данных в нем не гарантирована.

В UNIX возможны два режима блокировки: допустимая (advisory) и обязательная (mandatory). Как та, так и другая блокировка может быть блокировкой на чтение либо на запись. Допустимая блокировка является ``блокировкой для честных'': она не оказывает влияния на подсистему ввода/вывода, поэтому программа, не проверяющая блокировок или игнорирующая их, сможет писать или читать из заблокированного участка без проблем. Обязательная блокировка требует больших накладных расходов, но запрещает физический доступ к файлу: чтение или запись, в зависимости от типа блокировки.

Семафоры смотри билет 22

Очевидно, что если мы захотим ''сдвинуть'' прогу по адресам виртуальной памяти, то мы должны будем найти все команды с абсолютными адресными полями и прибавить ко всем этим полям разность нового и старого адресов. 2: мы берем значение одного из регистров процессора, прибавляем к нему значение адресного поля и получаем адрес.Такая адресация называется базовой. Если адрес формируется сложением двух или более регистров c адресным полем, то это называется базово-индексной адресацией. В более сложных ситуациях мы должны: запомнить все места в программе, где загружаются базовые регистры, и добавить к загружаемым значениям новый стартовый адрес. Преимущество состоит в том, что таких мест в программе гораздо меньше, чем при абсолютной адресации. В перемещаемой программе мы должны запоминать все ссылки на абсолютные адреса и в момент загрузки производить их настройку на начальный адрес. Такой файл гораздо сложнее абсолютного загружаемого модуля, и носит название относительного или перемещаемого загрузочного модуля. Именно такой формат имеют .exe-файлы в системе ms-dos. оверлей (over-lay - лежащий сверху) или перекрытие. Смысл оверлея состоит в том, чтобы не загружать программу в память целиком, а разбить ее на несколько модулей и затаскивать их в память по мере необходимости. Потребность в таком способе загрузки появляется, если у нас виртуальное адресное пространство мало, а программа велика. Основная проблема при оверлейной загрузке состоит в следующем: прежде чем ссылаться на оверлейный адрес, мы должны понять, какой из оверлейных модулей в данный момент там находится. Для ссылок на функции это просто: вместо точки входа функции мы вызываем некую процедуру, называемую менеджером перекрытий. Эта процедура знает, какой модуль куда загружен, и при необходимости подкачивает то, что загружено не было. Каждый оверлейный модуль должен быть самодостаточным. Каждый оверлейный модуль может быть как абсолютным, так и перемещаемым.


Процесс – абстракция, описывающая выполняющуюся программу. Для операционной системы процесс представляет собой единицу работы, заявку на потребление системных ресурсов. Подсистема управления процессами планирует выполнение процессов, то есть распределяет процессорное время между несколькими одновременно существующими в системе процессами, а также занимается созданием и уничтожением процессов, обеспечивает процессы необходимыми системными ресурсами, поддерживает взаимодействие между процессами.

Состояние процессов: в многозадачной системе процесс может находиться в одном из трех основных состояний:

ВЫПОЛНЕНИЕ - активное состояние процесса, во время которого процесс обладает всеми необходимыми ресурсами и непосредственно выполняется процессором;

ОЖИДАНИЕ - пассивное состояние процесса, процесс заблокирован, он не может выполняться по своим внутренним причинам, он ждет осуществления некоторого события, например, завершения операции ввода-вывода, получения сообщения от другого процесса, освобождения какого-либо необходимого ему ресурса;

ГОТОВНОСТЬ - также пассивное состояние процесса, но в этом случае процесс заблокирован в связи с внешними по отношению к нему обстоятельствами: процесс имеет все требуемые для него ресурсы, он готов выполняться, однако процессор занят выполнением другого процесса.

В ходе жизненного цикла каждый процесс переходит из одного состояния в другое в соответствии с алгоритмом планирования процессов, реализуемым в данной операционной системе. Типичный граф состояний процесса показан на рисунке.

В состоянии ВЫПОЛНЕНИЕ в однопроцессорной системе может находиться только один процесс, а в каждом из состояний ОЖИДАНИЕ и ГОТОВНОСТЬ - несколько процессов, эти процессы образуют очереди соответственно ожидающих и готовых процессов. Жизненный цикл процесса начинается с состояния ГОТОВНОСТЬ, когда процесс готов к выполнению и ждет своей очереди. При активизации процесс переходит в состояние ВЫПОЛНЕНИЕ и находится в нем до тех пор, пока либо он сам освободит процессор, перейдя в состояние ОЖИДАНИЯ какого-нибудь события, либо будет насильно "вытеснен" из процессора, например, вследствие исчерпания отведенного данному процессу кванта процессорного времени. В последнем случае процесс возвращается в состояние ГОТОВНОСТЬ. В это же состояние процесс переходит из состояния ОЖИДАНИЕ, после того, как ожидаемое событие произойдет.


В состоянии ВЫПОЛНЕНИЕ в однопроцессорной системе может находиться только один процесс, а в каждом из состояний ОЖИДАНИЕ и ГОТОВНОСТЬ - несколько процессов, эти процессы образуют очереди соответственно ожидающих и готовых процессов. Жизненный цикл процесса начинается с состояния ГОТОВНОСТЬ, когда процесс готов к выполнению и ждет своей очереди. При активизации процесс переходит в состояние ВЫПОЛНЕНИЕ и находится в нем до тех пор, пока либо он сам освободит процессор, перейдя в состояние ОЖИДАНИЯ какого-нибудь события, либо будет насильно "вытеснен" из процессора, например, вследствие исчерпания отведенного данному процессу кванта процессорного времени. В последнем случае процесс возвращается в состояние ГОТОВНОСТЬ. В это же состояние процесс переходит из состояния ОЖИДАНИЕ, после того, как ожидаемое событие произойдет.


. Очевидно, что если мы захотим ''сдвинуть'' прогу по адресам виртуальной памяти, то мы должны будем найти все команды с абсолютными адресными полями и прибавить ко всем этим полям разность нового и старого адресов. 2: мы берем значение одного из регистров процессора, прибавляем к нему значение адресного поля и получаем адрес. Такая адресация называется базовой. Если адрес формируется сложением двух или более регистров c адресным полем, то это называется базово-индексной адресацией. В более сложных ситуациях мы должны: запомнить все места в программе, где загружаются базовые регистры, и добавить к загружаемым значениям новый стартовый адрес. Преимущество состоит в том, что таких мест в программе гораздо меньше, чем при абсолютной адресации. В перемещаемой программе мы должны запоминать все ссылки на абсолютные адреса и в момент загрузки производить их настройку на начальный адрес. Такой файл гораздо сложнее абсолютного загружаемого модуля, и носит название относительного или перемещаемого загрузочного модуля. Именно такой формат имеют .exe-файлы в системе ms-dos. Загрузка ОС.  Рассмотрим на примере UNIX. Имеется специальная инициализационная программа, которая так и называется - init. Эта программа запускает различные процессы-демоны, например cron - программу, которая умеет запускать другие заданные ей программы в заданные моменты времени, различные сетевые сервисы, программы, которые ждут ввода с терминальных устройств (getty) то, что она запускает задается в специальном файле /etc/inittab. Администратор системы может редактировать этот файл и устанавливать те сервисы, которые в данный момент нужны, избавляться от тех, которые не нужны, и т.д. Существуют ОСы, которые не умеют самостоятельно выполнять весь цикл . Они используют более примитивную операционную систему, которая исполняет их вторичный загрузчик, и помогает этому загрузчику затянуть в память ядро ОС. На пример MS Windows используют DOS.


Страницы: 1, 2, 3, 4, 5, 6, 7, 8



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.