Автор работы: Пользователь скрыл имя, 11 Сентября 2013 в 20:13, курсовая работа
Linux изначально был написан Линасом Торвальдсом, а затем неоднократно улучшался специалистами во всем мире, причем ни USL, ни Университет Беркли не участвовали в его создании. Он является клоном операционной системы UNIX.
Linux поддерживает большую часть популярного UNIX'овского программного обеспечения, включая систему X Window. Это довольно большая программа, разработанная в Массачусетском Технологическом институте, позволяющая компьютерам создавать графические окна и используемая на многих различных UNIX-овских платформах. Linux удовлетворяет требованиям POSIX-1 (документ стандарта операционных систем). Linux также во многом согласуется с POSIX-2, другим документом IEEE по стандартизации операционных систем. Он является смешением всех трех стандартов: BSD, System 5 и POSIX.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение
высшего профессионального образования
ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра МО и ПЭВМ
«УТВЕРЖДАЮ»
Зав. кафедрой «МО и ПЭВМ»
Макарычев П.П.
_____________________
«___»__________2013г
КУРСОВАЯ РАБОТА
по дисциплине «ОПЕРАЦИОННЫЕ СИСТЕМЫ»
на тему: «Разработка программы контроля над временем выполнения задачи»
Автор работы: |
Осипов В.С. |
Специальность: |
230105 («Программное обеспечение
вычислительной техники и автом |
Группа: |
10ВП2 |
Руководитель: |
Шашков Б.Д. |
Работа защищена «___» ____ 2013 г. |
Оценка ______________ |
Пенза 2013 г.
Реферат
Пояснительная записка содержит 21 лист, 4 рисунка, 3 использованных источника и 1 приложение.
ОПЕРАЦИОННАЯ СИСТЕМА, ПРОГРАММА, ПРОЦЕСС, ВРЕМЯ ВЫПОЛНЕНИЯ, UNIX, LINUX
Целью данной
курсовой работы является
Объектом исследования
работы являются процессы
СОДЕРЖАНИЕ
Операционная система (ОС) – это совокупность программных средств, обеспечивающих управление аппаратными ресурсами в вычислительной системе и взаимодействие программных процессов с аппаратурой, другими процессами и пользователями.
К одной
из наиболее популярных ОС
можно отнести операционную
Характеристики UNIX, позволяющие понять популярность этой системы:
Linux изначально был
написан Линасом Торвальдсом,
а затем неоднократно
Linux поддерживает большую
часть популярного UNIX'
В данной курсовой работе представлено изучение основ системного программирования под операционную систему UNIX и разработка программы контроля над временем выполнения задачи. Объектом исследования работы являются процессы операционной системы UNIX, и их функционирование.
Задачей данной курсовой работы является разработка программы контроля над временем выполнения задачи на языке программирования СИ.
Требования к программе:
- все случаи превышения времени необходимо записывать в журнал (файл);
- журнал должен сохраняться
и дополнять при каждом
способ обмена информацией – сообщения.
Программно-технические требования:
ОЗУ: 32 mb и выше
Процесс – это система действий, реализующая определенную функцию в вычислительной системе. Весь цикл жизни процесса можно схематически представить в следующем виде:
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 возвращает значение идентификатора прекратившего свое существование потока, в качестве параметра передается адрес на переменную целого типа, куда помещается код возврата.
В нашем случае при инициализации процесса необходимо зафиксировать время начала действия процесса, а также после завершения процесса зафиксировать время окончания процесса. В результате получим время действия процесса.
При разработке программы использовался язык программирования С++, тексты набраны в редакторе, компиляция осуществлялась из командной строки.
Исходный текст программы
Текст программы:
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;
}
Тестирование производилось
Осуществлялся вход в Linux . Командой “ gcc timectrl.c -o timectrl” производилась компиляция программы с командной строки. Командой “./timectrl ” программа запускалась на выполнение.
Рассмотрим правильность работы программы на следующем примере:
После компиляции программы и ее запуска на экране мы видим:
Таким образом, мы видим, что в журнал записались все случаи превышения времени. При всех последующих запусках программы журнал сохраняется и дополняется.
Следовательно, тестирование показало, что программа работает правильно.
Результаты тестирования приведены в приложении А.
В результате выполнения данной курсовой работы была разработана программа, которая осуществляет контроль над временем выполнения задачи. Все случаи превышения времени записываются в журнал, который сохраняется и дополняется при новых запусках программы. Было произведено кодирование на языке программирования С++, компиляция и тестирование, в ходе которого было выявлено, что программа работает корректно.
Информация о работе Разработка программы контроля над временем выполнения задачи