Какие файлы исполняемые в среде oс
Содержание
История
Слово file впервые применено к компьютерному хранилищу в 1950 году. Реклама памяти на запоминающих ЭЛТ фирмы RCA в журнале «Popular Science» [1] гласила:
« | …результаты бесчисленных вычислений можно держать «в картотеке» (on file) и получать снова. Эта «картотека» теперь существует в запоминающей трубке, разработанной в лабораториях RCA. Она электрически сохраняет цифры, отправленные в вычислительную машину, и держит их в хранилище, заодно запоминая новые — ускоряя интеллектуальные решения в лабиринтах математики. | » |
В 1952 году слово file отнесли к колоде перфокарт [2] . Поначалу словом file называли само устройство памяти, а не его содержимое (см. Регистровый файл). Например, диски IBM 350, использовавшиеся, например, в машине IBM 305, назывались disk files. Системы наподобие Compatible Time-Sharing System ввели концепцию файловой системы, когда на одном запоминающем устройстве существует несколько виртуальных «устройств памяти», что и дало слову «файл» современное значение. Имена файлов в CTTS состояли из двух частей, «основного имени» и «дополнительного имени» (последнее существует и поныне как расширение имени файла).
Классификация файлов
Содержимое файлов
Файлы могут содержать в себе любую информацию. Это могут быть как программы, выполняемые под управлением какой-либо операционной системы, либо файлы с данными для этих программ. Независимо от операционных систем персональных компьютеров все файлы можно разделить на текстовые и бинарные (по другому - двоичные ) файлы. Текстовыми файлами называют файлы, в которых используются в качестве информационных символы с шестнадцатеричными кодами 20h-7Eh (32 -126 десятичными) и 80h-7Eh (128 - 254 десятичными). В качестве служебных кодов и только в качестве них допускается использовать символы с кодами:
- 09h (9) (HT) - горизонтальная табуляция.
- 0Ah (10) (LF,EOL) - новая строка (перевод строки).
- 0Bh (11) (VT) - вертикальная табуляция.
- 0Ch (12) (FF) - новая строка (перевод страницы).
- 0Dh (13) (CR) - возврат каретки.
- 1Ah (26) (SUB,EOF) - конец файла.
Примечание: При визуализации текстового файла символ горизонтальной табуляции заменяется несколькими (обычно восемью) проблемами, символ вертикальной табуляции - несколькими пустыми строками. Символ возврата каретки переводит курсор (или позицию вывода нового символа) на первый элемент начала строки. Символ перевода строки выводит следующий символ на своем месте, только строкой ниже. Поэтому символ EOL (End-of-Line) действительности - это последовательность символов CR/LF. Все символы, расположенные после символа конца файла, при выводе игнорируются.
Среди всех текстовых файлов можно выделить подмножество чистых ASCII файлов , информационные символы которых имеют только коды с номерами 20h - 7Eh. Двоичные же файлы представляют из себя последовательность из любых символов. Их длина определяется из заголовка файла. Это разделение является важным для различных операционных систем, поскольку назначение и обработка бинарных и текстовых файлов в операционных системах различаются.
Другие виды классификации файлов
Также файлы можно разделить на исполняемые (программы) и неисполняемые ( файлы данных и документов). Исполняемые файлы могут запускаться операционной системой на выполнение, а неисполняемые файлы могут только изменять свое содержимое в процессе выполнения программ. Далее можно разделить файлы на основные , присутствие которых обязательно для работы операционной системы и программных продуктов, служебные , хранящие конфигурацию и настройки основных файлов, рабочие , содержимое которых изменяется в результате работы основных программных файлов и собственно ради которых и создаются все остальные файлы, а также временные файлы , создающиеся в момент работы основных и хранящие промежуточные результаты.
Файлы и каталоги
Следует отметить, что существует специальный вид файла, называемый каталогом (catalog) , или директорией (ditectory) . В нем содержатся ссылки на другие файлы. Поскольку ссылки на эти файлы содержатся лишь в одном из каталогов, для пользователи эти файлы как бы расположены в каталоге. На самом деле, конечно, все файлы находятся в секторах диска. Но это истинно лишь на физическом уровне, а на уровне представления данных файлы находятся в каталогах. Преимущества каталогов, особенности их работы с ними будут описаны ниже. Следует только отметить, что каталоги появились не сразу и не во всех операционных системах. Они возникли там, где требовался большой объем хранимой информации (например, в файловых системах жестких дисков) и, следовательно, возникли сложности с организацией и размещением большого числа файлов. Эти преимущества каталогов следует использовать при работе с операционными системами, содержащих каталоги.
Параметры файлов
Любой файл содержит в служебных полях следующую информацию о себе. Она включает имя, дату и время создания и модификации, свой размер, и другие атрибуты, зависящие от реализации файловой системы. То же относится и к каталогу. Имя и тип любого файла (и каталога) должны быть уникальными в пределах того каталога, в котором они находятся. Рассмотрим ограничения, налагаемые на файлы операционными системами.
Свойства файла
В зависимости от файловой системы, файл может обладать различным набором свойств.
Имя файла
В большинстве файловых систем имя файла используется для указания, к какому именно файлу производится обращение. В различных файловых системах ограничения на имя файла сильно различаются: в FAT16 и FAT12 размер имени файла ограничен 8.3 знаками (8 на имя и 3 на расширение); в других системах имя файла ограничено обычно в 255 байт; в NTFS имя ограничено в некоторых ОС 256 символами Unicode (по спецификации — 32 768 символов).
Помимо ограничений файловой системы, интерфейсы операционной системы дополнительно ограничивают набор символов, который допустим при работе с файлами.
Большинство операционных систем требуют уникальности имени файла в одном каталоге, хотя некоторые системы допускают файлы с одинаковыми именами (например, при работе с ленточными накопителями).
Расширение имени файла
Расширение имени файла (часто расширение файла или расширение) как самостоятельный атрибут файла существует в файловых системах FAT16, FAT32, NTFS, используемых операционными системами MS-DOS, DR-DOS, PC DOS, MS Windows и используется для определения типа файла. Оно позволяет системе определить, каким приложением следует открывать данный файл. По умолчанию в операционной системе Windows расширение скрыто от пользователя.
В остальных файловых системах расширение — условность, часть имени, отделённая самой правой точкой в имени.
Основные атрибуты
В некоторых файловых системах, таких как NTFS, предусмотрены атрибуты (обычно это бинарное значение «да»/«нет», кодируемое одним битом). Во многих современных операционных системах атрибуты практически не влияют на возможность доступа к файлам, для этого в некоторых операционных и файловых системах существуют права доступа.
Название атрибута | перевод | значение | файловые системы | операционные системы |
---|---|---|---|---|
READ ONLY | только для чтения | в файл запрещено писать | FAT32, FAT12, FAT16, NTFS, HPFS, VFAT | DOS, OS/2, Windows |
SYSTEM | системный | критический для работы операционной системы файл | FAT32, FAT12, FAT16, NTFS, HPFS, VFAT | DOS, OS/2, Windows |
HIDDEN | скрытый | файл скрывается от показа, пока явно не указано обратное | FAT32, FAT12, FAT16, NTFS, HPFS, VFAT | DOS, OS/2, Windows |
ARCHIVE | архивный (требующий архивации) | файл изменён после резервного копирования или не был скопирован программами резервного копирования; при изменении файла ОС автоматически устанавливает этот атрибут | FAT32, FAT12, FAT16, NTFS, HPFS, VFAT | DOS, OS/2, Windows |
Suid | Установка пользовательского ID | выполнение программы от имени владельца | ext2 | Unix-like |
Sgid | Установка группового ID | выполнение программы от имени группы (для каталогов: любой файл созданный в каталоге с установленным SGID, получит заданную группу-владельца) | ext2 | Unix-like |
Sticky bit | липкий бит | изначально предписывал ядру не выгружать завершившуюся программу из памяти сразу, а лишь спустя некоторое время, чтобы избежать постоянной загрузки с диска наиболее часто используемых программ, в настоящее время в разных ОС используется по-разному | ext2 | Unix-like |
Время
Для файла могут быть определены временные метки создания, модификации и последнего доступа.
Владелец и группа файла
В некоторых файловых системах предусмотрено указание на владельца файла и группу-владельца.
Права доступа
В некоторых файловых системах предусмотрена возможность для ограничения доступа пользователей к содержимому файла
В UNIX-подобных операционных системах для файлов обычно выделяют три типа прав: на запись, чтение и выполнение.
Каждое право задаётся раздельно для владельца, для группы и для всех остальных. ACL позволяют расширить этот список.
В операционных системах Windows NT при работе с файловой системой NTFS права доступа задаются явно для пользователей или групп (или наследуются от вышестоящих объектов). Права в себя включают право на чтение, запись исполнение, удаление, смену атрибутов и владельца, создание и удаление подпапок (для папок) и чтение прав доступа.
Каждое право может быть задано как разрешением, так и запретом, запрет имеет больший приоритет, чем разрешение. Представление файлов в графических оболочках.
Просмотр файлов в DOS Shell
Оболочка DOS Shell не случайно рассматривается первой среди всех графических оболочек фирмы Microsoft. Именно здесь зародились все остальные приемы работы и назначения клавиш, используемые в более “молодых” оболочках.
Этот интерфейс предоставляет пользователю наглядный способ работы с операционной системой. Для выбора и ввода команд можно использовать клавиатуру, либо мышь.
Интерфейс SHELL представляет собой программу, которая выполняет функции DOS. При работе с этой программой обычный символ готовности (>) отсутствует.
Выбор и ввод команд DOS осуществляется с использованием меню и различных графических представлений. Интерфейс SHELL устроен таким образом, что пользователь может сам добавлять в него нужные ему команды и программы.
Оболочка Shell запускается командой:
После ввода этой команды и запуска MS-DOS SHELL на экране появляется окно интерфейса. Программа DOSSHELL занимает 4,4 Кб памяти.
Выход и возврат в Shell
Некоторые программы не работают под управлением интерфейса SHELL. Для их запуска необходимо выйти из этой оболочки. Существует два Способа выхода из MS-DOS SHELL, Если нужно временно покинуть SHELL для выполнения каких-либо действий с использованием командного режима DOS, то следует нажать клавиши Shift+F9 либо в списке программ Главной Группы (Main) выбрать Командный Режим (Command Prompt). На экране дисплея появляется текст:
Microsoft (R) MS-DOS (R) Version 5.0 (С) Copyright Corp 1981- и символ готовности, например, С:\>.
Для возврата в SHELL следует ввести команду EXIT. Возврат происходит в тот каталог, из которого был осуществлен выход из SHELL.
Резидентные в памяти программы (TSR) следует запускать до ввода команды DOSSHELL. Например, команду PRINT необходимо вводить до запуска интерфейса SHELL
Если нужно окончательно выйти из SHELL и вернуться в командный режим DOS, то следует нажать функциональную клавишу F3. После этого на экране появляется символ готовности DOS (>) и программа SHELL удаляется из памяти, освобождая пространство размером 4,4 Кб. Аналогичный выход из SHELL осуществляется нажатием клавиш Alt+F4, либо выбором eXit (Выход) в меню File (Файл). Обратно к интерфейсу SHELL можно вернуться повторным его запуском командой DOSSHELL.
Терминология, используемая в Shell
После ввода команды DOSSHELL на экране появляется окно графического интерфейса Shell. Графический интерфейс может работать в двух режимах:
- Графический режим: в качестве указателя мыши используется стрелка, а место указания выбора каталога или файла обозначается пиктограммой в виде прямоугольника.
- Текстовый режим: В качестве указателя мыши используется прямоугольник, а место указания выбора каталога обозначается квадратными скобками. Перед файлами такое место указания не предусмотрено.
При описании графического интерфейса SHELL используется следующая терминология:
Представление файлов и каталогов в графической оболочке SHELL осуществляется с помощью дерева каталогов и списка файлов в текущем каталоге.
Операции над файлами
В процессе работы на компьютере над файлами чаще всего производятся следующие операции:
- Копирование — копия файла помещается в другой каталог.
- Чтение — данные из файла помещаются в область памяти.
- Перемещение — сам файл перемещается в другой каталог.
- Удаление — запись о файле удаляется из каталога.
- Переименование — изменяется имя файла.
- Запись — в файл помещаются данные.
Особенности реализации
В операционной системе UNIX процессы (обычно находятся в каталоге /proc) и устройства (/dev) представляются в виде файлов особого рода, что позволяет использовать некоторые файловые операции для манипуляции этими объектами.
В некоторых файловых системах (например, в файловой системе OS VAX VMS) файлы имеют версию, что позволяет открывать более старые варианты данного файла. В файловой системе Mac OS (HFS) у файлов есть два «потока»: поток данных (где хранится содержимое файла) и поток ресурсов, хранящий информацию о программе, предназначенной для открывания данного файла и, возможно, некоторую информацию для этой программы. В NTFS файл может содержать, кроме основного, сколько угодно именованных потоков.
Длина имени файла зависит от ОС, может быть от 8 (MS-DOS) до 255 (Windows, LINUX) символов.
ОС могут различать прописные и строчные символы. Например, WINDOWS и windows для MS-DOS одно и тоже, но для UNIX это разные файлы.
Во многих ОС имя файла состоит из двух частей, разделенных точкой, например windows.exe. Часть после точки называют расширением файла. По нему система различает тип файла.
У MS-DOS расширение составляет 3 символа. По нему система различает тип файла, а также можно его исполнять или нет.
У UNIX расширение ограничено размером имени файла в 255 символов, также у UNIX может быть несколько расширений, но расширениями пользуются больше прикладные программы, а не ОС. По расширению UNIX не может определить исполняемый это файл или нет.
2.1.2 Структура файла
Три основные структуры файлов:
Последовательность байтов - ОС не интересуется содержимым файла, она видит только байты. Основное преимущество такой системы, это гибкость использования. Используются в Windows и UNIX.
Последовательность записей - записей фиксированной длины (например, перфокарта), считываются последовательно. Сейчас не используются.
Дерево записей - каждая запись имеет ключ, записи считываются по ключу. Основное преимущество такой системы, это скорость поиска. Пока еще используется на мэйнфреймах.
Три типа структур файла.
2.1.3 Типы файлов
Основные типы файлов:
Регулярные - содержат информацию пользователя. Используются в Windows и UNIX.
Каталоги - системные файлы, обеспечивающие поддержку структуры файловой системы. Используются в Windows и UNIX.
Символьные - для моделирования ввода-вывода. Используются только в UNIX.
Блочные - для моделирования дисков. Используются только в UNIX.
Основные типы регулярных файлов:
ASCII файлы - состоят из текстовых строк. Каждая строка завершается возвратом каретки (Windows), символом перевода строки (UNIX) и используются оба варианта (MS-DOS). Поэтому если открыть текстовый файл, написанный в UNIX, в Windows, то все строки сольются в одну большую строку, но под MS-DOS они не сольются (это достаточно частая ситуация). Основные преимущества ASCII файлов:
- могут отображаться на экране, и выводится на принтер без преобразований
- могут редактироваться почти любым редактором
Двоичные файлы - остальные файлы (не ASCII). Как правило, имеют внутреннею структуру.
Основные типы двоичных файлов:
Исполняемые - программы, их может обрабатывать сама операционная система, хотя они записаны в виде последовательности байт.
Неисполняемые - все остальные.
Примеры исполняемого и не исполняемого файла
«Магическое число» - идентифицирующее файл как исполняющий.
2.1.4 Доступ к файлам
Основные виды доступа к файлам:
Последовательный - байты читаются по порядку. Использовались, когда были магнитные ленты.
Произвольный - файл можно читать с произвольной точки. Основное преимущество возникает, когда используются большие файлы (например, баз данных) и надо считать только часть данных из файла. Все современные ОС используют этот доступ.
2.1.5 Атрибуты файла
Основные атрибуты файла:
Защита - кто, и каким образом может получить доступ к файлу (пользователи, группы, чтение/запись). Используются в Windows и UNIX.
Пароль - пароль к файлу
Создатель - кто создал файл
Владелец - текущий владелец файла
Флаг "только чтение" - 0 - для чтения/записи, 1 - только для чтения. Используются в Windows.
Флаг "скрытый" - 0 - виден, 1 - невиден в перечне файлов каталога (по умолчанию). Используются в Windows.
Флаг "системный" - 0 - нормальный, 1 - системный. Используются в Windows.
Флаг "архивный" - готов или нет для архивации (не путать сжатием). Используются в Windows.
Флаг "сжатый" - файл сжимается (подобие zip архивов). Используются в Windows.
Флаг "шифрованный" - используется алгоритм шифрования. Если кто-то попытается прочесть файл, не имеющий на это прав, он не сможет его прочесть. Используются в Windows.
Флаг ASCII/двоичный - 0 - ASCII, 1 - двоичный
Флаг произвольного доступа - 0 - только последовательный, 1 - произвольный доступ
Флаг "временный" - 0 - нормальный, 1 - для удаления файла по окончании работы процесса
Флаг блокировки - блокировка доступа к файлу. Если он занят для редактирования.
Время создания - дата и время создания. Используются UNIX.
Время последнего доступа - дата и время последнего доступа
Время последнего изменения - дата и время последнего изменения. Используются в Windows и UNIX.
Текущий размер - размер файла. Используются в Windows и UNIX.
2.1.6 Операции с файлами
Основные системные вызовы для работы с файлами:
Create - создание файла без данных.
Delete - удаление файла.
Open - открытие файла.
Close - закрытие файла.
Read - чтение из файла, с текущей позиции файла.
Write - запись в файл, в текущею позицию файла.
Append - добавление в конец файла.
Seek - устанавливает файловый указатель в определенную позицию в файле.
Get attributes - получение атрибутов файла.
Set attributes - установить атрибутов файла.
Rename - переименование файла.
2.1.7 Файлы, отображаемые на адресное пространство памяти
Иногда удобно файл отобразить в памяти (не надо использовать системные вызовы ввода-вывода для работы с файлом), и работать с памятью, а потом записать измененный файл на диск.
При использовании страничной организации памяти, файл целиком не загружается, а загружаются только необходимые страницы.
При использовании сегментной организации памяти, файл загружают в отдельный сегмент.
Пример копирования файла через отображение в памяти.
Создается сегмент для файла 1
Файл отображается в памяти
Создается сегмент для файла 2
Сегмент 1 копируется в сегмент 2
Сегмент 2 сохраняется на диске
Недостатки этого метода:
Тяжело определить длину выходного файла
Если один процесс отобразил файл в памяти и изменил его, но файл еще не сохранен, второй процесс откроет это же файл, и будет работать с устаревшим файлом.
Файл может оказаться большим, больше сегмента или виртуального пространства.
2.2 Каталоги
2.2.1 Одноуровневые каталоговые системы
В этой системе все файлы содержатся в одном каталоге.
Однокаталоговая система, содержащая четыре файла, файлов А два, но разных владельцев
Возможность быстро найти файл, не надо лазить по каталогам
Различные пользователи могут создать файлы с одинаковыми именами.
2.2.2 Двухуровневые каталоговые системы
Для каждого пользователя создается свой собственный каталог.
Двухуровневая каталоговая система
Пользователь, при входе в систему, попадает в свой каталог и работает только с ним. Это делает проблематичным использование системных файлов.
Эту проблему можно решить созданием системного каталога, с общим доступом.
Если у одного пользователя много файлов, то у него тоже может возникнуть необходимость в файлах с одинаковыми именами.
2.2.3 Иерархические каталоговые системы
Каждый пользователь может создавать столько каталогов, сколько ему нужно.
Иерархическая каталоговая система
Почти все современные универсальные ОС, организованы таким образом. Специализированным ОС это может быть не нужным.
2.2.4 Имя пути
Для организации дерева каталогов нужен некоторый способ указания файла.
Два основных метода указания файла:
абсолютное имя пути - указывает путь от корневого каталога, например:
- для Windows \usr\ast\mailbox
- для UNIX /usr/ast/mailbox
- для MULTICS >usr>ast>mailbox
относительное имя пути - путь указывается от текущего каталога (рабочего каталога), например:
- если текущий каталог /usr/, то абсолютный путь /usr/ast/mailbox перепишется в ast/mailbox
- если текущий каталог /usr/ast/, то абсолютный путь /usr/ast/mailbox перепишется в mailbox
- если текущий каталог /var/log/, то абсолютный путь /usr/ast/mailbox перепишется в ../../usr/ast/mailbox
./ - означает текущий каталог
../ - означает родительский каталог
2.2.5 Операции с каталогами
Основные системные вызовы для работы с каталогами:
Create - создать каталог
Delete - удалить каталог
OpenDir - закрыть каталог
CloseDir - закрыть каталог
ReadDir - прочитать следующий элемент открытого каталога
Rename - переименование каталога
Link - создание жесткой ссылки, позволяет файлу присутствовать сразу в нескольких каталогах.
По стандарту диски могут быть разбиты на логические разделы, но мы будем рассматривать диски с одним разделом.
Как вы знаете из предыдущих лекций: блоки записываются последовательно; по спирали; сектора по 2352 байта.
Порядок записи информации:
Каждый CD-ROM начинается с 16 блоков (неопределенных ISO 9660), эта область может быть использована для размещения загрузчика ОС или для других целей.
Дальше один блок основного описателя тома - хранит общую информацию о CD-ROM, в нее входит:
- идентификатор системы (32байта)
- идентификатор тома (32байта)
- идентификатор издателя (128байт)
- идентификатор лица, подготовившего данные (128байт)
- имена трех файлов, которые могут содержать краткий обзор, авторские права и библиографическая информация.
- ключевые слова: размер логического блока (как правило 2048, но могут быть 4096, 8192 и т.д.); количество блоков; дата создания; дата окончания срока службы диска.
- описатель корневого каталога (номер блока содержащего каталог).
Могут быть дополнительные описатели тома, подобные основному.
Каталоговая запись стандарта ISO 9660.
Каталоговая запись стандарта ISO 9660.
Расположение файла - номер начального блока, т.к. блоки располагаются последовательно.
L - длина имени файла в байтах
Имя файла - 8 символов, 3 символа расширения (из-за совместимости с MS-DOS). Имя файла может встречаться несколько раз, но с разными номерами версий.
Sys - поле System use (используется различными ОС для своих расширений )
Порядок каталоговых записей:
Описатель самого каталога (аналог ".")
Ссылка на родительский каталог (аналог "..")
Остальные записи (записи файлов) в алфавитном порядке
Количество каталоговых записей не ограничено, но ограничено количество вложенности каталогов - 8.
В стандарте ISO 9660 определены три уровня ограничений:
имена файлов и каталогов до 31 символа
- имена файлов и каталогов до 31 символа
- файлы могут быть не непрерывными, состоять из разделов
3.1.2 Рок-ридж расширения для UNIX
Это расширение было создано, чтобы файловая система UNIX была представлена на CD-ROM.
Для этого используется поле System use.
Расширения содержат следующие поля:
PX - атрибуты POSIX (стандартные биты rwxrwxrwx, (чтение, запись, запуск) (владелец, группа, все) )
PN - старший и младший номер устройств (чтобы можно было записать каталог /dev, который содержит устройства)
SL - символьная связь
NM - альтернативное имя, позволяет использовать произвольные имена, без ограничений
CL - расположение дочернего узла (чтобы обойти ограничение на вложенность каталогов)
PL - расположение дочернего узла (чтобы обойти ограничение на вложенность каталогов)
RE - перераспределение (чтобы обойти ограничение на вложенность каталогов)
TF - временные штампы (время создания, последнее изменение , последний доступ)
3.1.3 Joliet расширения для Windows
Это расширение было создано, чтобы файловая система ОС Windows 95 была представлена на CD-ROM.
Для этого используется поле System use.
Расширения содержат следующие поля:
Длинные имена файлов (до 64 символов)
Набор символов Unicode (поддержка различных языков)
Преодоление ограничений на вложенность каталогов
Имена каталогов с расширениями
3.1.4 Romeo расширения для Windows
Стандарт Romeo предоставляет другую возможность записи файлов с длинными именами на компакт-диск. Длина имени может составлять 128 символов, однако использование кодировки Unicode не предусмотрено. Альтернативные имена в этом стандарте не создаются, поэтому программы MS-DOS не смогут прочитать файлы с такого диска.
Вы можете выбрать стандарт Romeo только в том случае, если диск предназначен для чтения приложениями Windows 95 и Windows NT.
3.1.5 HFS расширения для Macintosh
Иерархическая файловая система компьютеров Macintosh, не совместима ни с какими другими файловыми системами и называется Hierarchical File System (HFS).
3.1.6 Файловая система UDF (Universal Disk Format)
Изначально созданная для DVD, с версии 1.50 добавили поддержку CD-RW и CD-R.
Эта файловая система позволяет дописывать диски, а также поддерживает большие размеры файлов и длинные имена файлов.
3.2 Файловая система CP/M
CP/M (Control Program for Microcomputers) - операционная система, предшественник MS-DOS.
В ее файловой системе только один каталог, с фиксированными записями по 32 байта.
Имена файлов - 8+3 символов верхнего регистра.
После каждой перезагрузки рассчитывается битовый массив занятых и свободных блоков. Массив находится постоянно в памяти (для 180Кбайтного диска 23 байта массива). После завершения работы, он не записывается на диск.
Каталоговая запись CP/M
Видно, что максимальный размер файла 16Кбайт (16*1Кбайт).
Для файлов размером от 16 до 32 Кбайт можно использовать две записи. Для до 48 Кбайт три записи и т.д.
Порядковый номер записи хранится в поле экстент.
Код пользователя - каждый пользователь мог работать только со своими файлами.
Порядок чтения файлов:
Файл открывается системным вызовом open
Читается каталоговая запись, из которой получает информацию о всех блоках.
Вызывается системный вызов read
3.2 Файловая система MS-DOS (FAT-12,16,32)
В первых версиях был только один каталог (MS-DOS 1.0).
С версии MS-DOS 2.0 применили иерархическую структуру.
Каталоговые записи, фиксированны по 32 байта.
Имена файлов - 8+3 символов верхнего регистра.
Порядок чтения файлов:
Файл открывается системным вызовом open, которому указывается путь к файлу (может быть абсолютным и относительным).
Файловая система открывает каталоги (согласно пути), считывает последний каталог в память.
Ищет описатель файла.
Читается дескриптор файла, из которого получает информацию о всех блоках.
Вызывается системный вызов read
Каталоговая запись MS-DOS, обратите внимание на пустые 10 байт, они будут задействованы в Windows 98
Атрибут архивный нужен для программ резервного копирования, по нему они определяют надо копировать файл или нет.
Поле время (16 разрядов) разбивается на три подполя:
секунды - 5бит (2^5=32 поэтому хранятся с точностью до 2-х секунд)
Поле даты (16 разрядов) разбивается на три подполя:
год - 7бит (начинается с 1980г, т.е. максимальный 2107г.)
Теоретически размер файлов может быть до 4Гбайт (32 разряда).
Все блоки файла в записи не хранятся, а только первый блок. Этот номер используется в качестве индекса для 64К (для FAT-16) элементов FAT-таблицы, хранящейся в оперативной памяти.
В зависимости от количества блоков на диске в системе MS-DOS применяется три версии файловой системы FAT:
FAT-32 - для адреса используются только 28 бит, поэтому правильнее назвать FAT-28
Размер блока (кластера) должен быть кратным 512 байт.
В первой версии MS-DOS использовалась FAT-12 с 512 байтовыми блоками, поэтому максимальный размер раздела мог достигать 2Мбайта (2^12*512байта).
С увеличением дисков, этого стало не хватать, стали увеличивать размер блоков 1,2 и 4 Кбайта (2^12) (при этом эффективность использования диска падает).
FAT-12 до сих пор применяется для гибких дисков.
16-разрядные дисковые указатели
Размеры кластеров 512, 1, 2, 4, 8, 16 и 32Кбайт (2^15)
Таблица постоянно занимала в памяти 128 Кбайт.
Максимальный размер раздела диска мог достигать 2Гбайта (2^16*32Кбайта).
Причем кластер в 32 Кбайта для файлов со средним размером в 1Кбайт, не эффективен.
Размеры кластеров 512, 1, 2, 4, 8, 16 и 32Кбайт
Максимальный размер раздела диска мог бы достигать 2^28*2^15, но здесь уже вступает другое ограничение - 512 байтные сектора адресуются 32-разрядным числом, а это 2^32*2^9, т.е. 2 Тбайта.
Максимальный размер раздела для различных размеров кластеров
Размер кластера, Кбайт
Из таблицы видно, что FAT-16 использовать не эффективно уже при разделах в 256 Мбайт, учитывая, что средний размер файла 1Кбайт.
3.2.4 Расширение Windows 98 для FAT-32
Для расширения были задействованы 10 свободных бит.
Формат каталоговой записи в системе FAT-32 с расширениями для Windows 98
Пять добавленных полей:
NT - предназначено для совместимости с Windows.
Sec - дополнение к старому полю время, позволяет хранить время с точностью до секунды (было 2 секунды)
Дата и время создания файла (Creation time)
Дата (но не время) последнего доступа (Last access)
Для хранения номера блока выделено еще 2 байта (16 бит), т.к. номера блоков стали 32-разрядные.
Основная надстройка над FAT-32, это длинные имена файлов.
Для каждого файла стали присваивать два имени:
Короткое 8+3 для совместимости с MS-DOS
Длинное имя файла, в формате Unicode
Доступ к файлу может быть получен по любому имени.
Если файлу дано длинное имя (или используются пробелы), то система делает следующие шаги:
берет первые шесть символов
преобразуются в верхний регистр ASCII, удаляются пробелы, лишние точки, некоторые символы преобразуются в "_"
если такое имя есть, то используется суффикс
Короткие имена хранятся в в обычном дескрипторе файла.
Длинные имена хранятся в дополнительных каталоговых записях, идущих перед основным описателем файла. Каждая такая запись содержит 13 символов формата Unicode (для символа Unicode нужно два байта).
Формат каталогов записи с фрагментом длинного имени файла в Windows 98
Поле "Атрибуты" позволяет отличить фрагмент длинного имени (значение 0х0F) от дескриптора файла. Старые программы MS-DOS каталоговые записи со значением поля атрибутов 0х0F, просто игнорируют.
Последовательность - порядковый номер в последовательности фрагментов.
Длина имени файла ограничена 260 символами не из-за порядкового номера (1 байт), для номера используются только 6 бит 6х13=819 символов.
Контрольная сумма нужна для выявления ошибок, т.к. файл с длинным именем может удалить MS-DOS и создать новый, и тогда останутся не удаленные записи, которые "прилипнут" к новому файлу. Т.к. это поле один байт, есть вероятность 1/256 что Windows 98 не заметит подмены.
3.3 Файловая система NTFS
Файловая система NTFS была разработана для Windows NT.
64-разрядные адреса, т.е. теоретически может поддерживать 2^64*2^16 байт (1 208 925 819 Пбайт
Размеры блока (кластера) от 512байт до 64 Кбайт, для большинства используется 4Кбайта.
Поддержка больших файлов.
Имена файлов ограничены 255 символами Unicode.
Длина пути ограничивается 32 767 (2^15) символами Unicode.
Имена чувствительны к регистру, my.txt и MY.TXT это разные файлы (но из-за Win32 API использовать нельзя), это заложено на будущее.
Журналируемая файловая система, т.е. не попадет в противоречивое состояние после сбоев.
Контроль доступа к файлам и каталогам.
Поддержка жестких и символических ссылок.
Поддержка сжатия и шифрования файлов.
Поддержка дисковых квот.
Главная файловая таблица MFT (Master File Table) - главная структура данных в каждом томе, записи фиксированные по 1Кбайту. Каждая запись описывает один каталог или файл. Для больших файлов могут использоваться несколько записей, первая запись называется - базовой записью.
MFT представляет собой обычный файл (размером до 2^48 записей), который может располагаться в любом месте на диске.
Главная файловая таблица MFT, каждая запись ссылается на файл или каталог.
Первые 16 записей MFT зарезервированы для файлов метаданных. Каждая запись описывает нормальный файл, имена этих файлов начинаются с символа "$".
Каждая запись представляет собой последовательность пар (заголовок атрибута, значение).
Некоторые записи метаданных в MFT:
0) Первая запись описывает сам файл MFT, и содержит все блоки файла MFT. Номер первого блока файла MFT содержится в загрузочном блоке.
1) Дубликат файла MFT, резервная копия.
2) Журнал для восстановления, например, перед созданием, удалением каталога делается запись в журнал. Система не попадет в противоречивое состояние после сбоев.
3) Информация о томе (размер, метка и версия)
4) Определяются атрибуты для MFT записей.
6) Битовый массив использованных блоков - для учета свободного места на диске
7) Указывает на файл начальной загрузки
Атрибуты, используемые в записях MFT:
Стандартная информация - флаговые биты (только чтение, архивный), временные штампы и т.д.
Имя файла - имя файла в кодировке Unicode, файлы могут повторятся в формате MS-DOS 8+3.
Список атрибутов - расположение дополнительных записей MFT
Идентификатор объекта - 64-разрядный идентификатор файла, уникальный для данного тома.
Точка повторного анализа - используется для символьных ссылок и монтирования устройств.
Корневой индекс - используется для каталогов
Размещение индекса - используется для очень больших каталогов
Битовый массив - используется для очень больших каталогов
Поток данных утилиты регистрации - используется для шифрования
Данные - поточные данные, может повторяться, используется для хранения самого файла. За заголовком следует список дисковых адресов, определяющий положение файла на диске, если файл очень маленький (несколько сотен байт), то следует сам файл (такой файл называется - непосредственный файл).
Как привило, все данные файла не помещаются в запись MFT.
Дисковые блоки файлам назначаются по возможности в виде серий последовательных блоков (сегментов файлов). В идеале файл должен быть записан в одну серию (не фрагментированный файл), файл, состоящий из n блоков, может быть записан от 1 до n серий.
Запись MFT для 9-блочного файла, состоящего из трех сегментов (серий).
Вся запись помещается в одну запись MFT (файл не сильно фрагментирован).
Заголовок содержит количество блоков (9 блоков).
Каждая серия записывается в виде пары, дисковый адрес - количество блоков (20-4, 64-2, 80-3).
Каждая пара, при отсутствие сжатия, это два 64-разрядные числа (16 байт на пару).
Многие адреса содержат большое количество нулей, сжатие делается за счет убирания нулей в старших байтах. В результате для пары требуется чаще всего 4байта.
Если файл сильно фрагментирован, требуется несколько записей MFT.
Три записи MFT для сильно фрагментированного файла.
В первой записи указывается индексы на дополнительные записи.
Может потребоваться очень много индексов MFT, так что индексы не поместятся в запись. В этом случае список хранится не в MFT, а в файле.
Запись MFT для небольшого каталога
Поиск файла в каталоге по имени состоит в последовательном переборе имен файлов.
Для больших каталогов используется другой формат. Используется дерево В+, обеспечивающее поиск в алфавитном порядке.
3.3.1 Поиск файла по имени
При создании файла, программа обращается к библиотечной процедуре
Этот вызов попадает в совместно используемую библиотеку уровня пользователя kernel32.dll, где \??\ помещается перед именем файла, и получается строка:
Это имя пути передается системному вызову NtFileCreate в качестве параметра.
Этапы поиска файла C:\windows\readmy.txt
3.3.2 Сжатие файлов
Если файл помечен как сжатый, то система автоматически сжимает при записи, а при чтении происходит декомпрессия.
Берутся для изучения первые 16 блоков файла (не зависимо от сегментов файла).
При меняется к ним алгоритм сжатия.
Если полученные данные можно записать хотя бы в 15 блоков, они записываются в сжатом виде.
Если их можно записать только в 16 блоков, то они записываются в несжатом виде.
Алгоритм повторяется для следующих 16 блоков.
Запись MFT для предыдущего файла.
Как видно из рисунка, сжатие приводит к сильной фрагментации.
Чтобы прочитать сжатый блок системе придется распаковать весь сегмент. Поэтому сжатие применяют к 16 блокам, если увеличить количество блоков, уменьшится производительность (но возрастет эффективность сжатия).
3.3.3 Шифрование файлов
Любую информацию, если она не зашифрована, можно прочитать, получив доступ. Поэтому самая надежная защита информации от несанкционированного доступа - шифрование.
Даже если у вас украдут винчестер, прочесть данные не смогут (большинство не сможет).
Если файл помечен как шифрованный, то система автоматически шифрует при записи, а при чтении происходит дешифрация.
Шифрование и дешифрование выполняет не сама NTFS, а специальный драйвер EFS (Encrypting File System).
Каждый блок шифруется отдельно.
Первые (1945-1955г.г.) компьютеры работали без операционных систем, как правило, на них работала одна программа.
Когда скорость выполнения программ и их количество стало увеличиваться, простои компьютера между запусками программ стали составлять значительное время. Появились первые системы пакетной обработки (1955-1965г.г.), которые просто автоматизировали запуск одной программ за другой и тем самым увеличивали коэффициент загрузки процессора. Системы пакетной обработки явились прообразом современных операционных систем. Совокупность нескольких заданий, как правило, в виде колоды перфокарт, получила название пакета заданий.
Многозадачность (1965-1980) - это способ организации вычислительного процесса, при котором на одном процессоре попеременно выполняются несколько задач. Пока одна задача выполняет операцию ввода-вывода, процессор не простаивает, как это происходило при последовательном выполнении задач , а выполняет другую задачу. Для этого создали систему распределения памяти, когда каждая задача загружается в свой участок оперативной памяти, называемый разделом.
Спулинг (spooling-подкачка) в то время задания считывались с перфокарт на диск в том темпе, в котором они появлялись в помещении вычислительного центра, а затем, когда очередное задание завершалось, новое задание с диска загружалось в освободившийся раздел.
Системы разделения времени - вариант многозадачности, при котором у каждого пользователя есть свой диалоговый терминал. Это было сделано, чтобы каждый программист мог отлаживать свою программу в реальном времени. Фактически это была многопользовательская система. Естественно стали возникать проблемы защиты задач друг от друга.
В это время была разработана многопользовательская система MULTICS, которая должна была обеспечивать одновременную работу сотни пользователей.
В это время также стали бурно развиваться мини-компьютеры (первый был выпущен в 1961г.), на которые была перенесена система MULTICS. Эта работа в дальнейшем развилась в систему UNIX.
Появилось много разновидностей несовместимых UNIX, основные из них были System V и BSD. Чтобы было возможно писать программы, работающие в любой системе UNIX, был разработан стандарт POSIX. Стандарт POSIX определяет минимальный интерфейс системного вызова, который должны поддерживать системы UNUX.
В 1974г. был выпущен центральный процессор Intel 8080, для него была создана операционная система CP/M. В 1977г. она была переработана для других процессоров, например Z80.
В начале 80-х была разработана система MS-DOS, и стала основной системой для микрокомпьютеров.
В 80-х годах стало возможным реализовать графический интерфейс пользователя (GUI - Graphical User Interface), теория которого была разработана еще в 60-е годы. Первой реализовала GUI корпорация Macintosh.
С 1985 года выпустили Windows, в то время она была графической оболочкой к MS-DOS вплоть до 1995г., когда вышла Windows 95.
Уже тогда было ясно, что DOS с ее ограничениями по памяти и по возможностям файловой системы не может воспользоваться вычислительной мощностью появляющихся компьютеров. Поэтому IBM и Microsoft начинали совместно разрабатывать операционную систему OS/2. Она должна была поддерживать вытесняющую многозадачность, виртуальную память, графический пользовательский интерфейс, виртуальную машину для выполнения DOS-приложений. Первая версия вышла 1987г.
В дальнейшем Microsoft отошла от разработки OS/2, и стала разрабатывать Windows NT. Первая версия вышла в 1993г.
В середине 80-х стали бурно развиваться сети персональных компьютеров, работающие под управлением сетевых или распределенных операционных систем.
Сетевая операционная система не имеет отличий от операционной системы однопроцессорного компьютера. Она обязательно содержит программную поддержку для сетевых интерфейсных устройств (драйвер сетевого адаптера), а также средства для удаленного входа в другие компьютеры сети и средства доступа к удаленным файлам.
Распределенная операционная система, напротив, представляется пользователям простой системой, в которой пользователь не должен беспокоиться о том, где работают его программы или где расположены файлы, все это должно автоматически обрабатываться самой операционной системой.
В 1987г. была выпущена операционная система MINIX, она была построена на схеме микро ядра.
В 1991г. была выпущена LINUX, в отличии от микроядерной MINIX она стала монолитной.
Чуть позже вышла FreeBSD (основой для нее послужила BSD UNIX).
1.2 Назначение ОС
1.2.1 ОС как виртуальная машина
ОС предоставляет пользователю виртуальную машину, которую легче программировать и с которой легче работать, чем непосредственно с аппаратурой, составляющей реальную машину.
Например, чтобы считать или записать информацию на дискету, надо:
Запустить двигатель вращения дискеты
Управлять шаговым двигателем перемещения головки
Следить за индикатором присутствия дискеты
Выбрать номер блока на диске
Выбрать номер сектора на дорожке
Все эти функции берет на себя операционная система.
1.2.2 ОС как система управления ресурсами
Чтобы несколько программ могло работать с одним ресурсом (процессор, память), необходима система управления ресурсами.
Способы распределения ресурса:
Временной - когда программы используют его по очереди, например, так система управляет процессором.
Пространственный - программа получает часть ресурса, например, так система управляет оперативной памятью и жестким диском.
1.3 Интерфейс прикладного программирования
API (Application Programming Interface) - интерфейс прикладного программирования, .
Интерфейс между операционной системой и программами определяется набором системных вызовов.
Например, если пользовательскому процессу необходимо считать данные из файла, он должен выполнить команду системного вызова, т.е. выполнить прерывание с переключением в режим ядра и активизировать функцию операционной системы для считывания данных из файла.
Рассмотрим наиболее часто применяемых системных вызовов стандарта POSIX. В POSIX существует более 100 системных вызовов.
fork - создание нового процесса
exit - завершение процесса
open - открывает файл
close - закрывает файл
read - читает данные из файла в буфер
write - пишет данные из буфера в файл
stat - получает информацию о состоянии файла
mkdir - создает новый каталог
rmdir - удаляет каталог
link - создает ссылку
unlink - удаляет ссылку
mount - монтирует файловую систему
umount - демонтирует файловую систему
chdir - изменяет рабочий каталог
В UNIX вызовы почти один к одному идентичны библиотечным процедурам, которые используются для обращения к системным вызовам.
Рассмотрим интерфейс прикладного программирования для Windows - Win32 API. Win32 API отделен от системных вызовов. Это позволяет в разных версиях менять системные вызовы, не переписывая программы.
Поэтому непонятно является ли вызов системным (выполняется ядром), или он обрабатывается в пространстве пользователя.
В Win32 API существует более 1000 вызовов. Такое количество связано и с тем, что графический интерфейс пользователя UNIX запускается в пользовательском режиме, а в Windows встроен в ядро. Поэтому Win32 API имеет много вызовов для управления окнами, текстом, шрифтами т.д.
Рассмотрим вызовы Win32 API, которые подобны вызовам стандарта POSIX.
CreatProcess (fork) - создание нового процесса
ExitProcess (exit) - завершение процесса
CreatFile (open) - открывает файл
CloseHandle (close) - закрывает файл
ReadFile (read) - читает данные из файла в буфер
WriteFile (write) - пишет данные из буфера в файл
CreatDirectory (mkdir) - создает новый каталог
RemoveDirectory (rmdir) - удаляет каталог
SetCurrentDirectory (chdir) - изменяет рабочий каталог
Интерфейс Win32 API позволяет программам работать почти на всех версиях Windows
1.4 Структура операционных систем
1.4.1 Монолитная система
Главная программа, которая вызывает требуемые сервисные процедуры.
Набор сервисных процедур, реализующих системные вызовы.
Набор утилит, обслуживающих сервисные процедуры.
Простая модель монолитной системы
В этой модели для каждого системного вызова имеется одна сервисная процедура (например, читать из файла). Утилиты выполняют функции, которые нужны нескольким сервисным процедурам (например, для чтения и записи файла необходима утилита работы с диском).
Этапы обработки вызова:
Выполняется переход из режима пользователя в режим ядра
ОС проверяет параметры вызова для того, чтобы определить, какой системный вызов должен быть выполнен
После этого ОС обращается к таблице, содержащей ссылки на процедуры, и вызывает соответствующую процедуру.
1.4.2 Многоуровневая структура ОС
Обобщением предыдущего подхода является организация ОС как иерархии уровней. Уровни образуются группами функций операционной системы - файловая система, управление процессами и устройствами и т.п. Каждый уровень может взаимодействовать только со своим непосредственным соседом - выше- или нижележащим уровнем. Прикладные программы или модули самой операционной системы передают запросы вверх и вниз по этим уровням.
Пример структуры многоуровневой системы
Большой код ядра, и как следствие большое содержание ошибок
Ядро плохо защищено от вспомогательных процессов
Пример реализации многоуровневой модели UNIX.
Структура ОС UNIX
Пример реализации многоуровневой модели Windows
Структура Windows 2000
1.4.3 Модель экзоядра
Если предыдущие модели брали на себя максимум функций, принцип экзоядра, все отдать пользовательским программам. Например, зачем нужна файловая система? Почему не позволить пользователю просто читать и писать участки диска защищенным образом? Т.е. каждая пользовательская программа сможет иметь свою файловую систему. Такая операционная система должна обеспечить безопасное распределение ресурсов среди соревнующихся за них пользователей.
1.4.4 Микроядерная архитектура (модель клиент-сервер)
Эта модель является средним между двумя предыдущими моделями.
В развитии современных операционных систем наблюдается тенденция в сторону дальнейшего переноса задач из ядра в уровень пользовательских процессов, оставляя минимальное микроядро.
В этой модели вводятся два понятия:
Серверный процесс (который обрабатывает запросы)
Клиентский процесс (который посылает запросы)
В задачу ядра входит только управление связью между клиентами и серверами.
Малый код ядра и отдельных подсистем, и как следствие меньшее содержание ошибок.
Читайте также: