Разработка программы контроля над временем выполнения задачи
Курсовая работа, 11 Сентября 2013, автор: пользователь скрыл имя
Описание работы
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, позволяющие понять популярность этой системы:
- Код системы написан на языке высокого уровня Си, что сделало ее простой для понимания, изменений и переноса на другие платформы. Система на языке Си имела на 20-40 % больший размер, а производительность ее была на 20% ниже аналогичной системы, написанной на ассемблере. Однако ясность и переносимость, а в результате - и открытость системы сыграли решающую роль в ее популярности. Можно смело сказать, что UNIX является одной из наиболее открытых систем. Несмотря на то. что большинство UNIX поставляется сегодня не в исходных текстах, а в виде бинарных файлов, система остается легко расширяемой и настраиваемой.
- UNIX – многозадачная многопользовательская система с широким спектром услуг. Один мощный сервер может обслуживать запросы большого количества пользователей. При этом необходимо администрирование только одной системы. Ваша система может выполнять различные функции - работать как вычислительный сервер, обслуживающий сотни пользователей, как сервер базы данных, как сетевой сервер, поддерживающий важнейшие сервисы сети, или даже как сетевой маршрутизатор.
- Несмотря на многообразие версий UNIX, основой всего семейства являются принципиально одинаковая архитектура и ряд стандартных интерфейсов. Опытный администратор без труда сможет обслужить другую версию системы, для пользователей переход на другую версию и вовсе может оказаться незаметным
- Простой, но мощный модульный пользовательский интерфейс. Имея в своем распоряжении набор утилит, каждая из которых решает узкую специализированную задачу, вы можете конструировать из них сложные.
- Использование единой, легко обслуживаемой иерархической файловой системы. Файловая система – это не только доступ к данным, хранящимся на диске. Через унифицированный интерфейс файловой системы осуществляется доступ к терминалам, принтерам, магнитным лентам, сети и даже памяти.
- Очень большое количество приложений, в том числе свободно распространяемых, начиная от простейших текстовых редакторов и заканчивая мощными системами управления базами данных.
Linux изначально был
написан Линасом Торвальдсом,
а затем неоднократно
Linux поддерживает большую
часть популярного UNIX'
В данной курсовой работе представлено изучение основ системного программирования под операционную систему UNIX и разработка программы контроля над временем выполнения задачи. Объектом исследования работы являются процессы операционной системы UNIX, и их функционирование.
Разработка программы контроля над временем выполнения задачи
1.1 Анализ требований
Задачей данной курсовой работы является разработка программы контроля над временем выполнения задачи на языке программирования СИ.
Требования к программе:
- разработанная задача должна состоять из нескольких этапов (процессов);
- при выполнении очередного этапа необходимо фиксировать время выполнения и сравнивать его с допустимым значением времени;
- все случаи превышения времени необходимо записывать в журнал (файл);
- журнал должен сохраняться
и дополнять при каждом
способ обмена информацией – сообщения.
Программно-технические требования:
- Операционная система: Linux Ubuntu 12.04 или др. совместимые.
- Язык программирования: С++.
- Процессор: Intel Pentium 166 и выше.
ОЗУ: 32 mb и выше
1.2 Проэктирование
Процесс – это система действий, реализующая определенную функцию в вычислительной системе. Весь цикл жизни процесса можно схематически представить в следующем виде:
1.- порождение процесса: здесь готовятся
условия для первого
2.- готовность: процесс получил
все ресурсы, кроме
3.- активность: программа выполняется на процессоре;
4.- ожидание: программа ожидает выделения какого-либо ресурса;
5.- завершение: (нормальное или аварийное) завершение процесса: освобождаются все ресурсы, выделенные процессу и уничтожаются все структуры данных, связанные с этим процессом.
Процессы в UNIX делятся на следующие типы:
- Системный процесс – часть ядра операционной системы (управление памятью);
- процесс-демон – специальный процессы, которые запускаются при инициализации системы и работают в фоновом режиме, не имеют связи с внешним миром {низкоприоритетные системные процессы} (управление системной печатью, сетевой сервис, терминальный доступ);
- прикладные процессы – порождаются сеансами пользователя.
wait
exit
fork
Состояние:
- процесс выполняется в режиме задачи;
- процесс выполняется в режиме ядра;
- процесс готов к запуску и находится в памяти;
- процесс приостановлен, но находится в памяти;
- процесс готов к запуску, но выгружен;
- процесс приостановлен и выгружен;
- процесс зарезервирован;
- создаётся процесс;
- завершение процесса.
С порождением связан дескриптор процесса. Информация в дескрипторе – совокупность атрибутов процесса:
PID – идентификатор процесса (системное имя этого процесса), присваивается при создании процесса;
PPID – идентификатор родительского процесса;
RID – реальный идентификатор пользователя;
EVID – эффективный идентификатор пользователя;
RGID, EGID – реальные идентификаторы группы;
PGID – идентификатор группы;
SID – идентификатор сеанса;
TTY – терминальная линия;
Nice Number – приоритет процесса.
Процесс запускается
при инициализации системы и
порождает все остальные
fork () – функция порождает новый процесс, который является копией родительского процесса.
В родительский процесс
возвращается идентификатор потомка,
а в процесс-потомок
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 ” программа запускалась на выполнение.
Рассмотрим правильность работы программы на следующем примере:
После компиляции программы и ее запуска на экране мы видим:
Таким образом, мы видим, что в журнал записались все случаи превышения времени. При всех последующих запусках программы журнал сохраняется и дополняется.
Следовательно, тестирование показало, что программа работает правильно.
Результаты тестирования приведены в приложении А.
Заключение
В результате выполнения данной курсовой работы была разработана программа, которая осуществляет контроль над временем выполнения задачи. Все случаи превышения времени записываются в журнал, который сохраняется и дополняется при новых запусках программы. Было произведено кодирование на языке программирования С++, компиляция и тестирование, в ходе которого было выявлено, что программа работает корректно.