Разработка программы контроля над временем выполнения задачи

Автор работы: Пользователь скрыл имя, 11 Сентября 2013 в 20:13, курсовая работа

Описание работы

Linux изначально был написан Линасом Торвальдсом, а затем неоднократно улучшался специалистами во всем мире, причем ни USL, ни Университет Беркли не участвовали в его создании. Он является клоном операционной системы UNIX.
Linux поддерживает большую часть популярного UNIX'овского программного обеспечения, включая систему X Window. Это довольно большая программа, разработанная в Массачусетском Технологическом институте, позволяющая компьютерам создавать графические окна и используемая на многих различных UNIX-овских платформах. Linux удовлетворяет требованиям POSIX-1 (документ стандарта операционных систем). Linux также во многом согласуется с POSIX-2, другим документом IEEE по стандартизации операционных систем. Он является смешением всех трех стандартов: BSD, System 5 и POSIX.

Файлы: 1 файл

Курсовая ОС.doc

— 108.50 Кб (Скачать файл)

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

Государственное образовательное учреждение

высшего профессионального  образования 

ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ  УНИВЕРСИТЕТ

Кафедра МО и ПЭВМ

 

«УТВЕРЖДАЮ»

Зав. кафедрой «МО и  ПЭВМ»

Макарычев П.П.

_____________________

 

«___»__________2013г

 

 

 

КУРСОВАЯ РАБОТА

по дисциплине «ОПЕРАЦИОННЫЕ СИСТЕМЫ»

на тему: «Разработка  программы контроля над временем выполнения задачи»

 

 

 

Автор работы:

Осипов В.С.

   

Специальность:

230105 («Программное обеспечение  вычислительной техники и автоматизированных систем»)

Группа:

10ВП2

   

Руководитель:

Шашков Б.Д.

   
   

Работа защищена «___» ____ 2013 г.

Оценка   ______________


 

 

 

 

 

 

Пенза 2013 г.

 

Реферат

 

     Пояснительная записка содержит 21 лист, 4 рисунка, 3 использованных источника и 1 приложение.

 

ОПЕРАЦИОННАЯ СИСТЕМА, ПРОГРАММА, ПРОЦЕСС, ВРЕМЯ ВЫПОЛНЕНИЯ, UNIX, LINUX

 

 

     Целью данной  курсовой работы является изучение  основ системного программирования под операционную систему UNIX и разработке  программы контроля времени выполнения процесса.

    Объектом исследования  работы являются процессы операционной  системы UNIX и их функционирование.


 

 

СОДЕРЖАНИЕ

 

 

 

 

 

 

Введение

 

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

          К одной  из наиболее популярных ОС  можно отнести операционную систему  UNIX.

        Характеристики UNIX, позволяющие понять популярность этой системы:

  • Код системы написан на языке высокого уровня Си, что сделало ее простой для понимания, изменений и переноса на другие платформы. Система на языке Си имела на 20-40 % больший размер, а производительность ее была на 20% ниже аналогичной системы, написанной на ассемблере. Однако ясность и переносимость, а в результате  - и открытость системы сыграли решающую роль в ее популярности. Можно смело сказать, что UNIX является одной из наиболее открытых систем. Несмотря на то. что большинство UNIX поставляется сегодня не в исходных текстах, а в виде бинарных файлов, система остается легко расширяемой и настраиваемой.
  • UNIX – многозадачная многопользовательская система с широким спектром услуг. Один мощный сервер может обслуживать запросы большого количества пользователей. При этом необходимо администрирование только одной системы. Ваша система может выполнять различные функции  - работать как вычислительный сервер, обслуживающий сотни пользователей, как сервер базы данных, как сетевой сервер, поддерживающий важнейшие сервисы сети, или даже как сетевой маршрутизатор.
  • Несмотря на многообразие версий UNIX, основой всего семейства являются принципиально одинаковая архитектура и ряд стандартных интерфейсов. Опытный администратор без труда сможет обслужить другую версию системы, для пользователей переход на другую версию и вовсе может оказаться незаметным
  • Простой, но мощный модульный пользовательский интерфейс. Имея в своем распоряжении набор утилит, каждая из которых решает узкую специализированную задачу, вы можете конструировать из них сложные.
  • Использование единой, легко обслуживаемой иерархической файловой системы. Файловая система – это не только доступ к данным, хранящимся на диске. Через унифицированный интерфейс файловой системы осуществляется доступ к терминалам, принтерам, магнитным лентам, сети и даже памяти.
  • Очень большое количество приложений, в том числе свободно распространяемых, начиная от простейших текстовых редакторов и заканчивая мощными системами управления базами данных.

     Linux изначально был  написан Линасом Торвальдсом,  а затем неоднократно улучшался  специалистами во всем мире, причем  ни USL, ни Университет Беркли не участвовали в его создании. Он является клоном операционной системы UNIX.

Linux поддерживает большую  часть популярного UNIX'овского  программного обеспечения, включая  систему X Window. Это довольно большая  программа, разработанная в Массачусетском  Технологическом институте, позволяющая  компьютерам создавать графические окна и используемая на многих различных UNIX-овских платформах. Linux удовлетворяет требованиям POSIX-1 (документ стандарта операционных систем). Linux также во многом согласуется с POSIX-2, другим документом IEEE по стандартизации операционных систем. Он является смешением всех трех стандартов: BSD, System 5 и POSIX.

В данной курсовой работе представлено изучение основ системного программирования под операционную систему UNIX и разработка программы  контроля над временем выполнения задачи. Объектом исследования работы являются процессы операционной системы UNIX, и их функционирование.

 

Разработка  программы контроля над временем выполнения задачи

1.1 Анализ требований

 

Задачей данной курсовой работы является разработка программы  контроля над временем выполнения задачи  на языке программирования СИ.

Требования к программе:

  • разработанная задача должна состоять из нескольких этапов (процессов);
  • при выполнении очередного этапа необходимо фиксировать время выполнения и сравнивать его с допустимым значением времени;

     - все случаи превышения  времени необходимо записывать  в       журнал (файл);

- журнал должен сохраняться  и дополнять при каждом запуске  программы; 

способ обмена информацией  – сообщения.

 

 

Программно-технические  требования:

  1. Операционная система: Linux Ubuntu 12.04 или др. совместимые.
  2. Язык программирования: С++.
  3. Процессор: Intel Pentium 166 и выше.

ОЗУ: 32 mb и выше

 

1.2 Проэктирование

 

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


 

 





 


 

 

 

1.- порождение процесса: здесь готовятся  условия для первого исполнения  процесса – проверяются возможности  создания процесса и наличие  необходимых ресурсов, создаются  управляющие структуры, связанные с этим процессом;

2.- готовность: процесс получил  все ресурсы, кроме процессорного  времени;

3.- активность: программа выполняется  на процессоре;

4.- ожидание: программа ожидает  выделения какого-либо ресурса;

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

Процессы в UNIX делятся на следующие типы:

        1. Системный процесс – часть ядра операционной системы (управление памятью);
        2. процесс-демон – специальный процессы, которые запускаются при инициализации системы и работают в фоновом режиме, не имеют связи с внешним миром {низкоприоритетные системные процессы} (управление системной печатью, сетевой сервис, терминальный доступ);
        3. прикладные процессы – порождаются сеансами пользователя.

 

 



wait



exit



 

 



           fork





 

 

 

 

Состояние:

              1. процесс выполняется в режиме задачи;
              2. процесс выполняется в режиме ядра;
              3. процесс готов к запуску и находится в памяти;
              4. процесс приостановлен, но находится в памяти;
              5. процесс готов к запуску, но выгружен;
              6. процесс приостановлен и выгружен;
              7. процесс зарезервирован;
              8. создаётся процесс;
              9. завершение процесса.

С порождением связан дескриптор процесса. Информация в  дескрипторе – совокупность атрибутов  процесса:

       PID – идентификатор процесса (системное имя этого процесса), присваивается при создании процесса;

       PPID – идентификатор родительского процесса;

       RID – реальный идентификатор пользователя;

       EVID – эффективный идентификатор пользователя;

       RGID, EGID – реальные идентификаторы группы;

       PGID – идентификатор группы;

       SID – идентификатор сеанса;

       TTY – терминальная линия;

        Nice Number – приоритет процесса.

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

fork () – функция порождает новый процесс, который является копией родительского процесса.

В родительский процесс  возвращается идентификатор потомка, а в процесс-потомок возвращается 0.

            if (pid = fork ())

<родителя>

else

<потомок>

Завершение процесса выполняется по функции EXIT. По вызову EXIT процесс завершается, отключаются сигналы, закрываются файлы, сохраняется код возврата и время выполнения. Код возврата определяется параметром функции Exit. Окончательно ликвидировать процесс можно только по функции Wait. Эта функция используется для синхронизации родительских и дочерних процессов. Если родительский процесс породил какой-то процесс, он должен получить информацию, о его завершении. Wait возвращает значение идентификатора прекратившего свое существование потока, в качестве параметра передается адрес на переменную целого типа, куда помещается код возврата.

В нашем случае при  инициализации процесса необходимо зафиксировать время начала действия процесса, а также после завершения процесса зафиксировать время окончания процесса. В результате получим время действия процесса.

 

1.3 Кодирование

При разработке программы использовался язык программирования С++, тексты набраны в редакторе, компиляция осуществлялась из командной строки.

Исходный текст программы приведен ниже.

 

Текст программы:

Log.cpp:

#include <fstream>

#include <iostream>

#include <cstdlib>

#include <errno.h>

 

#include "share.h"

 

int main()

{

// Пытаемся выделить очередь сообщений

if( !createMessageQueues())

    {

        std::cout << "Ошибка при создании очередей сообщений" << std::endl;

        return EXIT_FAILURE;

    }

   

    std::cout << "Старт" << std::endl;

   

    while( 1)

    {

 

struct Message message;

        int receiveResult = msgrcv( reportMessageQueue, ( void*)&message, sizeof( struct Message), 0, 0);

        if( receiveResult == -1 && errno != ENOMSG)

        {

std::cout << "Ошибка при получении" << std::endl;

return EXIT_FAILURE;

        }

       

        std::cout << "PID: " << message.data.pid << " , ";

        std::cout << "Номер этапа: " << message.data.num << " , "; 

        std::cout << "Время: " << message.data.sec << " сек." << std::endl; 

       

        std::fstream log;

log.open ( "log.txt", std::fstream::out | std::fstream::app);

log << "PID: " << message.data.pid << " , ";

        log << "Номер этапа: " << message.data.num << " , "; 

        log << "Время: " << message.data.sec << " сек." << std::endl;

log.close();

       

        sleep(1);

}

 

return 0;

}

Underproccess.cpp:

#include <iostream>

 

#include <cstdlib>

#include <ctime>

#include <unistd.h>

 

#include "share.h"

 

int main( int argv, char* argc[])

{

// Инициализируем генератор случайных чисел

srand( time(NULL));

 

// Пытаемся выделить очередь сообщений

if( !createMessageQueues())

    {

        std::cout << "Ошибка при создании очередей сообщений" << std::endl;

        return EXIT_FAILURE;

    }

 

// Инициализируем среднее время работы этапа для

// генерации автоматического завершения этапа

int avrTime = atoi( argc[ argv -1]);

 

// Проходимся по ограничениям времени на все этапы

for( int i = 1; i < argv - 1; i++)

{

std::cout << "\tЭтап №" << i << std::endl;

std::cout << "Старт..." << std::endl;

 

// Начало замера времени

time_t checkTime = time( NULL);

 

// Вычисляем сколько секунд будем спать

int sleepTime = rand() % avrTime; 

// Спим xD

sleep( sleepTime);

// Вычисляем сколько времени поспали

checkTime = time( NULL) - checkTime;

 

std::cout << "Стоп..." << std::endl;

 

// Определяем сколько можно было спать

int allowedTime = atoi( argc[ i]);

 

std::cout << "Позволено спать:" << allowedTime << " сек" <<  std::endl;

 

// Переспали?

if( allowedTime < checkTime)

{

std::cout << "Нехватка времени..." << std::endl;

Data data;

data.pid = getpid();

data.num = i;

data.sec = checkTime;

 

Message message;

message.mtype = 1;

message.data = data;

 

int sendResult = msgsnd( reportMessageQueue, ( void*)&message, sizeof( struct Message), 0);

            if( sendResult == -1)

                    std::cout << "Сообщение не отправлено..." << std::endl;

}

else

{

std::cout << "Времени хватило..." << std::endl;

}

 

std::cout << "Время работы Этапа: " << checkTime << " сек." << std::endl << std::endl;

}

 

return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

2   Тестирование

 

Тестирование производилось следующим  образом:

Осуществлялся вход в Linux . Командой  “ gcc timectrl.c -o timectrl” производилась компиляция программы с командной строки. Командой “./timectrl ” программа запускалась на выполнение.

 

Рассмотрим правильность работы программы  на следующем примере:

После компиляции программы и ее запуска на экране мы видим:

 

 

 

 

 

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

Следовательно, тестирование показало, что программа работает правильно.

Результаты тестирования приведены  в приложении А.

 

 

 

 

 

 

 

 

 

 

Заключение

 

В результате выполнения данной курсовой работы была разработана программа, которая осуществляет контроль над временем выполнения задачи. Все случаи превышения времени записываются в журнал, который сохраняется и дополняется при новых запусках программы. Было произведено кодирование на языке программирования С++, компиляция и тестирование, в ходе которого было выявлено, что программа работает корректно.

 

Приложение А (обязательное).

Результаты тестирования

Информация о работе Разработка программы контроля над временем выполнения задачи