Краткие теоретические сведения

Содержание

Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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) ознакомиться с типичными задачами, требующими прямого доступа к файловой системе.

Наши рекомендации