Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОС Linux. Мет. указ. к лаб. работам

..pdf
Скачиваний:
26
Добавлен:
21.05.2015
Размер:
271.51 Кб
Скачать

Операционная система Linux

Методические указания

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования

УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

О п е р а ц и о н н ая система Linux

Методические указания к лабораторным работам № 1-3 по дисциплине «Операционные системы» для студентов специальности

23020165 «Информационные системы и технологии»

Составитель А. Е. Докторов

Ульяновск

2009

УДК 004.451 (076.5) ББК 32.973-018.2 я7

О-60

Рецензент профессор кафедры «Вычислительная техника» факультета информационных систем и технологий Ульяновского государственного технического университета доктор технических наук В. Н. Негода.

Одобрено секцией методических пособий научно-методического совета университета

Операционная система Linux : методические указания к лабораторным О-60 работам № 1-3 по дисциплине «Операционные системы» для студентов специальности 23020165 «Информационные системы и технологии» /

сост.: А. Е. Докторов. - Ульяновск : УлГТУ, 2009. - 38 с.

Методические указания составлены в соответствии с учебным планом специаль­ ности 23020165 «Информационные системы и технологии». Преследуют цель ориен­ тировать студентов на содержание и порядок выполнения лабораторных работ по операционной системе Linux. Даются начальные сведения по темам, примеры оформ­ ления и выполнения лабораторных заданий.

Методические указания подготовлены на кафедре ИВК.

УДК 004.451 (076.5) ББК 32.973-018.2 я7

© А. Е. Докторов, составление, 2009 © Оформление УлГТУ, 2009

Учебное издание

Операционная система Linux

Методические указания

Составитель ДОКТОРОВ Александр Евгеньевич

Редактор М. В. Теленкова Подписано в печать 25.12.2009 Формат60*84/16.

Усл. печ. л. 2,33. Тираж 50 экз. Заказ 38. Ульяновский государственный технический университет

432027, Ульяновск, Сев. Венец, 32. Типография УлГТУ, 432027, Ульяновск,Сев. Венец, 32.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ..................................................................................................................................

 

 

 

1

ЛАБОРАТОРНАЯ

РАБОТА

№1...................................................................................................

 

4

ЛАБОРАТОРНАЯ

РАБОТА

№2....................................................................................................

 

7

ЛАБОРАТОРНАЯ

РАБОТА

№3.............................................

/.....................................................

23

БИБЛИОГРАФИЧЕСКИЙ

СПИСОК.........................................................................................

 

37

ВВЕДЕНИЕ

ОПД.Ф.11

Операционные системы

102

Принципы построения операционных систем (ОС),

вычислительный процесс и его реализация с помощью ОС; основные функции ОС; обзор современных ОС и

операционных оболочек; стандартные сервисные про­ граммы; машинно-зависимые свойства ОС; управление вычислительными процессами, вводом-выводом, реаль­ ной памятью; управление виртуальной памятью; машин­ но-независимые свойства ОС; способы планирования за­ даний пользователей; динамические, последовательные и параллельные структуры программ; способы построения ОС; сохранность и защита программных систем; интер­ фейсы и основные стандарты в области системного про­ граммного обеспечения

Данные методические указания направлены на практическое изуче­ ние некоторых основных функций одной из наиболее распространенных в настоящее время операционных систем. К этим функциям относятся: организация интерфейса с пользователем, управление файловой подсис­ темой и управление процессами. На каждую функцию предусмотрено одно лабораторное занятие.

Занятие №1 представляет: установку и настройку системы, ознаком­ ление с интерфейсом, утилитами и прикладными программами (файловы­ ми менеджерами, текстовым редактором и др.).

Занятие №2 предполагает изучение: структуры файловой системы, типов файлов, процесса монтирования файловых систем, системных вызо­ вов для работы с файлами и директориями, системных вызовов для рабо­ ты с файлами, отображаемыми в память.

Занятие №3 рассматривает вопросы: идентификатор процесса, соз­ дание нового процесса, загрузка программы, межпроцессное взаимодейст­ вие через именованный и неименованный каналы. Вопросы синхрониза­ ции выполнения процессов предполагается изучать на других занятиях.

38

3

ЛАБОРАТОРНАЯ РАБОТА №1

Первый запуск системы и настройка. Интерфейс с пользователем

В качестве «учебной» системы был выбран Linux PuppyRus Jeans, который может быть установлен либо на компьютере, имеющем малые аппаратные ресурсы, либо загружать систему в оперативную память, не боясь «испортить» имеющуюся на компьютере операционную систему. Минимальные требования к оборудованию:

1)Процессор: Pentium II 233 МГц.

2)Оперативная память: 64 Мб, при наличии жесткого диска или сход­ ного по функциональности устройства для полной (full) инсталляции, или 128 Мб для запуска с компакт-диска, USB-flash для экономной (frufal) инсталляции. Обязательное наличие SWAP-раздела виртуаль­ ной памяти (при памяти менее 256 Мб).

3)Носитель информации размером от 128 Мб - любой из списка:

-CD-ROM,

-жесткий диск (встроенный или подключаемый через USB),

-USB-flash накопитель.

Порядок выполнения:

1.Для выполнения задания получите у преподавателя образ диска опе­ рационной системы в формате ISO и программу для записи CDдисков, например, SCDWriter.exe (работает в ОС Windows). Следуя инструкциям программы, запишите образ на CD-диск.

2.Уточните параметры видеосистемы того компьютера, на котором бу­ дет установлена система, используя имеющуюся на этом компьютере операционную систему.

3.Установите в BIOS первым устройством загрузки CD-диск.

4.После выполнения начальной загрузки будут предложены варианты загрузки (PuppyRus по умолчанию, PuppyRus prix=ram). Выберите один из этих вариантов (при самой первой загрузке выбор вариантов безразличен).

5.Проведите настройку видеосервера.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1.Гласc, Г. UNIX для программистов и пользователей / Г. Гласc; пер. с англ. - 3-е изд. - СПб. : BHV-Санкт-Петербург, 2004. - 820 с.

2.Подбельский, В. В. Программирование на языке Си : учеб. пособие для вузов / В. В. Подбельский. - 2-е изд., доп. - М. : Финансы и статистика, 2005. - 600 с.

3.Рогачевский, А. М. Операционная система UNIX : учеб. пособие для вузов / А. М. Рогачевский. - СПб. : БХВ-Петербург, 2002. - 528 с.

4

37

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h>

int main(){

intfd, result; size_t size; char resstring[14]; char name[]="aaa.fifo";

/* Права доступа файла FIFO должны соответствовать параметру mknod */

(void)umask(O);

mknod(name, S_IFIFO \ 0666, 0); /* Создаем FIFO */ result =fork(); /* Порождаем новый процесс */

if (result > 0) {/* Родительский процесс. FIFO открываем на запись.*/ fd = ореn(name, O_WRONLY));

size = write(fd, "Hello, world!", 14);/* Запись в FIFO 14 байт */ /*Закрываем входной поток данных. Родитель прекращает работу */ close(fd);

printf("Parent exit\n");}

else {/* Порожденный процесс. Открываем FIFO на чтение.*/ fd = ореn(name, O_RDONLY));

/*Чтение из FIFO 14 байт в массив */ size = read(fd, resstring, 14);

/* Печатаем прочитанную строку */ printf("%s\n ", resstring);

/* Закрываем входной поток и завершаем работу */ close(fd);

}

return 0;

}

Задание: напишите на базе предыдущего примера две программы, одна из которых пишет информацию в FIFO, а вторая - читает из него, так чтобы между ними не было ярко выраженных родственных связей (то есть, чтобы ни одна из них не была потомком другой).

6.В случае отсутствия приемлемого режима работы, попробуйте дру­ гие режимы, используя сообщения и рекомендации разработчиков. Так как загрузка системы проведена в оперативную память, то нет ничего страшного в полной перезагрузке кнопкой «Reset».

7.Рабочий стол после загрузки будет иметь вид, похожий на рабочий стол Windows. При работе учтите, что выбор элемента происходит при наведении указателя мыши на этот элемент, а для активизации элемента достаточно одного нажатия левой кнопки мыши.

Замечание: если будет выдано сообщение о том, что витрина не ис­ пользовалась, то необходимо закрыть это сообщение, а в меню выбрать:

Выключение>Перезагрузка Х-сервера.

8.Если на вашем компьютере есть возможность загрузки с flash-диска, то создайте загрузочный flash-диск (диск не должен иметь файловую систему NTFS, а также на нем должен быть только один раздел). Для этого в меню выберите:

Настройки>Универсальный инсталлятор PuppyRus. Далее следуйте инструкциям разработчиков.

9.Ознакомьтесь по руководству пользователя с особенностями установ­ ки операционной системы на жесткий диск.

10.Ознакомьтесь с прикладными программами, иконки которых распо­ ложены на рабочем столе (Текст, Таблицы, Paint, Видео, Аудио, Ар­ хив).

11.Рассмотрите файловые менеджеры Midnight Commander и Rox-Filer (вызов из меню). Менеджеры исходно отображают «домашний» ката­ лог пользователя, которым будет каталог «root».

12.Установка компилятора с языка Си. Использование SFS - файлов. Компилятор с языка Си изначально отсутствует в дистрибутиве

PuppyRus Jeans. Он находится в SFS-модуле (devx_301.sfs). Инструкция по подключению модуля подробно описана в руководстве пользователя.

36

5

Замечание: для подключения модуля «на один раз», то есть до пере­ загрузки системы, можно в менеджере файлов ROX-Filer кликнуть правой кнопкой мыши на иконке этого файла, и во всплывающем меню выбрать команду «Подключить модуль SFS».

13.Ознакомьтесь с возможностями интегрированной среды разработки Geany.

Запуск Geany можно выполнить из меню (Текстовый редак-

top>Geany). Для работы с языком Си можно создать файл из шаблона. Для успешной компиляции необходимо сохранить файл под другим име­ нем, отличным от «Без имени». Для компиляции, сборки и выполнения программы используйте меню «Сборка».

14.Проведите настройку сети, выбрав на рабочем столе иконку «Масте­ ра» и, далее, в окне «Настройка Рuрру» - «Соединение с интернет че­ рез сетевой интерфейс...», а остальное в соответствии с подсказками, предлагаемыми разработчиками.

Отчет должен содержать:

1.Перечень файлов загрузочного диска с указанием формата и назначе­ ния каждого файла.

2.Параметры системы личного компьютера и параметры видеосервера, при которых была получена работоспособная система с графическим интерфейсом. Для сравнения приведите параметры видеосистемы дан­ ного компьютера в системе Windows.

Контрольные вопросы:

1.Каково назначение файлов загрузочного диска?

2.Какие есть отличия графического интерфейса от интерфейса Windows?

3.Какие действия необходимо выполнить для установки системы на жесткий диск?

4.Какое есть сходство и различия файловых менеджеров Linux с ана­ логичными программами Windows?

При создании FIFO права доступа получаются из стандартной ком­ бинации параметра mode и маски создания файлов текущего процесса umask, а именно - они равны (0777 & mode) & ~umask.

При успешном создании FIFO системный вызов возвращает значе­ ние 0, при неуспешном - отрицательное значение.

Системные вызовы read() и write() при работе с FIFO имеют те же особенности поведения, что и при работе с каналом pipe.

Но системный вызов ореn() при открытии FIFO ведет себя несколько иначе, чем при открытии других типов файлов, что связано с возможно­ стью блокирования выполняющих его процессов.

Если FIFO открывается только для чтения, и флаг O_NDELAY не за­ дан, то процесс, осуществивший системный вызов, блокируется до тех пор, пока какой-либо другой процесс не откроет FIFO на запись. Если флаг O_NDELAY задан, то возвращается значение файлового дескриптора, ассоциированного с FIFO.

Если FIFO открывается только для записи, и флаг O_NDELAY не за­ дан, то процесс, осуществивший системный вызов, блокируется до тех пор, пока какой-либо другой процесс не откроет FIFO на чтение. Если флаг O_NDELAY задан, то констатируется возникновение ошибки и воз­ вращается значение -1.

Задание флага 0_NDELAY в параметрах системного вызова ореn() приводит и к тому, что процессу, открывшему FIFO, запрещается блоки­ ровка при выполнении последующих операций чтения из этого потока данных и записи в него.

Задание: Для иллюстрации взаимодействия родственных процессов через FIFO рассмотрите приведенную ниже программу (добавьте провер­ ку на успешность завершения операций). В этой программе информацией между собой обмениваются процесс-родитель и процесс-ребенок. Обрати­ те внимание, что повторный запуск этой программы приведет к ошибке при попытке создания FIFO, так как файл с заданным именем уже сущест­ вует. Перед каждым запуском программы удаляйте файл вручную или для повторных запусков сделайте программу без вызова mknode().

6

35

открытии с помощью системного вызова ореn(). После открытия имено­ ванный pipe ведет себя точно так же, как и неименованный. Для дальней­ шей работы с ним применяются системные вызовы read(), write() и close(). Время существования FIFO в адресном пространстве ядра операционной системы, как и в случае с именованным, не может превышать время жизни последнего из использовавших его процессов. Когда все процессы, рабо­ тающие с FIFO, закрывают все файловые дескрипторы, ассоциированные с ним, система освобождает ресурсы, выделенные под FIFO. Вся непрочи­ танная информация теряется. В то же время файл-метка остается на диске и может использоваться для новой реальной организации FIFO в даль­ нейшем. Прототип системного вызова

#include <sys/stat.h> #include <unistd.h>

int mknod(char *path, int mode, int dev);

Далее рассмотрены не все возможные варианты задания параметров mknod, а только те из них, которые соответствуют применению для FIFO. Параметр dev является несущественным в этой ситуации, и мы будем все­ гда задавать его равным 0. Параметр path является указателем на строку, содержащую полное или относительное имя файла, который будет являть­ ся меткой FIFO на диске. Для успешного создания FIFO файла с таким именем перед вызовом существовать не должно. Параметр mode уста­ навливает атрибуты прав доступа различных категорий пользователей к FIFO. Этот параметр задается как результат побитовой операции «или» значения S_IFIFO, указывающего, что системный вызов должен создать FIFO, и некоторой суммы следующих восьмеричных значений:

0400 - разрешено чтение для пользователя, создавшего FIFO;

0200 - разрешена запись для пользователя, создавшего FIFO;

0040 - разрешено чтение для группы пользователя, создавшего FIFO;

0020 - разрешена запись для группы пользователя, создавшего FIFO;

0004 - разрешено чтение для всех остальных пользователей;

0002 - разрешена запись для всех остальных пользователей.

ЛАБОРАТОРНАЯ РАБОТА №2

Файлы и файловая система

В UNIX [3] файлы организованы в виде древовидной структуры, на­ зываемой файловой системой. Каждый файл имеет имя, определяющее его расположение в дереве файловой системы. Корнем этого дерева явля­ ется корневой каталог (root directory), имеющий имя «/». Имена всех ос­ тальных файлов содержат путь - список каталогов (ветвей), которые не­ обходимо пройти, чтобы достичь файла. В UNIX все доступное пользова­ телям файловое пространство объединено в единое дерево каталогов, кор­ нем которого является каталог «/».Таким образом, полное имя любого файла начинается с «/» и не содержит идентификатора устройства, на ко­ тором он фактически хранится. Имя файла является атрибутом файловой системы, а не набора некоторых данных на диске, который не имеет име­ ни как такового. Каждый файл имеет связанные с ним метаданные (хранящиеся в индексных дескрипторах - inode), содержащие все харак­ теристики файла и позволяющие операционной системе выполнять опера­ ции, заказанные прикладной задачей: открыть файл, прочитать или за­ писать данные, создать или удалить файл. В частности, метаданные со­ держат указатели на дисковые блоки хранения данных файла. Имя файла

вфайловой системе является указателем на его метаданные, в то время как метаданные не содержат указателя на имя файла. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе. Име­ на жестко связаны с метаданными и, соответственно, с данными файла,

вто время как сам файл существует независимо от того, как его называют

вфайловой системе. Такая связь имени файла с его данными называется жесткой связью. По определению жесткие связи указывают на один и тот же индексный дескриптор inode. Жесткая связь является естественной формой связи имени файла с его метаданными и не принадлежит к особо­ му типу файла. Особым типом файла является символьная связь, позво­ ляющая косвенно адресовать файл. В отличие от жесткой связи, символи­ ческая связь адресует файл, который, в свою очередь, ссылается на другой

34

7

файл. В результате, последний файл адресуется символической связью косвенно. Данные файла, являющегося символической связью, содержат только имя целевого файла.

Если к файловой системе UNIX монтируется файловая система, в которой структуры файла и его метаданных существенно отличаются от UNIX, то используется виртуальная файловая система, основанная на представлении метаданных файла в виде, сходном с традиционной семан­ тикой UNIX. Интерфейсом работы с файлами является vnode (от virtual inode - виртуальный индексный дескриптор). Метаданные всех активных файлов (файлов, на которые ссылаются один или более процессов) пред­ ставлены в памяти в виде in-core inode, в качестве которых в виртуальной файловой системе выступают vnode. Структура данных vnode одинакова для всех файлов, независимо от типа реальной файловой системы, где фактически располагается файл. Данные vnode содержат информацию, не­ обходимую для работы виртуальной файловой системы, а также неизмен­ ные характеристики файла, например, такие как тип файла.

UNIX поддерживает три типа прав доступа для владельца, группы и прочих пользователей: на чтение (read, обозначается символом на r), за­ пись (write, обозначается символом w) и на выполнение (execute, обозна­ чается символом х). Права доступа могут быть изменены только владель­ цем файла или администратором системы. Для этого используется коман­ да chmod (рассмотрите самостоятельно).

Замечание: проверку результата работы команды chmod можно про­ вести только в режиме «обычного» пользователя, так как для администра­ тора атрибуты доступа не проверяются.

К дополнительным атрибутам относятся: г - позволяет пользователю удалять только файлы, которыми он владеет или имеет права на запись (используется для каталогов), s - установить права доступа запущенного процесса. К сожалению, так как система PuppyRus Jeans исходно предна­ значена для работы только в режиме администратора, наблюдать особен­ ности этих атрибутов невозможно.

сы, у которых этот pipe открыт для записи, то системный вызов блокиру­ ется и ждет появления информации. Если таких процессов нет, он вернет значение 0 без блокировки процесса. Эта особенность приводит к необхо­ димости закрытия файлового дескриптора, ассоциированного с выходным концом канала, в процессе, который будет использовать pipe для чтения (close(fd[l]) в процессе-ребенке, см. пример). Аналогичной особенностью поведения при отсутствии процессов, у которых pipe открыт для чтения, обладает и системный вызов write(), с чем связана необходимость закры­ тия файлового дескриптора, ассоциированного с входным концом канала, в процессе, который будет использовать pipe для записи (close(fd[0]) в процессе-родителе в той же программе).

Задание: напишите программу для определения в используемой операционной системе размера канала. Не забудьте, что при попытке за­ писи в канал, в котором нет места, системный вызов write завершится с ошибкой.

5. Межпроцессное взаимодействие через канал FIFO.

Для организации потокового взаимодействия любых процессов (а не только родственных, как pipe) в операционной системе UNIX применяется средство связи, получившее название FIFO (First Input First Output) или именованный pipe. FIFO во всем подобен каналу pipe, за одним исключе­ нием: данные о расположении FIFO в адресном пространстве ядра и его состоянии процессы могут получать не через родственные связи, а через файловую систему. Для этого при создании именованного канала на диске заводится файл специального типа, обращаясь к которому процессы могут получить интересующую их информацию. Для создания FIFO использует­ ся системный вызов mknod() или существующая в некоторых версиях UNIX функция mkfifo().

Следует отметить, что при их работе не происходит действительного выделения области адресного пространства операционной системы под именованный pipe, а только заводится файл-метка, существование кото­ рой позволяет осуществить реальную организацию FIFO в памяти при его

33

if (result > 0) { /* Работает родительский процесс */ close(fd[0]); /* Входной поток данных не понадобится */

size = write(fd[l], "Hello, world!", 14); /* Запись строки в поток */

/* Закрываем выходной поток данных и завершаем работу родителя */ close(fd[l]);

printf("Parent exit\n ");}

else { /* Работает порожденный процессе */

close(fd[l]); /* Выходной поток данных не понадобится */ size = read(fd[0], resstring, 14); /* Чтение строки из канала */ printf("%s\n",resstring); /* Печать прочитанной строки */

/* Закрыть входной поток и завершить работу */ close(fd[0]);

}

return 0;

}

Задание: модифицируйте этот пример для связи между собой двух родственных процессов, исполняющих разные программы.

Канал pipe служит для организации однонаправленной или сим­ плексной связи. При попытке организовать через pipe двустороннюю связь, когда процесс-родитель пишет информацию в pipe, предполагая, что ее получит процесс-ребенок, а затем читает информацию из канала pipe, предполагая, что ее записал порожденный процесс, то могла бы воз­ никнуть ситуация, в которой процесс-родитель прочитал бы собственную информацию, а процесс-ребенок не получил бы ничего. Для использова­ ния одного канала pipe в двух направлениях необходимы специальные средства синхронизации процессов.

Задание: измените предыдущий пример, причем для двухсторонней связи используйте два канала: один для передачи от родителя ребенку, второй - от ребенка родителю.

Одна из особенностей поведения блокирующегося системного вызо­ ва read() связана с попыткой чтения из пустого канала. Если есть процес-

Задание: ознакомьтесь по рекомендуемым литературным источни­ кам с организацией файловой системы операционной системы Unix. Рас­ смотрите следующие вопросы:

1)Общая структура файловой системы.

2)Типы файлов.

3)Команды для работы с файлами и каталогами.

Необходимо рассмотреть следующие команды (у некоторых ко­ манд, чтобы не было ошибок, в скобках указано полное имя, от которо­ го получилось сокращенное): имя текущего каталога -pwd, список файлов в каталоге - ls (list), изменить текущий каталог - cd, установить связи - ln (link), копировать - ср, удалить - rm (remove), распечатать файл - cat.

Порядок выполнения работы:

1.Изучение структуры файловой системы и команд pwd, cd и ls. Используя менеджеры файлов и эмулятор терминала, рассмотрите

структуру файловой системы. Отметьте наличие или отсутствие «стан­ дартных» для Unix систем каталогов (например, bin, etc, usr и т.д.), а так­ же отметьте способы обозначения каталогов, файлов ссылок, как в менед­ жерах файлов, так и командной строке терминала. В эмуляторе терминала для получения справки по команде просмотра содержимого каталога не­ обходимо использовать ключ — help (обратите внимание на использование двух знаков «минус»), например,

ls--help

2.Изучение файлов типа связь и команд для работы с файлами.

Пример использования ссылочного типа файлов приведен в режиме терминала, чтобы попутно рассмотреть команды создания нового каталога mkdir и, особенно, команды cat, дающей много возможностей по обработ­ ке текстового файла. Все действия при работе с командами записаны очень подробно, чтобы обратить внимание на особенности работы в тер­ минальном режиме.

32

9