Краткие теоретические сведения
Содержание
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Лабораторная работа №1: Работа с файлами . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Лабораторная работа №2: Файловые системы FAT . . . . . . . . . . . . . . . . . . . . . . 8
Лабораторная работа №3: Работа с памятью . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Лабораторная работа №4: Обработчики прерываний . . . . . . . . . . . . . . . . . . . . 15
Лабораторная работа №5: Сложные обработчики и взаимодействие
резидентных программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Лабораторная работа №6: Приложения Windows с использованием
Win 32 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Лабораторная работа №7: Создание и использование элементов управления 30
Лабораторная работа №8: Графический ввод-вывод в оконном приложении 32
Лабораторная работа №9: Динамическое отображение данных на окне . . . . . 34
Лабораторная работа №10: Обмен сообщениями между окнами, обработка
сообщений ввода-вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Лабораторная работа №11: Использование потоков . . . . . . . . . . . . . . . . . . . . . 37
Лабораторная работа №12: Синхронизация доступа к ресурсам . . . . . . . . . . . 41
Лабораторная работа №13: Приоритеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Лабораторная работа №14: Реестр Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Введение
Настоящий лабораторный практикум имеет целью систематизировать практическую часть (лабораторные занятия) по дисциплине «Системное программирование». Набор заданий охватывает достаточно большое число тем, большинство из которых можно отнести к трём основным направлениям:
– элементы программирования в однозадачной среде (файловая система, ввод-вывод, обработка прерываний);
– основы программирования приложений Win32 (событийное управление, ввод-вывод, доступ к ресурсам);
– многозадачное и многопоточное программирование, взаимодействие процессов в среде Win 32.
В данный практикум сознательно не были включены некоторые крупные тематические блоки, традиционно относимые к системному ПО, такие как теоретические основы операционных систем и теория трансляторов. Также не рассматриваются иные операционные системы (в первую очередь семейство Unix-систем) и аспекты и применительно к платформе windows – технологии .NET. Это объясняется наличием в учебной программе соответствующих специализированных курсов, что позволило сосредоточиться на базовом уровне освоения наиболее распространенной платформы и универсальных для большинства сред задачах системного уровня. Внимание же, уделяемое низкоуровневому программированию и, в частности, ОС MS-DOS, обосновано тем, что в результате обнаруживается наиболее простой и экономичный путь практического изучения ряда задач – как актуальных для специальных применений, так и свойственных более сложным платформам.
Описания лабораторных работ строятся, насколько возможно, по единообразной схеме: цель работы, краткие вводные теоретические сведения, приблизительный перечень вопросов для контроля усвоения темы, варианты заданий к лабораторной работе. Следует отметить, что информация в теоретических блоках описаний лабораторных работ не является исчерпывающей и не может заменить справочные пособия и другие источники.
Жестких ограничений на используемые языки и среды программирования не накладывается. Для заданий первой группы ожидается использование Ассемблера, однако частично они могут быть выполнены и с помощью языков высокого уровня. Задания, рассчитанные на среду Windows, могут выполняться любыми подходящими средствами при условии демонстрации взаимодействия с соответствующими системными интерфейсами.
Лабораторная работа №1
Работа с файлами
Цели работы:
1) изучение функций доступа к файлам и управления файлами в среде MS-DOS;
2) реализация алгоритмов поиска файлов;
3) закрепление практических навыков программирования средствами Ассемблера с использованием функций MS-DOS.
Краткие теоретические сведения
Данные на внешних носителях принято организовывать в виде файлов.
Файл — упорядоченный набор данных, пригодный для использования прикладными программами. Удобно представлять файл как совокупность данных (используются прикладными программами) и метаданных (данные о размещении данных, используются системными программами).
Для организации хранения данных, предоставления доступа к ним и обеспечения другого сервиса служит файловая система (ФС). В это понятие входят как структуры для собственно хранения данных и метаданных, так и включенные в ПО средства работы с ними.
Типичной для файловых систем является иерархическое (древовидное) построение: файлы могут объединяются в каталоги (директорий – directory, папка – folder), причем сами каталоги также могут быть вложенными. Таким образом, каталог также является файлом, но специального вида – предназначенным для хранения информации о включенных в него файлах и других каталогах.
Помимо каталогов, предусматриваются и другие виды специальных файлов: файлы логических устройств, файлы-ссылки, файлы – метки тома и т.д. В отличие от специальных типов объектов файловой системы «обычные» файлы программ или данных называют регулярными.
Файлы принято идентифицировать по их именам. Учитывая наличие каталогов и подкаталогов, для однозначной локализации файла требуется также и путь к нему (path) – перечисление всей цепочки каталогов.
Для ФС Microsoft характерна отдельная иерархия каталогов для каждого логического диска. Логический диск может соответствовать физическому накопителю или одному из его разделов, реже – виртуальному устройству. С точки зрения системы каждый логический диск рассматривается как самостоятельное устройство и идентифицируется буквой: A, B, C и т.д.
Таким образом, полный (абсолютный) путь к файлу будет начинаться от «буквы» логического диска, например: A:\directory1\directory2\...\file.ext. Относительный путь начинается от текущего каталога в файловой системе.
Традиционными для MS-DOS и ранних версий Windows были файловые системы FAT (более подробно см. лабораторную работу №2). Первоначально имена ограничивались восемью символами собственно «имени» и тремя символами «расширения» (extention), причем набор символов ограничивался латинскими буквами, цифрами и некоторыми дополнительными символами: +, –, _ и т.д. Позже в именах были допущены символы национальных алфавитов, а затем введены и «длинные» имена, причем уже с использованием символов Unicode. Пределом длины «длинного» имени считается 255 символов, а имени вместе с путём – 260 символов.
Традиционные имена «8.3» содержат буквы только в верхнем регистре, и приведение их выполняется автоматически, поэтому для пользователя имена не чувствительны к регистру букв. «Длинные» имена хранятся с учётом регистра букв, однако их сравнения всё равно регистронечувствительны. Поэтому имена будут соответствовать своим файлам независимо от регистра букв в них, а в одном каталоге не могут быть два файла, имена которых различаются только регистром букв.
Для доступа к файлу он должен быть предварительно открыт, все последующие действия будут выполняться над системным объектом «открытый файл». Первоначально в MS-DOS применялись FCB (File Control Block) – структуры, содержащие информацию о файле и выполняемой над ним операции; в ту же структуру могли заноситься и результаты операции. Позже был введен более удобный подход, основанный на использовании файловых дескрипторов (file descriptor). Дескриптор представляет собой целое число, получаемое после открытия или создания файла и однозначно идентифицирующее его. Полученный дескриптор действует до закрытия файла. Вся служебная информация об объекте остается скрытой от прикладной программы, что упрощает работу. Сейчас FCB-ориентированные функции считаются устаревшими и поддерживаются лишь для совместимости с ранее написанным ПО, а основным методом доступа в современных ОС является дескрипторный.
Сервис MS-DOS для работы с файлами представлен рядом функций прерывания 21h. Ниже перечислены некоторые из них (дескрипторный доступ):
AH=3Ch – создание файла с усечением содержимого;
AH=3Dh –открытие существующего файла;
AH=5Bh – создание файла (если не существует) или открытие;
AX=6C00h – создание или открытие файла с выбором поведения функции с посредством дополнительных флагов;
AX=716Ch – то же с поддержкой длинных имён;
AH=42h – позиционирование в файле;
AH=3Fh – чтение из файла в буфер в памяти;
AH=40h – запись данных из буфера в файл;
AH=3Eh – закрытие файла.
Имеются также функции, работающие с объектами файловой системы без открытия файлов. Некоторые из них перечислены ниже:
AH=43h – получение или установка атрибутов файла (имеет подфункции);
AH=56h – переименование файла;
AX=7156h – переименование с поддержкой длинных имён;
AH=57h – получение или установка даты и времени для файла;
AH=41h – удаление файла;
AH=39h и 3Ah – создание и удаление каталога;
AX=7139h и 713Ah – то же с поддержкой длинных имён;
AH=47h и 3Bh – получение и установка текущего каталога;
AX=7147h и 713Bh – то же с поддержкой длинных имён;
AH=4Eh и 4Fh – поиск (начало и продолжение поиска) файла по шаблону, результат возвращается в области DTA;
AX=714Eh и 714Fh – поиск с поддержкой длинных имён.
Контрольные вопросы
1. Хранение файлов и организация доступа к ним.
2. Способы доступа к файлам.
3. Атрибуты файлов.
4. Функции MS-DOS для работы с файлами.
5. Открытие и закрытие файлов.
6. Чтение данных из файла.
7. Запись данных в файл.
8. Поиск файла.
9. Создание файлов.
10. Переименование файлов.
11. Удаление файлов.
Варианты заданий
1.3.1. С клавиатуры вводятся имя исходного файла и имя файла для хранения результата. Необходимо при помощи функции поиска файлов убедиться в существовании исходного файла и отсутствии результирующего. Если исходный файл отсутствует, выдается предупреждение, и выполнение останавливается. Если результирующий файл уже присутствует, выдается предупреждение, и прежнее содержимое файла перекрывается.
После проверки необходимо открыть исходный файл, прочитать его блоками по 256 байт, зашифровать при помощи своей фамилии и зашифрованные данные сохранить в результирующем файле. Для шифрования использовать функцию XOR для соответствующих байтов фамилии и данных
1.3.2. С клавиатуры вводятся первые символы имени файла (например myfile) и имя файла результата. Необходимо найти все файлы, начинающиеся с данных символов (myfile.txt, myfile1.doc, myfile005.txt, …), по очереди открыть эти файлы и склеить их содержимое в результирующем файле, читая блоками по 256 байт.
1.3.3. С клавиатуры вводятся расширение имени для поиска файлов (например, txt) и имя файла результата. Необходимо найти все файлы с этим расширением и сохранить их имена в результирующем файле. В случае если файл для хранения результата уже существует, его старое содержимое должно быть сохранено, а новые записи надо добавлять в конец файла.
1.3.4. Репозиторий имен файлов и директориев (повышенной сложности).
Репозиторий представляет собой динамическую структуру в памяти (предположительно дерево или иерархический список), содержащую информацию об именах файлов и каталогах, принадлежности файлов каталогам, вложенности каталогов. Поддерживаются «длинные» имена.
Для репозитория должны быть реализованы функции: включение файла (каталога) в репозиторий; исключение файла (каталога); форматированный вывод содержимого репозитория; сравнение содержимого репозитория и файловой системы.
В качестве дополнительной функции можно предусмотреть частичную выгрузку содержимого репозитория в файл.
Данное задание требует знакомства со средствами управления памятью.
Лабораторная работа №2
Файловая система FAT
Цели работы:
1) изучить структуру файловых систем FAT;
2) научиться работать с файловой системой FAT;
3) ознакомиться с типичными задачами, требующими прямого доступа к файловой системе.