Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Ввод и вывод данных можно осуществлять тремя различными способами. Простейший метод состоит в том, что пользовательская программа выдает системный запрос, который ядро транслирует в вызов процедуры соответствующего драйвера. Затем драйвер начинает процесс ввода-вывода. В это время драйвер выполняет очень короткий программный цикл, постоянно опрашивая готовность устройства, с которым он работает (обычно есть некий бит, который указывает на то, что устройство все еще занято). По завершении операции ввода-вывода драйвер помещает данные туда, куда требуется, и возвращается в исходное состояние. Затем операционная система возвращает управление программе, осуществлявшей вызов. Этот метод называется ожиданием готовности или активным ожиданием и имеет один недостаток: процессор должен опрашивать устройство до тех пор, пока оно не завершит свою работу.
При втором способе драйвер запускает устройство и просит его выдать прерывание по окончании ввода-вывода. После этого драйвер возвращает данные, операционная система блокирует программу вызова, если это нужно, и начинает выполнять другие задания. Когда контроллер обнаруживает окончание передачи данных, он генерирует прерывание, чтобы сигнализировать о завершении операции.
Прерывания очень важны в работе операционной системы, поэтому рассмотрим это понятие более внимательно. На рисунок 1, а показан трехшаговый процесс ввода-вывода. На первом шаге драйвер передает команду контроллеру, записывая информацию в регистры устройства. Затем контроллер запускает устройство. Когда контроллер заканчивает чтение или запись того количества байтов, которое ему было указано передать, он посылает сигнал микросхеме контроллера прерываний, используя определенные провода шины, — это шаг 2. На шаге 3, если контроллер прерываний готов к приему прерывания (а этого может и не быть, если он занят прерыванием более высокого приоритета), то он подает сигнал на определенный контакт процессора, таким образом информируя центральный процессор. На шаге 4 контроллер прерываний выставляет номер устройства на шину так, чтобы центральный процессор мог прочесть его и узнать, какое устройство только что завершило свою работу (ведь в одно и то же время могут работать несколько устройств).
Рисунок 1 - Действия, выполняемые при запуске устройства ввода-вывода и получении прерывания (а); обработка прерывания включает в себя получение прерывания, переход к обработчику прерываний и возврат к программе пользователя (б)
Как только центральный процессор решил принять прерывание, содержимое счетчика команд (PC) и слова состояния процессора (PSW) помещается в текущий стек, а процессор переключается в режим работы ядра. Номер устройства может использоваться как индекс части памяти, служащий для поиска адреса обработчика прерываний данного устройства. Эта часть памяти называется вектором прерываний. Когда обработчик прерываний (это часть драйвера устройства, пославшего прерывание) начинает свою работу, он удаляет расположенные в стеке счетчик команд и слово состояния процессора, сохраняет их и запрашивает устройство, чтобы получить информацию о его состоянии. После того как обработка прерывания целиком завершена, управление возвращается к работавшей до этого программе пользователя, к той команде, выполнение которой еще не было закончено. Описанные шаги показаны на рисунок 1, б.
Третий метод ввода-вывода информации заключается в использовании специального контроллера прямого доступа к памяти (DMA, Direct Memory Access), который управляет потоком битов между оперативной памятью и некоторыми контроллерами без постоянного вмешательства центрального процессора. Процессор вызывает микросхему DMA, говорит ей, сколько байтов нужно передать, сообщает адреса устройства и памяти, а также направление передачи данных и позволяет дальше действовать ей самой. По завершении работы DMA инициирует прерывание, которое обрабатывается так же, как было описано выше.
Прерывания часто происходят в очень неподходящие моменты, например во время обработки другого прерывания. По этой причине центральный процессор обладает возможностью запрещать прерывания и разрешать их позже. Пока прерывания запрещены, все устройства, завершившие работу, продолжают посылать свои сигналы, но работа процессора не прерывается до тех пор, пока прерывания не будут разрешены. Если заканчивают работу сразу несколько устройств в то время, когда прерывания запрещены, контроллер прерываний решает, какое из них должно быть обработано первым, обычно основываясь на статических приоритетах, назначенных для каждого устройства. Устройство с высшим приоритетом побеждает.
Файлы
Под файлом понимают именованный набор данных, организованных в виде совокупности записей одинаковой структуры. Для управления этими данными создаются соответствующие файловые системы.
Основной функцией операционной системы является предоставление пользователя понятной и удобной абстрактной модели независимых от устройств файлов. Системные вызовы необходимы для создания, удаления, чтения или записи файлов. Перед тем, как прочитать файл, его нужно разместить на диске и открыть, а после прочтения его надо закрыть. Все эти функции осуществляют системные вызовы.
Предоставляя место для хранения файлов, операционные системы используют понятие каталога (directory) как способ объединения файлов в группы. Для создания и удаления каталога также необходимы системные вызовы. Они же обеспечивают перемещение файла в каталог и удаление файла из каталога. Содержимое каталога могут составлять файлы или другие каталоги. Эта модель создает структуру — файловую систему.
Иерархии процессов и файлов организованы в виде деревьев, но на этом сходство заканчивается. Иерархия процессов обычно не очень глубока (в ней редко бывает больше трех уровней), тогда как файловая структура часто имеет 4, 5 и больше уровней в глубину. Иерархия процессов как правило живет недолго (несколько минут), тогда как иерархия каталогов может существовать годами. Принадлежность и защита также различны для процессов и файлов. Обычно только родительский процесс может управлять или даже просто иметь доступ к дочернему процессу, однако практически всегда существует механизм, позволяющий читать файлы и каталоги не только владельцу файла, но и более широкой группе пользователей.
Каждый файл в иерархии каталогов можно изменить, задав его имя пути, называемое также полным именем файла. Путь начинается из вершины структуры каталогов, называемой корневым каталогом. Такое абсолютное имя пути состоит из списка пути, который надо пройти от корневого каталога к файлу, с разделением отдельных компонентов косой чертой. Например, на рисунке путь к файлу CS101 выглядит как /Faculty/Prof.Brown/Courses/CS101. Первая косая черта говорит, что этот путь — абсолютный, то есть начинается от корневого каталога.
В каждый момент времени у каждого процесса есть свой рабочий каталог, в котором ищутся пути файлов, не начинающиеся с косой черты. То есть использование пути Courses/CS101 даст тот же самый файл, что и абсолютный путь, написанный выше. Процессы могут изменять свой рабочий каталог, используя системные вызовы.
Перед тем, как прочесть или записать файл, его нужно открыть, в это же время проверяется разрешение доступа. Если доступ разрешен, система возвращает небольшое целое число, называемое дескриптором файла и используемое в последующих операциях. Если доступ запрещен, то возвращается код ошибки.
Файловую систему сменного диска можно присоединять к главному дереву. Сначала корневая система на жестком диске и вторая корневая система на сменном носителе никак не связаны между собой. Но файлы на диске нельзя использовать, т.к. для них невозможно определить путь. Системный вызов позволяет присоединить файловую систему на диске к корневой файловой системе в том месте, где этого захочет программа. Если система содержит несколько жестких дисков, все они могут быть встроены в общее дерево таким же образом.
Специальные файлы — служат для того, чтобы устройства ввода-вывода выглядели как файлы. При этом можно прочесть информацию из специальных файлов или записать ее туда с помощью тех же самых системных вызовов, которые используются для чтения и записи файлов. 2 вида специальных файлов — блочные и символьные специальные файлы. Блочные — используются для моделирования устройств, состоящих из набора произвольно адресуемых блоков (напр, диски). Открывая блочный спец.файл и читая, например, блок 4, программа может получить доступ к 4 блоку напрямую на устройстве, без обращения к содержащейся на нем файловой системе. Таким же образом символьные файлы используются для моделирования принтеров, модемов и других устройств, которые принимают или выдают поток символов.
Канал — это псевдофайл, который можно использовать для связи двух процессов. Если процессы А и В захотят пообщаться с помощью канала, они должны установить его заранее. Когда процесс А хочет отправить данные процессу В, он пишет их в канал, как если бы это был выходной файл. Процесс В может прочесть данные, читая их из канала, как если бы он был файлом с входными данными.
Дата публикования: 2015-01-26; Прочитано: 531 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!