И. Г. Алексеев, А. П. Занкович
Минск 2008
СОДЕРЖАНИЕ
1. Краткие теоретические сведения…………………………………..………4
2. Лабораторные работы
Лабораторная работа №1. Система команд и файловая структура ОС
Unix/Linux ……………………………………………………………………5
Лабораторная работа №2. Управление ОС Linux с
помощью интерпретатора BASH…….…….………….………….……….11
Лабораторная работа №3. Основные принципы программирования
в ОС Unix/Linux ……………………………………………………………15
Лабораторная работа №4. Процессы и потоки в ОС Unix/Linux ………17
Лабораторная работа №5. Процессы и потоки в ОС Windows ………...22
Лабораторная работа №6. Средства межпроцессного взаимодействия
ОС …………………………………………………….……..………………23
Литература………………………………………………………………..…29
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Одной из основных подсистем ОС, непосредственно влияющей на производительность и функционирование вычислительной машины, является подсистема управления процессами и потоками, которая занимается их созданием, выполнением, уничтожением, поддерживает взаимодействие между ними, а также распределяет процессорное время между несколькими одновременно существующими в системе процессами и потоками. Современные ОС являются многозадачными. Многозадачность – способ организации вычислительного процесса, при котором одновременно выполняются сразу несколько программ или процессов.
|
|
При вытесняющей многозадачности функции планирования потоков целиком сосредоточены в операционной системе и каждому потоку для выполнения предоставляется поочередно ограниченный непрерывный период процессорного времени – квант. Поток или процесс, который исчерпал свой квант, переводится в состояние готовности и ожидает, когда ему будет предоставлен новый квант процессорного времени, а на выполнение выбирается новый поток или процесс из очереди готовых для выполнения. Выделяемые кванты времени могут быть одинаковыми или различными для всех потоков или процессов. Величина кванта обычно выбирается небольшой (не больше 6~16 миллисекунд), чтобы пользователь не ощущал присутствия в системе одновременно нескольких десятков процессов. Смена активного потока происходит, если поток завершился и покинул систему, произошла ошибка, поток перешел в состояние ожидания, исчерпан квант процессорного времени, отведенный данному потоку. На рис. 1 показана упрощённая схема работы системы управления процессами с помощью двух очередей.
Рис. 1. Реализация системы управления процессами с помощью двух очередей.
|
|
2 ЛАБОРАТОРНЫЕ РАБОТЫ
Лабораторная работа №1
Система команд и файловая структура ОС UNix/Linux
Цель работы: – изучение команд ОС для работы с файлами, каталогами, дисками, системной датой и временем; текстового редактора Kate и файлового менеджера Midnight Commander.
Теоретическая часть
Операционная система ОС Linux создана на основе ОС UNIX и во многом имеет схожую структуру и систему команд. Пользователь может работать в текстовом режиме с помощью командной строки, или с использованием графического интерфейса X Window и одного из менеджеров рабочего стола (например, KDE или GNOME). Причем, одновременно в системе могут работать 7 пользователей (6- в текстовом режиме консоли и 1 – в графическом режиме), переключение между пользователями осуществляется по нажатию клавиш:
.
В табл. 1 приведены основные команды системы
Таблица 1
Команда | Аргументы/ключи | Пример | Описание |
dir | каталог | dir dir /home | Выводит на консоль содержимое каталога |
ls | -all и другие (см. man) | ls -all | Выводит на консоль содержимое каталога |
ps | -a -x и другие (см. man) | ps -a | Выводит на консоль список процессов |
mkdir | имя каталога | mkdir stud11 | Создает каталог |
rmdir | имя каталога | rmdir stud11 | Удаляет каталог |
rm | файл | rm myfile1 | Удаляет файл |
mv | файл новое_имя | mv myfile1 myf1 | Переименование файла |
cat | файл | cat 1.txt | Вывод файла на консоль |
cd | имя каталога | cd home | Переход по каталогам |
grep | (см. man) | grep "^a" "words.txt" | Поиск строки в файле |
kill | pid процесса | kill 12045 | Уничтожает процесс |
top | Выводит на консоль список процессов | ||
htop | Выводит на консоль полный список запущенных процессов | ||
su | Переход в режим root | ||
chmod | права_доступа файл | chmod 777 1.txt | Изменение прав доступа к файлам |
mount | устройство каталог | mount /dev/cdrom /MyCD | Монтирование устройств |
dd | if= файл of= файл bs=n count=n | dd if=/dev/hda1 of=/F.bin bs=512 count=1 | Копирование побайтное |
ln | файл1 файл2 -l | ln файл1 файл2 ln –l файл1 файл2 | Создать жёсткую или символическую ссылку на файл |
uname | -a | uname -a | Информация о системе |
find | find файл | find /home a1.txt | Поиск файлов |
man | man fgetc | Справка по системе | |
info | info fgetc | Справка по системе |
Linux и Windows используют различные файловые системы для хранения и организации доступа к информации на дисках. В Linux используются файловые системы- Ext2/Ext3, RaiserFS и другие. Все файловые системы имеют поддержку журналирования. Журналируемая файловая система сначала записывает изменения, которые она будет проводить в отдельную часть файловой системы (журнал) и только потом вносит необходимые изменения в остальную часть файловой системы. После удачного выполнения всех транзакций, записи удаляются из журнала. Это обеспечивает лучшее сохранение целостности системы и уменьшает вероятность потери данных. Следует отметить, что Linux поддерживает доступ к Windows -разделам.
Файловая система Linux имеет лишь один корневой каталог, который обозначается косой чертой (/). В файловой структуре Linux нет дисков A, B, C, D …., а есть только каталоги. В Linux различаются прописные и строчные буквы в командах, именах файлов и каталогов. В Windows у каждого файла существует лишь одно имя, в Linux их может быть много. Это – «жесткие» ссылки, которые указывают непосредственно на индексный дескриптор файла. Жесткая ссылка – это один из принципов организации файловой системы Linux.
Для выполнения операций записи и чтения данных в существующем файле его следует открыть при помощи вызова open(). Ниже приведено описание этого вызова:
int open (const char *pathname, int flags, [mode_t mode]);
int fopen (const char *pathname, int flags, [mode_t mode]);
|
|
Второй аргумент системного вызова open - flag s - имеет целочисленный тип и определяет метод доступа. Параметр flags принимает одно из значений, заданных постоянными в заголовочном файле fcnt1.h. В файле определены три постоянных:
O_RDONLY – открыть файл только для чтения,
O_WRONLY – открыть файл только для записи,
O_RDWR – открыть файл для чтения и записи,
или “r”, “w”, “rw” для fopen().
Третий параметр mode устанавливает права доступа к файлуи является необязательным, он используется только вместе с флагом O_CREAT. Пример создания нового файла:
# include <sys / types.h>
# include <sys / stat.h>
# include <fcnt1.h>
int Fd1;
FILE *F1;
F1=fopen (“Myfile2.txt”, “w”, 644);
Fd1=open (“Myfile1.txt”, O_CREAT, 644);
Системные вызовы sta t и fstat позволяют процессу определить значения свойств в существующем файле.
#include <sys/types.h>
#include <sys/stat.h>
int stat (const char *pathname, struct stat *buf);
int fstat (int filedes, struct stat *buf);
Где pathname – полное имя файла, buf –структура типа stat. Эта структура после успешного вызова будет содержать связанную с файлом информацию.
Поля структуры stat включает следующие элементы:
struct stat {
dev_t st_dev; /* логическое устройство, где находится файл */
ino_t st_ino; /* номер индексного дескриптора */
mode_t st_mode; /* права доступа к файлу */
nlink_t st_nlink; /* количество жестких ссылок на файл */
uid_t st_uid; /* ID пользователя-владельца */
gid_t st_gid; /* ID группы-владельца */
dev_t st_rdev; /* тип устройства */
off_t st_size; /* общий размер в байтах */
unsigned long st_blksize; /* размер блока ввода-вывода */
unsigned long st_blocks; /* число блоков, занимаемых файлом */
time_t st_atime; /* время последнего доступа */
time_t st_mtime; /* время последней модификации */
time_t st_ctime; /* время последнего изменения */
};
Права доступа в Linux. Права доступа к файлам представлены в виде последовательности бит, где каждый бит означает разрешение на запись (w), чтение (r) или выполнение (x). Права доступа записываются для владельца-создателя файла (owner); группы, к которой принадлежит владелец–создатель файла (group); и всех остальных (other). Например, при выводе команды dir запись типа:
- rwx r-x r-w 1.exe
означает, что владелец файла 1.exe имеет права на чтение, запись и выполнение, группа имеет права только на чтение и выполнение, все остальные имеют права только на чтение. В восьмеричном виде получится значение 0754. В действительности манипулирует файлами не сам пользователь, а запущенный им процесс. Для просмотра прав доступа можно использовать функцию stat.
|
|
Пример: stat(“1.exe”, &st1);
Для записи прав доступа служит функция chmod:
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *pathname, mode_t mode);
Пример: chmod(“1.exe”, 0777);
Структура каталогов ОС Linux представлена в табл. 2. Есть также несколько полезных сокращений для имен каталогов:
- Одиночная точка (.) обозначает текущий рабочий каталог.
- Две точки (..) обозначают родительский каталог текущего рабочего.
- Тильда (~) обозначает домашний каталог пользователя (обычно это каталог, который является текущим рабочим при запуске Bash).
Таблица 2
/ | Корневой каталог |
/bin | Содержит исполняемые файлы самых необходимых для работы системы программ. Каталог /bin не содержит подкаталогов. |
/boot | Здесь находятся само ядро системы (файл vmlinuz -...) и файлы, необходимые для его загрузки. |
/dev | Каталог /dev содержит файлы устройств (драйверы). |
/etc | Это каталог конфигурационных файлов, т. е. файлов, содержащих информацию о настройках системы (например, настройки программ). |
/home | Содержит домашние каталоги пользователей системы. |
/lib | Здесь находятся библиотеки (функции, необходимые многим программам). |
/media | Содержит подкаталоги, которые используются как точки монтирования для сменных устройств (CD-ROM'ов, floppy-дисков и др.) |
/mnt | Данный каталог (или его подкаталоги) может служить точкой монтирования для временно подключаемых файловых систем. |
/proc | Содержит файлы с информацией о выполняющихся в системе процессах. |
/root | Это домашний каталог администратора системы. |
/sbin | Содержит исполняемые программы, как и каталог /bin. Однако использовать программы, находящиеся в этом каталоге может только администратор системы (root). |
/tmp | Каталог для временных файлов, хранящих промежуточные данные, необходимых для работы тех или иных программ, и удаляющиеся после завершения работы программ. |
/usr | Каталог для большинства программ, которые не имеют значения для загрузки системы. Структура этого каталога фактически дублирует структуру корневого каталога. |
/var | Содержит данные, которые были получены в процессе работы одних программ и должны быть переданы другим, и файлы журналов со сведениями о работе системы. |
Порядок выполнения работы
1. Изучить теоретическую часть лабораторной работы.
2. В консольном режиме создать, используя команды из табл.1, в домашней папке подкаталог: /номер_группы/ФИО_студента, где в дальнейшем будут храниться все файлы студента. Перейти в корневой каталог и вывести его содержимое используя команды dir и ls –all, проанализировать различия.
3. Проверить действие команд ps, ps –x, top, htop. Найти в справочной системе используя команду man справку по функциям fprintf, fputc и команде ls.
4. В текстовом редакторе joe (вызов: joe 1.c) написать программу 1.c, выводящую на экран фразу “HELLO SUSE Linux”. Компилировать полученную программу компилятором gcc
gcc 1.c –o 1.exe
Запустить полученный файл 1.exe на выполнение:
./1.exe
Варианты индивидуальных заданий
Во всех заданиях необходимо для чтения или записи файла использовать функции посимвольного ввода вывода fgetc(), fputc() или getc(), putc(). Должен быть контроль ошибок открытия, закрытия, чтения и записи файла или каталога. Вывод сообщений об ошибках должен производиться в стандартный поток вывода сообщений об ошибках (stderr) в следующем виде: имя_модуля: текст_сообщения. Имя модуля берётся из аргументов командной строки.
1. Программа ввода символов с клавиатуры и записи их в файл (имя файла вводится в качестве аргумента при запуске программы). Предусмотреть выход после ввода определённого символа (например: ctrl-F).
2. Программа просмотра текстового файла и вывода его содержимого на экран (имя файла передаётся в качестве аргумента при запуске программы, второй аргумент N устанавливает вывод по группам строк (по N –строк) или сплошным текстом (N =0)).
3. Программа копирования одного файла в другой, имена файлов передаются в качестве аргументов командной строки при запуске программы. Предусмотреть копирование прав доступа к файлу.
4. Программа подсчёта числа отображаемых символов в строках текстового файла. Результаты подсчёта записываются во второй текстовый файл (имена файлов передаются в качестве аргументов командной строки при запуске программы). Пример работы программы:
исходный текстовый файл из 3-х строк:
QWER
REEEt
WEEEEEEERSIIIONN
файл, полученный в результате работы программы:
1. 4
2. 15
3. 16