Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Shpori_na_ekzamen_OS

.pdf
Скачиваний:
38
Добавлен:
17.03.2016
Размер:
5.45 Mб
Скачать

11

2.4.Устройства ввода-вывода + Понятия «контроллер», «драйвер»

Устройства ввода-вывода обычно состоят из двух частей:

1)контроллера

2)самого устройства.

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

Устройства имеют достаточно простые интерфейсы, во-первых, потому что их возможности весьма невелики и, во-вторых, потому что нужно привести их к единому стандарту. Единый стандарт необходим, чтобы любой IDE-контроллер диска мог управлять любым IDE-диском. Аббревиатура IDE образована от Integrated Drive Electronics (встроенный интерфейс накопителей). IDE-интерфейс является стандартным для дисков на компьютерах с процессором Pentium, а также некоторых других компьютерах.

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

Ввод и вывод данных можно осуществлять тремя различными способами. Простейший метод состоит в том, что

1)пользовательская программа выдает системный запрос, который ядро транслирует в вызов процедуры соответствующего драйвеpa.

2)Затем драйвер начинает процесс ввода-вывода.

3)В это время драйвер выполняет очень короткий программный цикл, постоянно опрашивая готовность устройства, с которым он работает.

4)По завершении операции ввода-вывода драйвер помещает данные туда, куда требуется, и возвращается в исходное состояние.

5)Затем операционная система возвращает управление программе, осуществлявшей вызов.

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

При втором способе

1)драйвер запускает устройство и просит его выдать прерывание по окончании ввода-вывода.

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

3)Когда контроллер обнаруживает окончание передачи данных, он генерирует прерывание, чтобы сигнализировать о завершении операции.

Третий метод ввода-вывода информации заключается в использовании специального контроллера прямого доступа к памяти (DMA, Direct Memory Access), который управляет потоком битов между оперативной памятью и некоторыми контроллерами без постоянного вмешательства центрального процессора. Процессор вызывает микросхему DMA, говорит ей, сколько байтов нужно передать, сообщает адреса устройства и памяти, а также направление передачи данных и позволяет дальше действовать ей самой. По завершении работы DMA инициирует прерывание.

12

2.5.Шины

Поскольку процессоры и память стали работать быстрее, возможности одной шины (и, конечно, шины IBM PC) по управлению всей передачей данных достигли своего предела. Нужно было что-то делать. В результате в систему добавились дополнительные шины. Вследствие этой эволюции сейчас большая система Pentium выглядит примерно так, как изображено на рис. 1.3

У этой системы восемь шин (шина кэша, локальная шина, шина памяти, PCI, SCSI, USB, IDE и ISA), каждая со своей скоростью передачи данных и своими функциями. В операционной системе для управления компьютером и его конфигурации должны находиться сведения обо всех этих шинах.

Две основные шины — это ISA (Industry Standard Architecture — промышленная стандартная архитектуpa), оригинальная шина компьютера IBM PC, и ее преемник, шина

PCI (Peripheral Component Interconnect — интерфейс периферийных устройств).

Шина ISA работает на частоте 8,33 МГц и может передавать два байта за такт с максимальной скоростью 16,67 Мбайт/с. Она включена в систему для обратной совместимости со старыми медленными платами ввода-вывода.

Шина PCI была создана компанией Intel в качестве преемницы шины ISA. Она может работать на частоте 66 МГц и передавать сразу по 8 байт за такт со скоростью 528 Мбайт/с. Кроме того, в систему входят три специализированные шины: IDE, USB и SCSI.

Шина IDE служит для присоединения периферийных устройств к системе — дисков и устройств для чтения компакт-дисков (CD-ROM).

Шина USB (Universal Serial Bus — универсальная последовательная шина) была придумана для того, чтобы присоединить к компьютеру все медленные устройства вводавывода, такие как клавиатура и мышь.

SCSI (Small Computer System Interface — системный интерфейс малых компьютеров) — это высокопроизводительная шина, применяемая для быстрых дисков, сканеров и других устройств, нуждающихся в значительной пропускной способности. Ее производительность достигает 160 Мбайт/с.

Есть еще одна шина, называется IEEE 1394. Как и USB, IEEE 1394 является битпоследовательной шиной, но она поддерживает пакетную передачу данных со скоростью, достигающей 50 Мбайт/с. Это ее свойство позволяет подключать к компьютеру портативные цифровые видеокамеры и тому подобные мультимедийные устройства.

13

2.6.Способы защиты информации в памяти компьютера + Диспетчер памяти ММИ

Защита программ друг от друга и их перемещение

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

Компьютер оборудован двумя специальными регистрами:

1)базовым

2)предельным.

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

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

устройством управления памятью или диспетчером памяти (MMU, Memory Management Unit). Диспетчер памяти располагается или в схеме процессора, или близко к ней, но логически находится между процессором и памятью.

2.7.Понятия физический и виртуальный адрес

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

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

В ЭВМ первого поколения не делалось различия между виртуальными и физическими адресами: в программе требовалось указывать физические адреса. Это означало, что такая программа могла правильно работать, только если сама программа и все ее данные при каждом запуске (и на любом компьютере) должны были размещаться по одним и тем же физическим адресам. Такой подход стал крайне неудобным, как только была поставлена задача передать распределение памяти под управление ОС.

14

2.8.Понятие «Прерывание», механизм прерываний, обработка прерываний, вектор

прерываний

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

Если произошло прерывание, то:

1)управление передается ОС;

2)ОС запоминает состояние прерванного процесса;

3)ОС анализирует тип прерывания и передает управление соответствующей программе обработки этого прерывания.

Инициатор – выполняющийся процесс или некоторое событие, связанное или несвязанное с этим процессом.

Типы прерываний:

- SVC-прерывания (инициатор – работающий процесс, который выполняет команду SVC). Команда SVC – это генерируемый программой пользователя запрос на предоставление конкретной системы услуги. Механизм SVC защищает ОС от пользователя;

-прерывания ввода-вывода (инициатор – аппаратура ввода-вывода; сигнализирует ЦП о том, что произошло изменение состояния канала или устройств);

-внешние прерывания (причина – различные события, в том числе истечение кванта времени, заданного на таймере прерываний, нажатие оператором клавиши прерываний на пульте прерывания или прием сигнала прерывания от другого процессора в мультипроцессорной системе);

-прерывания по рестарту (когда оператор нажимает на пульте управления кнопку рестарта или когда от другого процессора в мультипроцессорной системе поступает команда рестарта SIGP (сигнал процессору);

-прерывания по контролю (ошибке) программы (вызываются различными видами ошибок, обнаруженными в выполняющемся процессе).

Обработка прерываний

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

определить

успешность

завершения

операции,

проверив

значение

бита

ошибки в регистре состояния устройства.

 

 

 

 

15

2.9.Контроллер прямого доступа к памяти DMA + Шинная система обмена информацией

Для освобождения процессора от операций последовательного вывода данных из оперативной памяти или последовательного ввода в нее был предложен механизм прямого доступа внешних устройств к памяти – ПДП или Direct Memory Access – DMA.

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

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

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

2.10. Ресурсы компьютерной системы

16

3. Процессы и потоки

3.1. Процессы, их состояния, иерархия, операции над процессами, таблица

процессов, блоки управления процессами

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

Переход из состояния в состояние

Смена состояния процесса – когда он переходит из состояния готовности в состояние выполнения. Предоставление ЦП первому процессу в списке готовых процессов называется запуском или выбором процесса для выполнения.

Это делается с помощью системной программы, называемой

диспетчером

Чтобы предотвратить монопольный захват ресурсов одним процессом, ОС устанавливает в специальном таймере прерываний квант времени, в течение которого процессу разрешено занимать ЦП. Если процесс до истечения кванта времени не освободит ЦП, таймер выдает прерывание, по которому управление передается ОС. ОС переводит его в состояние готовности, а первый процесс из списка готовых в выполнение.

Если выполняющийся процесс до истечении своего кванта инициирует операцию в/в, добровольно освобождая ЦП, то он сам себя блокирует в ожидании завершения в/в. Когда эта операция завершится, процесс перейдет из состояния блокировки в состояние готовности – это называется пробуждением.

Блок управления процессом (PCB)

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

x состояние, в котором находится процесс;

x программный счетчик процесса или, другими словами, адрес команды, которая должна быть выполнена для него следующей;

x содержимое регистров процессора;

xданные, необходимые для планирования использования процессора и

управления памятью (приоритет процесса, размер и расположение адресного

пространства и т. д.);

x учетные данные (идентификационный номер процесса, какой пользователь инициировал его работу, общее время использования процессора данным

процессами т. д.);

x сведения об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом, таблицу открытых файлов).

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

17

находящегося в вычислительной системе, вся информация, необходимая для совершения операций над ним, доступна операционной системе. Для простоты изложения будем считать, что она хранится в одной структуре данных. Мы будем называть ее PCB (Process Control Block) или блоком управления процессом. Блок управления процессом является моделью процесса для операционной системы. Любая операция, производимая операционной системой над процессом, вызывает определенные изменения в PCB. В рамках принятой модели состояний процессов содержимое PCB между операциями остается постоянным.

Операции над процессами

Создание, уничтожение, возобновление, изменение приоритета, блокирование, пробуждение, запуск процесса.

1)Создание:

-присвоение имени;

-включение имени в список имен процессов;

-определение начального приоритета;

-формирование блока управления PCB;

-выделение начальных ресурсов.

Процесс может породить новый процесс, тогда порождающий процесс называется

родительским, а созданный – дочерним. Это иерархическая структура процесса, в

которой у дочернего процесса может быть только один родительский, а у родительского много дочерних.

2)Уничтожение – удаление из системы. Ресурсы, выделенные ему, возвращаются системе, имя процесса во всех системных списках и таблицах стирается, и блок управления освобождается. Если уничтожается родительский процесс, то в некоторых системах удаляется и дочерний, а в некоторых он начинает существовать независимо.

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

4)Возобновление - операция подготовки процесса к повторному запуску с точки его приостановки.

5)Изменение приоритета – модификация значения приоритета в блоке управления данным процессом.

Приостановка и возобновление важны потому что:

1)если система ненадежна, то текущие процессы можно приостановить, чтобы восстановить после исправления ошибки;

2)если отдельные промежуточные результаты могут быть неправильными, то выполняется приостановка (а не отключается совсем) до выяснения, правильно ли работает процесс;

3)приостановка в пики нагрузки.

Ядро ОС, его функции

Все операции, связанные с процессами, выполняются под управлением ядра. Оно размещается в основной памяти.

Важная функция – обработка прерываний. Когда ядро обрабатывает текущее прерывание, оно запрещает другие прерывания и разрешает их вновь после завершения обработки текущего прерывания.

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

У потока Счетчик команд Регистры Стек
Состояние

18

3.2. Потоки, их атрибуты, использование и реализация потоков

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

Применение потоков

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

Вторым аргументом в пользу потоков является легкость (то есть быстрота) их создания и ликвидации по сравнению с более «тяжеловесными» процессами.

Третий аргумент также касается производительности. Когда потоки работают в рамках одного ЦП, они не приносят никакого прироста производительности, но когда проводятся значительные вычисления, а также значительная часть времени тратится на ожидание вводавывода, наличие потоков позволяет этим действиям перекрываться по времени, ускоряя работу приложения.

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

Классическая модель потоков

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

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

Использование объектов потоками

У процесса Адресное пространство

Глобальные переменные Открытые файлы Дочерние процессы

Необработанные аварийные сигналы Сигналы и обработчики сигналов Учетная информация

Подобно традиционному процессу (то есть процессу только с одним потоком), поток должен быть в одном из следующих состояний: выполняемый, заблокированный, готовый или завершенный. Выполняемый поток занимает ЦП и является активным в данный момент. Заблокированный поток ожидает событие, которое его разблокирует. Готовый поток планируется к выполнению и будет выполнен, как только подойдет его очередь.

19

Реализация потоков в пользовательском пространстве

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

Когда поток совершает какие-то действия, которые могут вызвать его локальную блокировку, например ожидание, пока другой поток его процесса не завершит какую-

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

Но, несмотря на лучшую производительность, у потоков, реализованных на пользовательском уровне, есть ряд существенных проблем. Первая из них — как реализовать блокирующие системные вызовы.

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

Реализация потоков в ядре

Здесь уже не нужна система поддержки исполнения программ. Также здесь нет и таблицы процессов в каждом потоке. Вместо этого у ядра есть таблица потоков, в которой отслеживаются все потоки, имеющиеся в системе. Когда потоку необходимо создать новый или уничтожить существующий поток, он обращается к ядру, которое затем производит создание или разрушение путем обновления таблицы потоков в ядре.

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

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

Гибридная реализация

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

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

20

4.Межпроцессное взаимодействие

4.1.Состояние состязания

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

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

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

взаимоисключением.

4.2. Критические области

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

4.3.Условия исключения состязания

1)Два процесса не должны одновременно находиться в критических областях.

2)В программе не должно быть предположений о скорости или количестве процессоров.

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

4)Невозможна ситуация, в которой процесс вечно ждет попадания в критическую область.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]