61
Все задания лабораторных работ ориентированы на использование среды разработки Eclipse, изученной в предыдущем подразделе.
Сами проекты данной лабораторной работы должны находятся в директории
/home/upk/lab7.
Чтобы подключить к Eclipse нужную рабочую среду, следует:
•выйти из среды разработки Eclipse, если она еще запущена;
•правой кнопкой мыши активировать меню значка EclipseC, расположенного
на рабочем столе и выбрать пункт меню «Свойства...»; в результате, откроется окно, показанное на рисунке 1.23 (вкладка «Запуск»);
•отредактировать команду запуска, указав рабочую область среды Eclipse в директорию /home/upk/lab7, как показано на рисунке 1.24;
•закрыть окно «Eclipse — Свойства» и снова запустить среду разработки,
которая должна содержать проекты лабораторной работы №7, как показано на рисунке 1.25.
Рисунок 1.23 — Окно свойств для запуска Eclipse
62
Рисунок 1.24 — Отредактированное окно свойств для запуска Eclipse
Рисунок 1.25 — Проекты лабораторной работы №7
63
Замечание
Для того, чтобы вызвать в окно редактора нужный исходный текст проекта, необходимо:
•в «Project Explorer» раскрыть нужный проект и найти исходный текст программы, как показано на рисунке 1.25;
•дважды, левой кнопкой мыши, активировать имя программы, текст которой появится в окне редактора Eclipse.
Общая методика выполнения всех лабораторных работ предполагает, что студент, перед выполнением каждой из них, изучает теоретический материал, изложенный в первом разделе руководства. Такой подход позволяет лучше усвоить все вопросы и успешно подготовиться к сдаче экзамена.
Как было объявлено во введении данного методического пособия, вторая часть изучаемой дисциплины предполагает интенсивное использование языка программирования С.
В вводной части первого раздела уточняется, что тема №7, посвященная подсистеме управления вводом-выводом, рассматривается из пространства пользователя через интерфейс API, обеспечиваемый ядром ОС.
Для взаимодействия с интерфейсом API, любая ОС предоставляет библиотеку libc (glibc для ОС Linux), которая создается в момент компиляции ядра ОС и является набором функций, обеспечивающих системные вызовы к этому ядру.
Сама библиотека libc написана на языке С, с возможными вставками на языке assembler, поэтому она, наряду с синтаксисом системных вызовов, создает семантическое представление, которое формируется у программиста и восприниматся им как базовые функции ОС.
Таким образом, язык C, в своем базовом функциональном наполнении, становится синонимом некоторой обобщенной ОС, для которой пришется прикладное программное обеспечение.
Язык С, заменяя аппаратно ориентированный язык assembler, берет на себя все
проблемы, связанные с определением типов данных:
•тип char — минимально адресуемый тип данных, соответствующий размер-
ности одного байта, вызывает проблемы кодировок символов и строковых типов данных;
•тип int — привязан к размерности базовых целочисленных регистров процес-
сора, поэтому является основным источником проблем, поскольку, исторически, все системные вызовы ОС ориентированы на этот тип данных;
•тип float — обычно рассматривается как дополнительный тип данных, свя-
занный с сопроцессором вещественных типов данных; этот тип данных не используется в ядре ОС и может вызвать проблемы только в приложениях.
Использование модификаторов типов short и long только добавляют количество
64
проблем:
•модификатор short определяется как тип, который не превышает размерности типа int;
•модификатор long определяется как тип, который не меньше, чем размер-
ность типа int.
Таким образом, учитывая плеяду 8, 16, 32 и 64-битных архитектур современных процессоров, следует очень тщательно относиться к размерности типов данных в разрабатываемых прикладных программах.
Цель данного подраздела — анализ типов данных, используемых в ОС УПК АСУ. Необходимо:
•прочитать учебный материал подраздела 1.1 и осознать важность стандарта POSIX и специфику программирования на языке С;
•освоить использование утилиты getconf для целей изунения параметров используемой ОС;
•запустить среду разработки Eclipse и, в рамках тестового проекта lab7.1, на
примере текста листинга 1.1, исследовать основные типы языка С для используемой ОС.
Замечание
Особое внимание следует обратить на размерность структуры mbr, которая соответствует структуре MBR блочных устройств.
Основу операций работы с файловой системой ОС составляют системные вызовы open(...), close(...), read(...), write(...) и lseek(...), которые:
•входят в системную библиотеку libc (glibc) и обеспечивают побайтный обмен данными с файлами ОС;
•на основе их формируются функции потокового ввода-вывода, например,
fopen(...), fclose(...), fread(...), fwrite(...), fseek(...) и другие, формирующие библиотеки стандартного ввода вывода ОС.
Для демонстрации примеров работы с операциями системного ввода-вывода выбрана задача анализа структуры MBR блочных устройств, поскольку:
•хотя сама MBR и не входит ни в одну файловую систему, но работа с ней необходима для правильного взаимодействия с любым блочным устройством;
•структура MBR имеет набор полей, имеющих строгое позиционирование, поэтому неправильное использование типов данных языка С может иметь не-
предсказуемый результат.
Эту часть лабораторной работы следует выполнять в процессе изучения подраздела 1.2 данного руководства.
Изучив описание системных вызовов open(...), close(...), read(...) и write(...), следу-
65
ет разобраться в алгоритме программы, представленной листингом 1.2, которая демострирует чтение первого сектора заданного блочного устройства и проверку возможного наличия в нем сигнатуры MBR.
Запустив среду разработки Eclipse, следует создать проект lab7.2, в котором реализовать этот алгоритм.
Проведя необходимое исследование, следует оформить отчет о проделанной работе.
Следующий пример, представленный листингом 1.4, расширяет возмозможности предыдущего алгоритма. Здесь используется структура отдельной записи таблицы Partition Table, представленная на листинге 1.3, которая обрабатывается в цикле программой и выводится ей на терминал.
Реализация этой программы выполняются в проекте lab7.3.
Результаты исследования работы этой программы следует сравнить с работой утилиты fdisk и полученные результаты отразить в отчете.
Последний пример, приведенный на листинге 1.5, показывает другой вариант реализации алгоритма. Здесь используется системный вызов lseek(...), который позволяет произвольно перемещаться по сектору блочного устройства, содержащего MBR, и читать нужные данные не привлекая синтаксических конструкций языка С типа структур.
Реализация этой программы выполняется в проекте lab7.4.
Результаты исследования работы этой программы следует сравнить с работой утилиты fdisk и полученные результаты отразить в отчете.
Понятие файла обычно ассоциируется с хранилищем данных, у которого имеется имя и местоположение в файловой системе ОС. Это расхожее представление необходимо изменить, изучив подраздел 1.3, обясняющий:
•основные типы файлов ОС;
•понятие i-узла (inode) файла, как основного его идентификатора.
На основе этой информации можно изучать подраздел 1.4, описывающий системные вызовы ОС по получению данных о статусе файлов.
Исходный текст программы, которая выполняет один из таких запросов, приведен на листнге 1.6.
Реализаци программы выполняется в проекте lab7.5.
Студенту следует, используя этот проект, провести:
•исследование статуса различных файлов;
•сравнение результатов работы этой программы с результатами работы утилиты stat.