Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Суперблок



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

Суперблок содержит:

· тип файловой системы;

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

· размер массива индексных дескрипторов;

· количество свободных блоков;

· количество свободных индексных дескрипторов;

· флаги;

· размер логического блока файловой системы (512, 1024, 2048, 4096, 8192).

· список номеров свободных индексных дескрипторов;

· список адресов свободных блоков.

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

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

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

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

2 Процедура прерывания 1) Проверяется установка флажка IF (для немаскируемых прерываний этот пункт игнорируется): 1- прерывания разрешены, 0 - прерывания запрещены; 2) Если прерывание разрешено, то PUSHF PUSH CS PUSH IP 3) mov CS, mov IP, 4) После чего начинается выполнение программы обработки прерывания. 5) По завершению программы обработки: POP IP POP CS POPF Прерывание – это событие/сигнал, привлекающий внимание ЦП и заставляющий его изменить текущий порядок исполнения команд процесса. Существуют аппаратные и программные прерывания. Аппаратные прерывания инициируются аппаратурой (например, сигнал микросхемы таймера в IBM PC вырабатывается 18.2 раза в секунду), сигналом принтера, нажатием клавиш клавиатуры и многими другими причинами. Программные прерывания инициируются процессом и на самом деле ничего не прерывают. Это обычные процедуры, которые используются программами для выполнения стандартной рутиной работы. Однако, эти программы содержатся в ОС, и механизм прерываний дает возможность обратиться к ним из программ пользователей. Программные прерывания могут выдаваться внутри друг друга (быть вложенными). Например, аппаратные прерывания могут возникнуть при выполнении программных прерываний. Когда разрешенное прерывание вызывается, то ЦП оставляет свою работу, выполняет прерывание, а затем возвращается в место прерывания. Управляет прерываниями обработчик прерываний (Interrupt Handler) Обработка прерываний состоит в следующем:

1. При возникновении прерывания, управление передается в ОС.

2. ОС запоминает состояние прерванного процесса, обычно в PCB прерванного процесса.

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

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

1. Программы-прерывания по системной директиве. Инициатор – активный процесс, выполнивший команду SVC ( обращение к супервизору ), то есть запрос на предоставление ОС какой-либо системной вычислительной услуги.

2. Прерывания ввода-вывода. Инициируются устройством ввода/вывода (УВВ) и сигнализируют ЦП о том, что произошло изменение состояния канала ввода-вывода (КВВ) или УВВ (например: завершение операции, ошибка, переход устройства в состояние готовности).

3. Внешние прерывания. Причинами их является нажатие операторами клавиш на панели ЭВМ или прием сигнала прерывания от другого ЦП в мультипроцессорной системе, сигнала от модема.

4. Прерывание по рестарту. Нажатие оператором на панели управления кнопки рестарта или Reset.

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

6. Прерывания по контролю машины вызываются аппаратными ошибками.

Планирование процессов включает в себя решение следующих задач:

1. определение момента времени для смены выполняемого процесса;

2. выбор процесса на выполнение из очереди готовых процессов;

3. переключение контекстов "старого" и "нового" процессов. Первые две задачи решаются программными средствами и будут рассмотрены в следующих разделах, а последняя выполняется, как правило, аппаратно.

Билет 14.

1)Понятие системного вызова. Подсистема системных вызовов операционной системы.

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

вызовов (СВ), предоставляемых ОС. Чтобы на самом деле понять, что же делает, ОС,

следует подробно рассмотреть этот интерфейс. Системные вызовы, доступные в

интерфейсе, меняются от одной ОС к другой (хотя лежащая в их основе концепция

практически одинакова).

Существует проблема выбора между (1) неопределенными обобщениями («ОС

имеют системные вызовы для чтения файлов») и (2) какой-либо конкретной

системой («в UNIX существует СВ для чтения с тремя параметрами: один для задания

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

третий задает количество байтов, которое нужно прочитать»).

При втором способе следует проделать больше работы, но он обеспечивает лучшее

понимание того, что в реальности происходит в ОС. Несмотря на то, что это обсуждение

затрагивает конкретно стандарт POSIX (международный стандарт 9945-1), а,

следовательно, также и ОС UNIX, System V, BSD, Linux, MINIX и т. д., у большинства

других современных ОС есть СВ, выполняющие те же самые функции, хотя детали

могут быть различны. Так фактический механизм обращения к системным функциям

является в высокой степени машинно-зависимым и часто должен реализовываться на

ассемблере, существуют библиотеки процедур, делающие возможным обращение к

системным процедурам из программ на С и других языках с тем же успехом.

Полезно помнить следующее: Любой компьютер с одним процессором в каждый

конкретный момент времени может выполнить только одну команду. Если

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

системной службе, например чтении данных из файла, он должен выполнить

прерывание или команду СВ для передачи управления ОС. Затем ОС по параметрам

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

обрабатывает СВ и возвращает управление команде, следующей за СВ. В известном

смысле выполнение СВ похоже на осуществление вызова процедуры, только первый

проникает в ядро, а второй этого не делает.

Для того чтобы прояснить механизм СВ, кратко рассмотрим СВ read. Как упоминалось

выше, у него есть три параметра: первый служит для задания файла, второй указывает

на буфер, третий задает количество байтов, которое нужно прочитать. Как практически

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

с тем же именем, что и СВ: read. Вызов из программы на С может выглядеть так:

count = read(fd, buffer, nbytes);

СВ (и библиотечная процедура) возвращает количество действительно прочитанных

байтов в переменной count. Обычно эта величина совпадает с параметром nbytes, но

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

файла.

Если СВ не может быть выполнен или из-за неправильных параметров или из-за

дисковой ошибки, значение счетчика count устанавливается равным -1, а номер

ошибки помещается в глобальную переменную errno. Программы всегда должны

проверять результат СВ, чтобы отслеживать появление ошибки.

СВ выполняются за серию шагов. Вернемся к упоминавшемуся выше примеру вызова

read для того, чтобы разъяснить этот момент. Сначала при подготовке к вызову

библиотечной процедуры read, которая фактически осуществляет СВ read,

вызывающая программа помещает параметры в стек, как показано в шагах 1-З на

рис. 1. Компиляторы Си C++ помещают параметры в стек в обратном порядке, так

исторически сложилось (чтобы первым был параметр для printf, то есть строка

формата оказалась на вершине стека). Первый и третий параметры передаются по значению, а второй параметр передается по ссылке, то есть передается адрес буфера

(на то, что это ссылка, указывает символ &), а не его содержимое. Затем следует

собственно вызов библиотечной процедуры (шаг 4). Эта команда процессора

представляет собой обычную команду вызова процедуры и применяется для вызова

любых процедур.

Рис. 1. Этапы вызова системного вызова read(fd, buffer, nbytes)

Библиотечная процедура, возможно, написанная на ассемблере, обычно помещает

номер СВ туда, где его ожидает ОС, например в регистр (шаг 5). Затем она выполняет

команду TRAP (эмулированное прерывание) для переключения из пользовательского

режима в режим ядра и начинает выполнение с фиксированного адреса внутри ядра

(шаг 6). Запускаемая программа ядра проверяет номер СВ и затем отправляет его

нужному обработчику, как правило, используя таблицу указателей на обработчики СВ,

индексированную по номерам вызовов (шаг 7). В этом месте начинает

функционировать обработчик СВ (шаг 8). Как только он завершает свою работу,

управление может возвращаться в пространство пользователя к библиотечной

процедуре, к команде, следующей за командой TRAP (шаг 9). Эта процедура в свою

очередь передает управление программе пользователя обычным способом, которым

производится возврат из вызванной процедуры (шаг 10). Чтобы закончить работу,

программа пользователя должна очистить стек, как это делается и после каждого

вызова процедуры (шаг 11). Учитывая, что стек растет вниз, последняя команда

увеличивает указатель стека ровно настолько, насколько нужно для удаления

параметров, помещенных в стек перед запросом read. Теперь программа может

продолжать свою работу.

На шаге 9 использовалось выражение «может возвращаться в пространство

пользователя к библиотечной процедуре...» не просто так. СВ может блокировать

вызвавшую его процедуру, препятствуя продолжению ее работы. Например, если она

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

должна быть блокирована. В этом случае ОС ищет процесс, который может быть

запущен следующим. Позже, когда нужное устройство станет доступно, система

вспомнит о блокированном процессе и шаги 9-11 будут выполнены.

В ОС присутствуют СВ для управления всеми ресурсами ОС, например:Процессами и потоками.

Памятью.

Файловой системой, в частности файлами и каталогами.

Вводом-выводом.

2) Системные вызовы файловой системыМногие системные вызовы относятся к файлам и файловой системе. Сначала мы рассмотрим системные вызовы, работающие с отдельными файлами. Затем мы изучим те системные вызовы, которые оперируют каталогами или всей файловой системой в целом. Для создания нового файла можно использовать системный вызов creat. (Когда Кена Томпсона однажды спросили, что бы он поменял, если бы у него была возможность во второй раз разработать операционную систему UNIX, он ответил, что на этот раз вместо creat он назвал бы этот системный вызов create.) В качестве параметров этому системному вызову следует задать имя фай­ла и режим защиты. Так, команда

Fd = creatf'abc". mode):

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

Системный вызов creat не только создает новый файл, но также и открывает его для записи. Чтобы последующие системные вызовы могли получить доступ к файлу, успешный системный вызов creat возвращает небольшое неотрицательное целое число, называемое дескриптором файла (fd в приведенном выше примере). Если системный вызов выполняется с уже существующим файлом, длина этого файла уменьшается до 0, а все содержимое теряется.

Теперь продолжим изучение основных файловых системных вызовов, перечис­ленных в табл. 10.10. (В случае ошибки возвращаемое значение s равно -1,fd — дес­криптор файла, position — смещение в файле.) Чтобы прочитать данные из суще­ствующего файла или записать данные в существующий файл, файл сначала нужно открыть с помощью системного вызова open. Этому системному вызову следует указать имя файла, а также режим, в котором он должен быть открыт: для чтения, для записи или и для того и для другого. Также можно указать различные дополни­тельные параметры. Как и creat, системный вызов open возвращает дескриптор фай­ла, который может быть использован для чтения или записи журнала. Затем файл может быть закрыт при помощи системного вызова close, после чего, чтобы писать в этот файл или читать из него, его снова нужно открыть. Системные вызовы creat и open возвращают наименьший неиспользуемый в данный момент дескриптор файла.

Таблица 10.10. Некоторые системные вызовы для работы с файлами





Дата публикования: 2015-01-24; Прочитано: 389 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с)...