
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем Microsoft: семейства dos, Windows
- •Интерфейс прикладных программ (api). Apidos (программные прерывания) и Win32
- •Дисковая подсистема в архитектуре ibmpc
- •Низкоуровневая организация дисковой памяти. Сервис bios доступа к дисковой подсистеме.
- •Понятие файловой системы. Назначение, требования, функции. Способы организации фс.
- •Объекты файловой системы: файлы, директории, логические устройства, другие виды объектов.
- •Файловые системы на основе fat
- •X.2 Файловая система ntfs
- •Служебные структуры fat и их использование
- •Программный интерфейс файловой системы (функции для взаимодействия с фс, файлового ввода-вывода) – dos, Windows Функции общего назначения
- •Файловый ввод-вывод
- •14. Адресное пространство процесса (задачи).
- •15. Приложения Windows (Win 32), разновидности. Структура оконных приложений
- •1. Основные определения
- •2. Особенности приложений Win 32.
- •3. Событийное управление
- •4. Структура приложения
- •16. Окно Win32: назначение, виды, свойства. Оконные классы.
- •17. Создание и управление окнами.
- •18. Событийное управление в Win32. Сообщения и очереди сообщений Windows (Windowsmessages): назначение, структура, отсылка, доставка, обработка Сообщения и очереди сообщений.
- •19. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения.
- •20. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде. Модель многозадачности Win 32
- •21. Состояния процессов (многозадачная среда). Состояния процессов (потоков)
- •22. Многозадачность в win32. Планирование и выполнения программ в win32
- •23. Процессы win32. Атрибуты и состояния процессов. Порождение процессов и управление ими. Основы управления процессами Win32
- •24. Потоки и многопоточные приложения. Порождение потоков, состояние потоков, управление ими. Основы управления потоками Win32
- •25. Нити – альтернативное управление выполнением программы Управление нитями
- •26. Распределение времени выполнения программ в многозадачной системе. Приоритеты. Распределение времени между потоками (управление приоритетами)
- •27. Приоритеты процессов и потоков win32. Управление приоритетами.
- •28. Взаимодействие процессов/потоков, взаимное исключение, синхронизация (базовые сведения)
- •29. Реализация взаимного исключения. Механизм criticalsection.
- •30. Синхронизация при управлении процессами и потоками
- •31. Функция ожидания
- •32. Использование каналов и почтовых ящиков для обмена данными
- •33. Использование файловой системы для обмена данными
- •X.2.6. Использование сообщения wm_copydata
- •34. Графическая подсистема win32 – общая характеристика, основные принципы.
- •35. Основные объекты win32 gdi. Средства векторной и растровой графики
- •Растровая графика
- •36. Подсистема памяти. Основные задачи, функции, требования
- •37. Виртуальное адресное пространство, управление памятью.
- •38. Динамическое распределение памяти программами (heap). HeapApiWin32.
- •Функции работы с кучами (heap-область)
- •39. Подсистема памяти win32. Регионы(области) памяти. Группы функций api подсистемы памяти. Адресное пространство процесса.
- •40. Управление на уровне менеджера вирнуальной памяти. (vmm)
- •41. Отображение файлов в память Проецирование файлов в память
- •42. Системный реестр windows: назначение, организация, доступ
Понятие файловой системы. Назначение, требования, функции. Способы организации фс.
Файловая система (ФС) FAT отличается простотой, что позволяет относительно несложно запрограммировать низкоуровневый доступ к ней. Файлы хранятся в виде связных списков блоков — кластеров. Кластер представляет собой объединение от 1 до 64 целых секторов и, следовательно, имеют размер от 512 байт до 32 Кбайт. Таким образом, каждый файл, в зависимости от размера, представляется одним или несколькими кластерами, образующими цепочку (chain).
Ссылки, обеспечивающие связность списка, хранятся отдельно от данных, в специальной структуре — таблице размещения файлов (File Allocation Table — FAT), размещение которой на диске фиксировано и заранее известно. Каждая ячейка таблицы позиционно соответствует одному кластеру и содержит номер следующего кластера в цепочке. Кроме того, следующие значения ячеек зарезервированы для специальных случаев: 0 — пустой кластер, FFFh — последний кластер в цепочке, FF7h — кластер помечен как дефектный и не используется (приведены значения для FAT12, для прочих они аналогичны). Первые две ячейки таблицы объединены и содержат код типа носителя.
Наибольшее количество кластеров, представимых таблицей, зависит от разрядности ее ячеек. В зависимости от этого различают версии FAT, на практике встречаются 12-, 16- и 32-разрядные: соответственно FAT12, FAT16 и FAT32 (в FAT32 реально используются лишь 28-разрядные значения, но в 4-байтовых ячейках). Малое число кластеров приводит на разделах большого объема к слишком большому размеру кластера и, как следствие, непроизводительному расходу дискового пространства. Для сравнения: у файловых систем, свободных от ограничений FAT, характерный размер распределяемых блоков составляет несколько килобайт.
Для обеспечения надежности на диске присутствует обычно две копии FAT. Функции ОС, работающие с файловой системой, модифицируют обе копии согласованно, а также распознают повреждение таблиц, но автоматическое восстановление не предусмотрено. В своих программах при непосредственных обращениях к FAT также необходимо поддерживать когерентность её копий.
Сканирование цепочки кластеров требует знания ее начала — номера первого кластера. Он содержится в записи директория, описывающего файл. Записи директориев — 32-байтовые, содержат имя файла, его атрибуты и некоторую служебную информацию, в том числе и номер первого кластера файла (часть записей может быть занято «длинными» именами файлов — они хранятся разбитыми на фрагменты в нескольких соседних записях). Поэтому первоначально нужно считать содержимое директория, найти в нем нужное имя файла и взять из этой записи номер первого кластера.
Информация о размещении таблицы FAT, ее размере, размере кластера и другая служебная информация о разделе может быть получена из блока параметров BIOS (BIOS Parameters Block — BPB). Он содержится вместе с кодом загрузчика раздела (Boot Record) в первом его логическом секторе. Если носитель не предполагает наличия разделов (например, дискета), то этот же сектор является и первым физическим, и других загрузчиков носитель не имеет.
При наличии разделов (логических дисков) потребуется также обрабатывать таблицы разделов — Partition Tables, описывающие их размещение, тип и размеры. Первая таблица разделов содержится в «главной» загрузочной записи (MBR — Master Boot Record), в первом физическом секторе диска. Если среди разделов есть расширенные, то они сами включают вложенные разделы и поэтому в первом своем секторе также содержат таблицу разделов.
Работа с FAT требует организовать низкоуровневый доступ к диску, который осуществляется на уровне секторов. Сектор имеет фиксированный в пределах одного диска размер, стандартно 512 байт, и является минимальной одновременно передаваемой порцией данных при обмене с блочным устройством. Логическими или относительными называют секторы в пределах одного логического диска (раздела), они адресуются линейно, т.е. фактически порядковыми номерами или индексами. Нумерация начинается с 1 (в случае MS-DOS). Физические или абсолютные секторы отсчитываются в рамках всего диска, и для них действуют два основных подхода к адресации. Традиционная адресация CHS (Cylinder-Head-Sector) предполагает три компонента идентификации сектора: цилиндр (номер дорожки), головка (поверхность) и номер сектора в дорожке. Для современных дисков компоненты CHS-адресá уже не соответствуют их реальной физической конфигурации и автоматически транслируются контроллером, поэтому их правильнее воспринимать как «логические» цилиндры и поверхности. Поддержка больших объемов дисков для CHS-адресации ограничена разрядностью компонентов адреса: 1024 «цилиндра», 256 «поверхностей», 63 «сектора». Линейная адресация (LBA — Linear Block Addressing) более гибкая, более масштабируемая в сторону увеличения числа секторов и более простая в использовании.
Логические секторы в MS-DOS читаются и пишутся прерываниями int 25h и 26h соответственно, при этом передаются параметры: AL —номер устройства; DX — номер первого обрабатываемого сектора; CX — количество секторов; ES:BX – адрес буфера в памяти. Признаком ошибки служит ненулевое значение флага CF. Кроме того, после возврата из прерываний стек всегда остается невыровненным: на его верхушке находится слово с кодом ошибки (состояния), которое необходимо извлечь.
Так как доступ по абсолютным адресам потребуется, скорее всего, только для секторов в начале диска, то достаточно будет традиционных функций BIOS. Сервис BIOS доступа к дискам представлен прерыванием int 13h, имеющим ряд функций, в том числе чтение и запись группы секторов. Код функции всегда передается в AH (02h — чтение, 03h — запись); DL — номер устройства; CH — младшие 8 бит номера цилиндра; DH — номер поверхности; CL — номер начального сектора (биты 5..0) и два старших бита номера цилиндра (биты 7..6); AL — счетчик секторов (не более чем на одной дорожке); ES:BX — адрес буфера в памяти. Признаком ошибки выполнения служит единичное значение флага CF, в этом случае код ошибки возвращается в AH.
Операции над внутренними структурами файловой системы потенциально опасны, поэтому рекомендуется ограничиваться, хотя бы на этапе отладки, съемными носителями, не содержащими уникальных данных. При выполнении большинства заданий для данной лабораторной работы потребуется дискета, отформатированная под FAT. Все задания, если не оговорено иное, выполняются для корневого каталога этой дискеты. Вместо реальной (физической) дискеты можно использовать виртуальный диск A:, созданный, например, программой vfd.
ФС FAT нередко используется также на флэш-накопителях.