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

И. Г. Алексеев, А. П. Занкович

 

 

 

Минск 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: