Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Операционные системы

означает, что нужно прочесть ИД родителя и по нему добраться до  содержимого
каталога А. Затем в файле-каталоге А  надо  выбрать  строку  с  именем  В  и
определить ИД файла В, а затем произвести открытие файла. Вся  эта  операция
довольно трудоемка, однако учитывая то, что файлы открываются не часто,  это
не будет сказываться на скорости работы системы.
      Мы говорили, что с одним и тем  же  содержимым  может  ассоциироваться
несколько имен, т.е. одновременно могут быть открыты файлы с одним и тем  же
ИД. Возникает проблема - как синхронизируется работа с  содержимым  файла  в
случае его открытия разными процессами или с разными именами. В  UNIX-е  это
решается достаточно корректно (это мы рассмотрим несколько позже).

Специальные файлы устройств

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

Организация обмена данными с файлами

      Определим  сначала,  что  является  низкоуровневым  вводом/выводом   в
системе.  В  файловой  системе  UNIX-а  определены   некоторые   специальные
функции,  которые   называются   системными   вызовами.   Системные   вызовы
осуществляют непосредственное обращение к операционной системе, то есть  это
функции, выполняющие некоторые  действия  операционной  системы.  Реализация
системных  и  библиотечных  функций  (например,  математических)   в   корне
отличается. Если библиотечная функция  будет  подгружена  в  тело  процесса,
который пользуется этой библиотекой, то все действия в  большинстве  случаев
будут выполняться в пределах этого процесса,  а  системный  вызов  сразу  же
передает  управление  операционной  системе  и  она   выполняет   заказанное
действие.  В  UNIX-е  для  обеспечения  низкоуровнего   ввода/вывода,   т.е.
ввода/вывода, который реализуется  посредством  системных  вызовов,  имеется
набор функций. Вот основные из них:
    1. open - Открытие имеющегося файла. Одним из  параметров  этой  функции
       является строка с именем файла, а  возвращает  она  некоторое  число,
       которое называется дескриптором файла. В теле процесса  пользователя,
       а также в  данных,  ассоциированных  с  этим  процессом,  размещается
       (кроме кода и данных, разумеется) некоторая служебная  информация,  в
       частности, таблица файловых дескрипторов. Она, как и  все  таблицы  в
       системе  UNIX,  позиционная,  т.е.  номер  дескриптора  соответствует
       номеру  записи  в  этой  таблице.  С   файловым   дескриптором   (ФД)
       ассоциировано имя файла и все необходимые атрибуты для работы с  ним.
       Номера ФД  уникальны в пределах  одного  процесса.  Есть  аналогичная
       функция create - функция открытия нового файла.
    2. read/write -  системные  вызовы  чтения/записи,  параметрами  которых
       является номер ФД и некоторые атрибуты,  которые  не  так  важны  для
       нашего рассмотрения.
    3. close -  системный  вызов  завершения  работы  с  файлом,  параметром
       которого является  номер  ФД.  После  обращения  к  этой  функции  ФД
       становится свободным, а работа данного процесса с файлом завершается.


      Вот некоторые системные вызовы, обеспечивающие ввод/вывод (кстати, они
почти  не  добавляют  кода  к  вашей  программе).   Подробности   посмотрите
самостоятельно. Я обратил ваше внимание, что это  системные  вызовы,  потому
что ввод/вывод можно  осуществлять  и  через  библиотеки  ввода/вывода.  Для
этого существует, так называемый, файловый обмен и функции fopen,  fread,  и
т.д. (с префиксом f). Это библиотечные функции. Эти функции сами  обращаются
к низкоуровневым функциям внутри себя.
      Рассмотрим организацию обмена с системной точки зрения в  операционной
системе UNIX.  При  организации  обмена  операционная  система  подразделяет
данные на две категории: данные, ассоциированные с  процессом  пользователя,
и данные, ассоциированные с операционной системой.

      Таблица индексных дескрипторов открытых файлов. Первая таблица данных,
ассоциированных с операционной системой, -  таблица  индексных  дескрипторов
открытых файлов (ТИДОФ). Эта таблица  содержит  записи,  каждая  из  которых
содержит копию  индексного  дескриптора  для  каждого  открытого  в  системе
файла. Через  эту  копию  осуществляется  доступ  к  блокам  файлов.  Каждая
записей таблицы содержит также поле, характеризующее количество  открытых  в
системе файлов, использующих данный  дескриптор  (счетчик).  То  есть,  если
один и тот же файл открыт  от  имени  двух  процессов,  то  запись  в  ТИДОФ
создается одна, но каждое дополнительное открытие  этого  файла  увеличивает
счетчик на единицу.

      Таблица файлов. Таблица  файлов  (ТФ)  содержит  информацию  об  имени
открытого файла, и имеет ссылку на ТИДОФ.
                                  Лекция №9

      Мы говорили, что система может работать с содержимым  файла  в  том  и
только том случае, если процесс  зарегистрировал  свое  желание  работать  с
этим  файлом.  Факт  такой  регистрации  называется  открытием  файла.   При
открытии  файла  в  пределах  процесса  каждому  имени  открываемого   файла
(открываться  может  уже  существующий  файл,   либо   новый)   ставится   в
соответствие   уникальное   целое   число,   которое   называется   файловым
дескриптором (ФД). В пределах процесса ФД  имеют  нумерацию  от  0  до  k-1.
Значение k - это  параметр  настройки  операционной  системы,  определяющий,
какое количество одновременно открытых файлов может быть у  процесса.  Здесь
следует отметить, что мы говорим о количестве одновременно  открытых  файлов
(так же написано в любой книжке по UNIX-у), однако, на самом деле, k  -  это
максимальное  количество  ФД,  которые  могут  быть  ассоциированы  с  одним
файлом, потому что один и тот же файл в пределах процесса можно открыть  два
раза, и образуется два ФД. К чему  это  приведет,  мы  рассмотрим  несколько
позже, но это вполне корректно. После открытия файла,  все  операции  обмена
осуществляются через указания файлового дескриптора (т.е.  имя  более  нигде
не указывается). С каждым файловым дескриптором ассоциирован ряд  параметров
(о них чуть позже).
      Давайте посмотрим, как организуется  ввод/вывод,  а  точнее  обработка
низкоуровнего обмена, с точки  зрения  операционной  системы.  Сейчас  будет
рассказано о логической схеме организации ввода/вывода, ибо  реальная  схема
устроена несколько иначе, но это для нас не так важно.
      Все данные,  с  которыми  оперирует  система,  подразделяются  на  два
класса.  Первый  тип  данных  -  данные,  ассоциированные   с   операционной
системой, то есть общесистемные  данные.  К  этим  данным  относится  ТИДОФ.
Размер таблицы фиксирован и определяется количеством  одновременно  открытых
ФД. Каждая запись  в  этой  таблице  содержит  некоторую  информацию,  среди
которой нас будет интересовать следующая:
     1) Копия ИД открытого файла. Для любого открытого  файла,  ИД,  который
        характеризует содержимое этого файла,  копируется  и  размещается  в
        ТИДОФ. После этого все манипуляции  с  файлом  (например,  изменение
        адресации файла) происходят с копией ИД, а не с самим ИД  на  диске.
        ТИДОФ размещается в оперативной памяти, т.е. доступ к  информации  в
        ней осуществляется быстро.
     2) Счетчик открытых в данный момент файлов, связанных с данным ИД.  Это
        означает, что для любого количества  открытий  файла,  связанного  с
        данным ИД, система работает с единственной копией этого ИД.

      Теперь перейдем к, так называемой, таблице файлов (ТФ). Таблица файлов
состоит   из   фиксированного   количества   записей.   Каждая   запись   ТФ
соответствует открытому в системе  файлу  {{или  точнее  ФД}}.  При  этом  в
подавляющем большинстве случаев это есть взаимно  однозначное  соответствие.
Тот  случай,  когда  это  не  есть  взаимно  однозначное  соответствие,   мы
рассмотрим ниже.  Каждая  запись  ТФ  содержит  указатели  чтения/записи  по
файлу. Это означает, что, если открыт один и тот же файл  в  двух  процессах
или дважды в одном процессе, то с каждым открытием связан свой указатель,  и
они друг от  друга  не  зависят  (почти  всегда,  за  исключением  некоторых
случаев).   Каждая   запись   ТФ   содержит,    так    называемый,    индекс
наследственности - это есть некоторое целое число.
      Это данные уровня операционной системы, т.е. данные, которые описывают
состояние проблемы в системе в целом.
      С каждым процессом связана, так называемая,  таблица  открытых  файлов
(ТОФ). Номер записи в данной таблице  есть  номер  ФД.  Каждая  строка  этой
таблицы имеет  ссылку  на  соответствующую  строку  ТФ.  Это  означает,  что
информация об  указателях,  связанных  с  ФД,  как  бы  разорвана.  С  одной
стороны, файловые дескрипторы - это данные, являющиеся  атрибутом  процесса,
с другой сторон
Пред.678910След.
скачать работу

Операционные системы

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ