Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) icon

Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет)



НазваниеМинистерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет)
Истратов А.Ю
Дата конвертации23.04.2013
Размер50.67 Kb.
ТипКурсовая
скачать >>>

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ

ЭЛЕКТРОНИКИ И МАТЕМАТИКИ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)


Курсовая работа по дисциплине

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


Выполнил:

Шаповалов Игорь

С-44, АВТ


Проверил:

Преподаватель каф.МОСОиУ

Истратов А.Ю.


Москва 2007 г.

Лабораторная работа №1


Вариант №17


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


^ Код программы с комментариями:


#include /* Включаем заголовочные файлы*/

#include

#include

#include

int i=0; /* Счетчик прерываний */

sig() /* Функция обработки прерываний */

{

i++;

if(i==3)

{

printf("ПОСЛЕДНЕЕ ПРЕРЫВАНИЕ \nВЫХОД\n");

exit(0);

}

else

{

printf("П Р Е Р Ы В А Н И Е %d \n",i);

sleep(1);

}

}

main()

{

void sig(); /* Объявляем функцию обработки прерывании*/

signal(SIGINT, sig); /* В случае прихода сигнала прерываний SIGINT управление передается функции sig */

if(fork()==0) /* Распараллеливание процесса */

{ /* Процесс сын */

system("ls -l | awk '{print $1 $9}' > 1.txt "); /*Выводим информацию о всех файлах данного каталога, вырезаем столбцы с правами доступа и именами файлов и записываем в 1.txt*/

system("cut -b 2-100 1.txt > 2.txt"); /*Вырезаем символы в 1.txt, начиная со второго, и записываем в 2.txt*/

system("rm 1.txt"); /*Удаляем 1.txt*/

}

else

{ /* Процесс отец */

wait(1); /*Ждёт завершения Сына*/

system("find -mtime -7 > 3.txt"); /*Отсеиваем файлы, дата модификации которых не превышает семи дней, и их имена записываем в 3.txt*/

system("cut -b 3-100 3.txt > 1.txt"); /* Вырезаем символы в 3.txt, начиная с третьего, и записываем в 1.txt */

system("rm 3.txt"); /*Удаляем 3.txt*/

char b[100]; /*Создание массива из 100 элементов*/

FILE *da;

da = fopen ("1.txt" , "r"); /*Открываем 1.txt на чтение*/

sleep(2);

while(1)

{

if(fscanf (da, "%s", b)==EOF){ break; } /* Считываем построчно информацию в массив b*/

else

{

char n[100]="";

strcat(n, "grep "); /*Записываем в массив n grep*/

strcat(n, b); /*Записываем в массив n название из b*/

strcat(n, " 2.txt"); /*Записываем в массив n 2.txt*/

system(n); /*Выполняем команду, получившуюся в n*/

}

}


fclose (da);

}

}


Пояснение:

  • Системный вызов signal(SIGINT, sig) означает, что в случае прихода сигнала прерываний SIGINT , управление передается функции sig()

  • Для распараллеливания процессов используем системный вызов fork().

Программа разделяется на две идентичные копии, которые продолжают выполняться как два независимых процесса.

fork()==0 – процесс –сын.

fork()==1 – процесс – отец.


Функция обработки прерываний sig():


  • При каждом заходе в функцию увеличиваем счетчик прерываний на 1.

  • Если число прерываний достигло трех, выводим на экран сообщение:

  • ^ ПОСЛЕДНЕЕ ПРЕРЫВАНИЕ

ВЫХОД

и выходим из программы

  • Если число прерываний меньше трех, выводим на экран сообщение:

П Р Е Р Ы В А Н И Е


Лабораторная работа №2


Задание: Выполнить лабораторную работу №1 на интерпретаторе команд shell.


^ Код программы с комментариями:


count=0 #Счётчик прерываний

signal() #Функция обработки прерываний

{

count=`expr $count + 1`

if [ $count -eq 3 ]

then

echo "ПОСЛЕДНЕЕ ПРЕРЫВАНИЕ"

echo "ВЫХОД"

exit 0;

else

echo "ПРЕРЫВАНИЕ $count"

fi

}

trap signal 2 #В случае прихода сигнала прерывании, управление передается ф-ии signal

sleep 1

sleep 1

sleep 1

ls -l | awk '{print $1 $9}' > 1.txt #Выводим информацию о всех файлах данного каталога, вырезаем столбцы с правами доступа и именами файлов и записываем в 1.txt

cut -b 2-100 1.txt > 2.txt #Вырезаем символы в 1.txt, начиная со второго, и записываем в 2.txt

rm 1.txt #Удаляем 1.txt

find -mtime -7 > 3.txt #Отсеиваем файлы, дата модификации которых не превышает семи дней, и их имена записываем в 3.txt

cut -b 3-100 3.txt > 1.txt #Вырезаем символы в 3.txt, начиная с третьего, и записываем в 1.txt

rm 3.txt #Удаляем 3.txt

b=`cat 1.txt` #Создаём переменную b, в которой лежит информация из 1.txt

for i in $b

do

grep $i 2.txt #По шаблону сравниваем i-тый элемент переменной b с информацией в 2.txt

done

sleep 1

sleep 1

sleep 1


Пояснение:


  • Команда trap означает, что при получении сигнала запускается программа обработчик сигналов.

trap signal 2 - в случае прихода сигнала прерывании (2 –SIGINT) управление передается функции signal.

  • Интерпретатор shell допускает объединение нескольких команд в конвейер (образуется с помощью операции "|") для их совместного выполнения. В этом случае информационная связь осуществляется через межпроцессорный канал, и результат выполнения одной команды сразу поступает на вход другой.

ls -l | awk '{print $1 $9}'

Команда ls - l выдает информацию о всех файлах данного каталога. Результат выполнения этой команды поступает на вход команды

awk '{print$1 $9}'. Команда awk '{print$1 $9}' – выводит на экран только первый и девятый столбцы из полученной информации.


^ Функция обработки прерываний signal():


  • count=`expr $count + 1`; - увеличиваем значение счетчика на 1.

expr –команда, осуществляющая вычисление арифметических выражений, выполняет следующие действия: + , - , * , / , % (остаток от деления).

expr $count + 1 – означает, что берем значение переменной count и увеличиваем на 1.

`…` - присвоить результат выполнения команды.

Т.е. получается: присвоить переменной count результат выполнения команды: увеличить значение переменной count на 1.

  • Если число прерываний достигло трех (счетчик прерываний = 3), выводим на экран сообщение:

ПОСЛЕДНИЕ ПРЕРЫВАНИЕ

ВЫХОД

и выходим из программы.

  • Если число прерываний меньше трех, выводим на экран сообщение:

П Р Е Р Ы В А Н И Е

  • Выражение: if [ $count -eq 3 ] означает, что если значение переменной count равно трем (-eq 3), то будет выполняться следующее действие

- eq( = ) - le ( <= ) -qt ( > )

- lt (< ) - ge ( >= ) -ne ( != )






Похожие:

Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconМинистерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет)

Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconМинистерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет)

Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconМинистерство общего и профессионального образования российской федерации московский государственный институт электроники и математики (Технический университет)

Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconМинистерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет)
В ходе работы необходимо было разработать алгоритм, который позволял бы эффективно управлять двумя и более лифтами. Затем реализовать...
Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconМатвеев Василий Михайлович
Государственное образовательное учреждение институт электроники высшего профессионального образования Московский Государственный...
Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconПетров Глеб Игоревич
Государственное образовательное учреждение институт электроники высшего профессионального образования Московский Государственный...
Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconВасильева Вероника Александровна
Государственное образовательное учреждение институт электроники высшего профессионального образования Московский Государственный...
Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconСтепуро Павел Анатольевич
Государственное образовательное учреждение институт электроники высшего профессионального образования Московский Государственный...
Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconВальская Полина Владимировна
Государственное образовательное учреждение институт электроники высшего профессионального образования Московский Государственный...
Министерство образования и науки российской федерации московский государственный институт электроники и математики (технический университет) iconУгрозов Антон Валерьевич
Государственное образовательное учреждение институт электроники высшего профессионального образования Московский Государственный...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©rushkolnik.ru 2000-2015
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы