Наиболее законченным проявлением концепции виртуальности является понятие виртуальной машины, являющееся исходным при программировании на языках высокого уровня, например Паскале.
Виртуальная машина есть идеализированная модель реальной машины, изолирующая пользователя от аппаратных особенностей конкретной ЭВМ, воспроизводящая архитектуру реальной машины, но обладающую улучшенными характеристиками:
• бесконечной по объему памятью с произвольно выбираемыми способами доступа к ее данным;
• одним (или несколькими) процессами, описываемыми на удобном для пользователя языке программирования;
• произвольным числом внешних устройств произвольной емкости и доступа.
Концепция прерываний выполнения программ является базовой при построении любой операционной системы. Из всего многообразия причин прерываний необходимо выделить два вида: первого и второго рода.
Системные причины прерываний первого рода возникают в том случае, когда у процесса, находящегося в активном состоянии, возникает потребность либо получить некоторый ресурс или отказаться от него, либо выполнить над ресурсом какие-либо действия. К этой группе относят и, так называемые, внутренние прерывания, связанные с работой процессора (например, арифметическое переполнение или исчезновение порядка в операциях с плавающей запятой).
Системные причины прерывания второго рода обусловлены необходимостью проведения синхронизации между параллельными процессами.
При обработке каждого прерывания должна выполняться следующая последовательность действий:
• восприятие запроса на прерывание;
• запоминание состояния прерванного процесса, определяемое значением счетчика команд и других регистров процессора;
• передача управления прерывающей программе, для чего в счетчик команд заносится адрес, соответствующий данному типу прерывания;
• обработка прерывания;
• восстановление прерванного процесса.
В большинстве ЭВМ первые три этапа реализуются аппаратными средствами, а остальные - блоком программ обработки прерываний операционной системы.
Файловые системы
При наличии большого числа программ и данных необходим строгий их учет и систематизация. Операционным системам приходится работать с различными потоками данных, разными аппаратными и периферийными устройствами компьютера. Организовать упорядоченное управление всеми этими объектами позволяет файловая система.
На операционные системы персональных компьютеров наложила глубокий отпечаток концепция файловой системы, лежащей в основе операционной системы UNIX. В ОС UNIX подсистема ввода-вывода унифицирует способ доступа как к файлам, так и к периферийным устройствам. Под файлом при этом понимают набор данных на диске, терминале или каком-либо другом устройстве. Таким образом, файловая система - это система управления данными.
Файловые системы операционных систем создают для пользователей некоторое виртуальное представление внешних запоминающих устройств ЭВМ, позволяя работать с ними не на низком уровне команд управления физическими устройствами (например, обращаться к диску с учетом особенностей его адресации), а на высоком уровне наборов и структур данных.
Файловая система скрывает от программистов картину реального расположения информации во внешней памяти, обеспечивает независимость программ от особенностей конкретной конфигурации ЭВМ, или, как еще говорят, логический уровень работы с файлами. Файловая система также обеспечивает стандартные реакции на ошибки, возникающие при обмене данными.
Пользователь, работая в контексте определенного языка программирования, обычно использует файлы как поименованные совокупности данных, хранимые во внешней памяти и имеющие определенную структуру. При работе с файлами пользователю предоставляются средства для создания новых файлов, операции по считыванию и записи информации и т.д., не затрагивающие конкретные вопросы программирования работы канала по пересылке данных, по управлению внешними устройствами.
Наиболее распространенным видом файлов, внутренняя структура которых обеспечивается файловыми системами различных ОС, являются файлы с последовательной структурой. Такого рода файлы можно рассматривать как набор составных элементов, называемых логическими записями (или блоками), длина которых может быть как фиксированной, так и переменной, и доступ к которым - последовательный, т.е. для обработки (считывания или записи) i-й записи должна быть обработана предыдущая (i-1)-я запись.
В ряде файловых систем предусматривается использование более сложных логических структур файлов, чем последовательная. Например, записи в файле могут образовывать древовидные структуры, может использоваться индексно-последовательная организация файлов (с упорядочением записей по значению некоторых полей) или, так называемая, библиотечная структура файлов, использующая уровень учетной информации (каталога), облегчающей поиск и доступ к отдельным компонентам файлов. На физическом уровне блоки файла (обычно размером 256 или 512 байт) могут размещаться в памяти непрерывной областью или храниться несмежно.
Первый способ хранения файлов, реализованный, например, в ОС РАФОС, приводит к затруднениям при изменении размеров файлов (т.е. к необходимости перезаписи файлов, если их длина увеличивается, или хранения «дыр», если длина уменьшается).
Наиболее развитый механизм несмежного распределения блоков файлов реализован в операционной системе UNIX, в которой размеры файлов могут динамически изменяться в пределах 1 Гбайта. Каждый файл в системе имеет дескриптор, в составе которого хранится список, содержащий 13 номеров блоков на диске и используемый для адресации к тем блокам, которые входят в состав файла.
Первые десять элементов списка непосредственно указывают на десять блоков, в которых размещаются данные файла. В одиннадцатом элементе списка указан номер блока, хранящий список из 128 номеров блоков данных, которые принадлежат файлу (это первый уровень косвенной адресации).
Двенадцатый элемент ссылается на блок, который содержит список из 128 номеров блоков первого уровня косвенной адресации (это второй уровень косвенной адресации). С помощью тринадцатого элемента указывается ссылка на блок, содержащий список из 128 номеров блоков второго уровня косвенной адресации.
Файловая система ОС обеспечивает основные операции над файлами: их открытие (что сопровождается копированием учетной информации о файле, обеспечивающей быстрый доступ к нему, в некоторую структуру данных, расположенную в оперативной памяти, подготовкой буферов и каналов для передачи информации), копирование, перемещение, объединение, удаление, закрытие.
Вторую группу представляют операции чтения и записи составных элементов файла. Особая группа операций обеспечивает печать содержимого каталогов или файлов, управление правами доступа к файлам, поиска файлов и т.д.
Развитые многопользовательские файловые системы обеспечивают также защиту и разделение данных, хранящихся в файлах, при работе с ними разных пользователей. Так, например, после входа в систему UNIX (который производится по паролю) пользователь получает доступ к ряду системных, групповых и личных каталогов и файлов. Каждый файл и каталог имеет владельца. Обычно это пользователь, создавший их.
ЭВМ, как правило, имеет несколько дисков. Каждому диску присваивается имя, которое задается латинской буквой с двоеточием, например А:, В:, С: и т.д. Стандартно принято, что А: и В: – это накопители на гибких магнитных дисках, а дики С: и D: и т.д. – жесткие диски, накопители на оптических дисках или электронные диски.
Электронные диски представляют собой часть оперативной памяти, которая для пользователя выглядит как ВЗУ. Скорость обмена информации с электронным диском значительно выше, чем с электромеханическим внешним запоминающим устройством. При работе электронных дисков не происходит износ электромеханических деталей. Однако после выключения питания информация на электронном диске не сохраняется.
Физически существующие магнитные диски могут быть разбиты на несколько логических дисков, которые для пользователя будут выглядеть на экране так же, как и физически существующие диски. При этом логические диски получат имена по тем же правилам, что и физически существующие диски. Проще говоря, логический диск – это часть обычного жесткого диска, имеющая собственное имя.
Диск, на котором записана операционная система, называется системным (или загрузочным) диском. В качестве загрузочного диска чаще всего используется жесткий диск С:. При лечении вирусов, системных сбоях загрузка операционной системы часто осуществляется с гибкого диска. Выпускаются оптические диски, которые могут быть загрузочными.
В операционных системах DOS и Windows каждому диску можно дополнительно давать имена (Label – метка), которые отражают их содержание, например: системный, графика, музыка, тексты, дистрибутивы и т.д.
Для того чтобы на новый магнитный диск можно было записать информацию, он должен быть предварительно отформатирован. Форматирование – это подготовка диска для записи информации. Во время форматирования на диск записывается служебная информация (делается разметка), которая затем используется для записи и чтения информации, коррекции скорости вращения диска. Разметка производится с помощью электромагнитного поля, создаваемого записывающей головкой дисковода.
Запись информации осуществляется по дорожкам, причем каждая дорожка разбивается на секторы, например, по 1024 байта. Дискета диаметром 3,5 дюйма объемом 1,44 Мбайт содержит 80 дорожек и 18 секторов. Число дорожек и секторов на жестком диске значительно больше, чем на гибком диске (ориентировочные значения: 2500 дорожек, 63 сектора).
Для жесткого диска характерно еще одно понятие: цилиндр.
Цилиндром винчестера называется совокупность дорожек с одинаковыми порядковыми номерами, расположенными на разных дисках винчестера.
При работе винчестера несколько головок одновременно считывают информацию с дорожек одного винчестера (цилиндра).
В процессе форматирования на диске выделяется системная область, которая состоит из 3 частей: загрузочного сектора, таблицы размещения файлов и корневого каталога.
Загрузочный сектор (Boot Record) размещается на каждом диске в логическом секторе с номером О. Он содержит данные о формате диска, а также короткую программу, используемую в процедуре начальной загрузки операционной системы.
Загрузочный сектор создается во время форматирования диска. Если диск подготовлен как системный (загрузочный), то загрузочный сектор содержит программу загрузки операционной системы. В противном случае он содержит программу, которая при попытке загрузить с этого диска операционной системы выводит сообщение о том, что данный диск не является системным.
Каждый жесткий диск может быть разбит на несколько логических дисков. На жестком диске имеется область, которая называется главной загрузочной записью MBR (Master Bood Reсord) или главным загрузочным сектором. В MBR указывается, с какого логического диска должна производится загрузка операционной системы.
Таблица размещения файлов (File Allocation Table – сокращенно FAT) располагается после загрузочного сектора и содержит описание порядка расположения файлов в секторах данного диска, а также информацию о дефектах участка диска. За FAT – таблицей следует ее точная копия, что повышает надежность сохранения этой очень важной таблицы.
Корневой каталог (Root Oirectory) всегда находится за копией FAT. В корневом каталоге содержится перечень файлов и директорий, находящихся на диске. Непосредственно за корневым каталогом располагаются данные.
Запись информации на диск ведется частями. Наименьшее место, которое могут занимать на диске записываемые данные, составляет один кластер. Кластер может состоять из одного или несколько секторов.
Данные и программы хранятся на носителях информации в виде файлов (от англ. File – досье, подшивка).
Файл – это набор взаимосвязанных данных, воспринимаемых компьютером как единое целое, имеющих общее имя, находящихся на магнитном или оптическом дисках, магнитной ленте, в оперативной памяти или на другом носителе информации.
Файлы обычно отождествляют с участком памяти (ВЗУ, ОЗУ, ПЗУ), где размещены логически связанные данные, имеющие общее имя. Файл хранится на носителе информации в двоичной системе счисления, и для ОС он представляется как совокупность связанных байтов.
В файлах могут храниться тексты программ, документы, данные и т.д.
При записи информации на новый (чистый) диск файлы располагаются последовательно друг за другом: от первой дорожки до последней.
Заметим, что файлы занимают целое число кластеров, потому в одном кластере не могут одновременно размещаться даже 2 небольших файла. Обратите внимание на то, что если документ состоит всего из одной буквы, то файл на диске занимает один отдельный кластер.
Имена файлов регистрируются на магнитных и оптических дисках в папках, каталогах (или директориях). Термин «каталог» используется в операционных системах семейства DOS, термин «папка» – в операционных системах семейства Windows. Учитывая, что большинство пользователей работают под управлением операционной системы Windows, а не DOS, в дальнейшем будем преимущественно использовать терминологию операционной системы Windows. Если в папке (каталоге) хранится имя файла, то говорят, что файл размещается в папке (каталоге).
Таким образом, папка – группа файлов, объединенных по какому-либо признаку. На каждом диске может быть несколько папок. В папках могут размещаться не только файлы, но и другие папки. Таким образом, папки образуют дерево (файловую систему).
Если бы файлы всегда хранились в последовательно расположенных кластерах, то для указания месторасположения файла на диске (с помощью FAT- таблицы) достаточно было указать номер первого сектора (где располагается начало файла) и число занятых кластеров.
При многократной перезаписи и удалении файлов происходит фрагментация (дробление, разделение) дискового пространства. В результате файл может оказаться разорванным и располагаться в кластерах, находящихся на относительно большом расстоянии друг от друга. Считывание таких файлов существенно замедляется, так как дисководу необходимо дополнительное время для перемещения головок. Причина возникновения фрагментации состоит в том, что все файлы имеют, как правило, разную форму. Поэтому после удаления какого-либо файла новый файл не может точно вписаться в освободившееся на диске место. Практически обязательно либо останется свободный участок диска, либо заполняются секторы, расположенные в другом месте диска (например, расположенные через несколько секторов или на других дорожках).
В составе операционной системы есть специальная программа (утилита), которая осуществляет дефрагментацию диска. Эта утилита располагает тело файла в соседних секторах, тем самым ускоряет считывание информации (не нужно переходить на другие дорожки, пропускать чужие секторы) и уменьшает износ дисковода.