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

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



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

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

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

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


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


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


Выполнил:

Грязьнев Фёдор

С-44, АВТ


Проверил:

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

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


Москва

2007 г.

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

Вариант №6


Задание:

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


Пояснение:

I. Основная функция main()


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

  2. Объявляем дескрипторы межпроцессного канала g[2].

Это массив из двух элементов, первый элемент которого g[0] - дескрипторы межпроцессного канала на чтение из канала, второй -g[1] - дескрипторы межпроцессного канала на запись в канал.

  1. Объявляем массив из 800 элементов buf[800], в который в дальнейшем будем считывать информацию из межпроцессного канала.

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

  3. pipe(g) - Создание межпроцессного канала - коммуникационный канал между двумя взаимосвязанными процессами.

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

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

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

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

  1. Процесс - сын:

    1. При создании программы автоматически создаются три файла – пользовательские дескрипторы файлов:

  1. /dev/tty - файл на стандартный ввод.

1 /dev/tty - файл на стандартный вывод.

2 /dev/tty - файл на стандартное выполнение.

Строка: close(1) означает закрытие стандартного вывода.

    1. close(g[0]) - закрытие межпроцессного канала на чтение.

    2. Системный вызов dup2 позволяет осуществить доступ к одному и тому же файлу из одного и того же пользовательского процесса через два различных пользовательских дескриптора файла.

dup2(g[1],1) - дублирование дескриптора межпроцессного канала на стандартный вывод.

После этого все данные будут выводиться не на экран (по умолчанию), а в межпроцессный канал.

    1. close(g[1]) – удаляем копию.

    2. Системный вызов execl осуществляет вызов новой команды вместо уже выполняющейся без возврата в вызывающую программу.

execl("/usr/bin/users","users",0) - вывод всех пользователей, работающих в данный момент в системе.

  1. Процесс – отец:

    1. close(g[1]) - закрытие межпроцессного канала на запись.

    2. dup2(g[0],0) - дублирование дескриптора межпроцессного канала на стандартный ввод.

    3. Следующим действием, в бесконечном цикле, считываем построчно из межпроцессного канала информацию в массив buf и выводим на экран его значение.


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


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

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

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

Goodbye

время его поступления и выходим из программы

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

П Р Е Р Ы В А Н И Е

И время его поступления - printf(__TIME__ "\n")


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

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

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

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

{

i++;

if(i==3)

{

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

printf(__TIME__ "\n");

exit(0);

}

else

{

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

printf(__TIME__ "\n");

sleep(2);

}

}

main()

{

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

int g[2]; /*Объявляем дескрипторы межпроцессного канала */

char buf[800]; /*Объявляем массив из 800 элементов*/

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

управление передается функции sig */

pipe(g); /* Создание межпроцессного канала*/

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

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

close(1); /* Закрытие стандартного вывода */

close(g[0]); /* Закрытие межпроцессного канала на чтение */

dup2(g[1],1); /* дублирование дескриптора межпроцессного канала на

стандартный вывод */

close(g[1]); /* Удаляем копию*/

execl("/usr/bin/users","users",0); /* Вывод всех пользователей, работающих в

данный момент в системе */

}

else

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

close(g[1]); /* Закрытие межпроцессного канала на запись */

dup2(g[0],0); /* дублирование дескриптора межпроцессного канала на

стандартный ввод */

while(1)

{

if(scanf("%s",buf)==EOF) /* Считывание построчно из межпроцессного

канала информацию в массив buf */

break;

printf("%s\n",buf); /* Вывод на экран значение переменной buf*/

}

sleep(2);

}

}

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

Вариант №6


Задание:

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


Описание:


  1. Объявляем переменную numsig=0; -счетчик прерываний.




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




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

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

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

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

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

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

Команда test осуществляет проверку файлов, числовых величин и цепочек символов.

Выражение: if test $numsig -eq 3 then

Означает: если значение переменной numsig равно трем (-eq 3), то ….

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

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

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




  1. Основная функция




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

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

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

who | awk '{print$1}'

Команда who выдает список всех пользователей, работающих в настоящее время в системе. Результат выполнения этой команды поступает на вход команды

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


Листинг:


numsig=0; #счетчик прерывании

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

{

numsig=`expr $numsig + 1`;

if test $numsig -eq 3

then

echo "Последнее Прерывание"

date | awk '{print$4}'

exit 0;


else

echo "прерывание"

date | awk '{print$4}'

sleep 2;

fi


}


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

sleep 1;

who | awk '{print$1}'

sleep 1;

sleep 1;

sleep 1;




Нажми чтобы узнать.

Похожие:

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

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

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

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


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