Разработка программы-моделирования управления движением на уличном перекрёстке
Разработка программы, которая организовывает реализацию модели сетевого графика путем порождения и уничтожения соответствующих процессов операционной системы UNIX. Кодирование на языке программирования Си, компиляция и результаты тестирование приложения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 12.05.2013 |
Размер файла | 59,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
19
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Содержание
Введение
Разработка программы-моделирования управления движением на уличном перекрёстке
1.1 Анализ требований
1.2 Проектирование
1.3 Кодирование
1.4 Тестирование
Заключение
Список использованных источников
Введение
В узкотехническом понимании LINUX представляет собой лишь ядро операционной системы,предлагающее базовые сервисы планирования процессов, виртуальной памяти, управления файлами и ввода\вывода. Сам по себе LINUX является низкоуровневой частью операционной системы. LINUX может превратить любой персональный компьютер в рабочую станцию, он предоставит всю мощь UNIX. В деловом мире LINUX устанавливается на целые вычислительные сети, обеспечивая обработку данных в финансовом и медицинском секторе, распределённых вычислительных средах, системах телекоммуникаций и т.д. Университеты всего мира используют LINUX на курсах программирования и проектирования операционных систем. И конечно, энтузиасты вычислительной техники повсюду используютLINUX в домашних комьютерах для программирования, создания документов и всевозможных компьютерных изысканий.
Помимо рабочих станций и личного использования LINUX применяется также и в больших серверах. Всё большее число людей обнаруживает, что LINUX обладает мощью, устойччивостью и гибкостью, достаточными для работы с самыми большими дисковыми массивами, многопроцессорными системами и приложениями, охватывающими диапазон от Web-серверов до корпоративных баз данных. Учёные соединяют группы машин, работающих под LINUX, в огромные “кластеры” для решения физических и инженерных задач, требующих огромных вычислительных ресурсов. Последняя версия пакета Samba даже позволяет LINUX выполнять функции файлового сервера и сервера печати для Windows, причём с большей производительностью, чем Windows NT.
Отличительной особенностью LINUX является то, что он является свободно распространяемой реализацией UNIX. Его разработка была начата и продолжается до сих пор массой добровольцев, общающихся в основном через Интернет. Они обмениваются исходными кодами, сообщают о найденных ошибках и устраняют проблемы в открытой среде. LINUX является одновременно и новой, и старой технологией.
LINUX является бесплатно распространяемым клоном операционной системыUNIX. LINUX открыто разрабатывается сотнями программистов и пользователей, которые доводяят его до совершенства. LINUX объеденил в себе работу унивверситетов, фирм и отдельных разработччиков в виде высокоразвитых компиляторов,редакторов, утилит и сценариев. LINUX является многопользавотельской, многозадачной системой, поддерживающей на некоторых платформах многопроцессорность. Он использует граффичческий интерфейс ппользователя X Window System и предлагает несколько интегрированных интерактивных сред, включая KDE и GNOME.
В компьютерных кругах LINUX вызвал больший резонанс, чем любая друугая разработка за последние несколько лет. Его быстрое распространение и способность вызывать приверженность к себе напоминают о времени первых успехов компьютерных технологий. По иронии судьбы успех LINUX свяязан со второй молодостью одной из старейших операционных систем- UNIX.
1. Разработка программы моделирования управления движением на уличном перекрёстке
1.1 Анализ требований
Требоания к разработке:
1. Движение на каждой из 3-х прилегающих к перекрёстку улиц моделируется отдельным проццессом.
2. Процесс имитирует подезжающие к перекрёстку автомобили случайным образом, интенсивности потоков от потоков различны.
3. В начале работы светофор переключается с равными интервалами.
4. По мере накопления статистики по интенсивностям потоков время переключения светофора изменяется.
5. Передача информации процессу, имитирующему светофор выполняется через именованные каналы.
Программно-технические требования:
1. Операционная система: Linux RedHat 7.2 или др. совместимые.
2. Язык программирования: Си.
3. Процессор: Intel Pentium 166 и совместимые с ним.
4. ОЗУ: 8 mb и выше.
1.2 Проектирование
Процесс - это система действий, реализующая определенную функцию в вычислительной системе. Весь цикл жизни процесса можно схематически представить в следующем виде:
1.- порождение процесса: здесь готовятся условия для первого исполнения процесса - проверяются возможности создания процесса и наличие необходимых ресурсов, создаются управляющие структуры, связанные с этим процессом;
2.- готовность: процесс получил все ресурсы, кроме процессорного времени;
3.- активность: программа выполняется на процессоре;
4.- ожидание: программа ожидает выделения какого-либо ресурса;
5.- завершение: (нормальное или аварийное) завершение процесса: освобождаются все ресурсы, выделенные процессу и уничтожаются все структуры данных, связанные с этим процессом.
Процессы в UNIX делятся на следующие типы:
1. Системный процесс - часть ядра операционной системы (управление памятью);
2. процесс-демон - специальный процессы, которые запускаются при инициализации системы и работают в фоновом режиме, не имеют связи с внешним миром {низкоприоритетные системные процессы} (управление системной печатью, сетевой сервис, терминальный доступ);
3. прикладные процессы - порождаются сеансами пользователя.
Состояние:
1. процесс выполняется в режиме задачи;
2. процесс выполняется в режиме ядра;
3. процесс готов к запуску и находится в памяти;
4. процесс приостановлен, но находится в памяти;
5. процесс готов к запуску, но выгружен;
6. процесс приостановлен и выгружен;
7. процесс зарезервирован;
8. создаётся процесс;
9. завершение процесса.
С порождением связан дескриптор процесса. Информация в дескрипторе - совокупность атрибутов процесса:
PID - идентификатор процесса (системное имя этого процесса), присваивается при создании процесса;
PPID - идентификатор родительского процесса;
RID - реальный идентификатор пользователя;
EVID - эффективный идентификатор пользователя;
RGID, EGID - реальные идентификаторы группы;
PGID - идентификатор группы;
SID - идентификатор сеанса;
TTY - терминальная линия;
Nice Number - приоритет процесса.
Процесс Init запускается при инициализации системы и порождает все остальные процессы.Общий механизм порождения процесса:
fork () - функция порождает новый процесс, который является копией родительского процесса.
В родительский процесс возвращается идентификатор потомка, а в процесс-потомок возвращается 0.
if (pid = fork ())
<родителя>
else
<потомок>
Завершение процесса выполняется по функции EXIT. По вызову EXIT процесс завершается, отключаются сигналы, закрываются файлы, сохраняется код возврата и статистика выполнения. Код возврата определяется параметром функции Exit. Окончательно ликвидировать процесс можно только по функции Wait. Эта функция используется для синхронизации родительских и дочерних процессов. Если родительский процесс породил какой-то процесс, он должен получить информацию о его завершении. Wait возвращает значение идентификатора прекратившего свое существование потока, в качестве параметра передается адрес на переменную целого типа, куда помещается код возврата.
Светофор-специальная переменная. Для неё определены:
- операция открытия
- операция закрытия
Если светофор закрыт, то процесс блокируется т.е. процесс переходит в процесс ожидания. Он стоит в очереди к этому светофору. Когда светофор открывается ,то выбирается процесс из очереди к этому светофору. Процесс блокировки с этого момента снимается.
Светофор при реализации-это целочисленная переменная, которая может иметь несколько значений. Какие-то значения считаются признаком открытого светофора, а какие-то - закрытого.
Краткая функциональная спецификация:
Название функции: int count_rec(char *FileName);
Назначение процедуры: выполняет запись в файл.
Входные параметры: Нет.
Выходные параметры: Код выполнения (0 - успешно; -1 - не успешно).
Название функции: sort(int mas[N][3],int count);
Назначение процедуры:сортирует массив.
Входные параметры: int mas[N][3],int count - массив из n строк и 3 столбцов.
Выходные параметры: Код выполнения (-1 - не успешно).
Название функции process(int mas[3]);
Назначение процедуры: порождение и уничтожение процессов.
Входные параметры: int mas[3] - массив
Выходные параметры: Код выполнения (-1 - не успешно).
Название функции: void zapol(int mas[N][3],char *FileName,int count)
Назначение процедуры:заполнение массива характеристик процессов записями из файла.
Входные параметры: mas[N][3] - массив из п строк и 3 столбцов
char *FileName - символы из файла FileName
Выходные параметры: Нет.
1.3 Кодирование
При разработке программы использовался язык программирования Си, текты набраны в редакторе, компиляция осуществлялась с командной строки.
Текст программы приведен ниже:
#include <stdio.h>
#include <sys/file.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#define t_alone 10000
#define t_prov 100
#define t_svet 1000
#define Time 3
#define limit 100
//Таймер
void delay(long time)
{
long i;
for (i=1;i<time;i++);
return;
}
//Инициализация процесса светофор
int process_svet(int fd[2],int fdcount1[2],int fdcount2[2],int fdcount3[2])
{
int pid;
int t1,t2,t3;
int buf[1];
int count1[1], count2[1], count3[1];
pid=fork();
if (pid<0)
{
printf("Not create process svetofor\n");
exit(1);
}
if (pid==0)
{
while (1)
{
read(fdcount1[0],count1,sizeof(count1));
write (fdcount1[1],count1,sizeof(count1));
read(fdcount2[0],count2,sizeof(count2));
write (fdcount2[1],count2,sizeof(count2));
read(fdcount3[0],count3,sizeof(count3));
write (fdcount3[1],count3,sizeof(count3));
if (count1[0]+count2[0]+count3[0]>limit)
{
t1=3*t_svet*count1[0]/(count1[0]+count2[0]+count3[0]);
t2=3*t_svet*count2[0]/(count1[0]+count2[0]+count3[0]);
t3=3*t_svet*count3[0]/(count1[0]+count2[0]+count3[0]);
}
else
{
t1=t2=t3=t_svet;
}
buf[0]=1;
write(fd[1],buf,sizeof(buf));
delay(t1);
buf[0]=2;
write(fd[1],buf,sizeof(buf));
delay(t2);
buf[0]=3;
write(fd[1],buf,sizeof(buf));
delay(t3);
}
}
return pid;
}
//Процесс создания машин
int process(int fd[2],int fdcount[2])
{
int pid;
int t;
int buf[1];
int cnt[1];
pid=fork();
if (pid<0)
{
printf("Not create process way\n");
exit(1);
}
if (pid==0)
{
while (1)
{
t=(int)(((float)rand()/RAND_MAX)*t_alone); //Время прихода транзактов
delay(t);
read(fd[0],buf,sizeof(buf));
buf[0]++;
write (fd[1],buf,sizeof(buf));
read(fdcount[0],cnt,sizeof(cnt));
cnt[0]++;
write (fdcount[1],cnt,sizeof(cnt));
}
}
return pid;
}
//Процесс проезда машин через перекресток
int process_prov(int fd[2],int fd1[2],int fd2[2],int fd3[2])
{
int pid;
int t;
int way[1];
int sw=0;
int buf[1];
pid=fork();
if (pid<0)
{
printf("Not create process perecrestok\n");
exit(1);
}
if (pid==0)
{
while (1)
{
if (read(fd[0],way,sizeof(way))>0)
sw=way[0];
switch (sw)
{
case 1:
read(fd1[0],buf,sizeof(buf));
if (buf[0]>0)
buf[0]--;
write(fd1[1],buf,sizeof(buf));
t=(int)(((float)rand()/RAND_MAX)*t_prov);
delay(t);
break;
case 2:
read(fd2[0],buf,sizeof(buf));
if (buf[0]>0)
buf[0]--;
write(fd2[1],buf,sizeof(buf));
t=(int)(((float)rand()/RAND_MAX)*t_prov);
delay(t);
break;
case 3:
read(fd3[0],buf,sizeof(buf));
if (buf[0]>0)
buf[0]--;
write(fd3[1],buf,sizeof(buf));
t=(int)(((float)rand()/RAND_MAX)*t_prov);
delay(t);
break;
}
}
}
return pid;
}
main(int argc, char *argv[])
{
int pid1, pid2, pid3, pid_svet, pid_prov;
int buf1[1],buf2[1],buf3[1],cnt1[1],cnt2[1],cnt3[1];
int fd1[2],fd2[2],fd3[2],fd[2];
int count1[2], count2[2], count3[2];
buf1[0]=0;
buf2[0]=0;
buf3[0]=0;
cnt1[0]=0;
cnt2[0]=0;
cnt3[0]=0;
pipe(fd1);
pipe(fd2);
pipe(fd3);
pipe(fd);
pipe(count1);
pipe(count2);
pipe(count3);
write(fd1[1],buf1,sizeof(buf1));
write(fd2[1],buf2,sizeof(buf2));
write(fd3[1],buf3,sizeof(buf3));
write(count1[1],cnt1,sizeof(cnt1));
write(count2[1],cnt2,sizeof(cnt2));
write(count3[1],cnt3,sizeof(cnt3));
pid_svet=process_svet(fd,count1,count2,count3);
pid_prov=process_prov(fd,fd1,fd2,fd3);
pid1=process(fd1,count1);
pid2=process(fd2,count2);
pid3=process(fd3,count3);
printf("Please,wait...\n");
sleep(Time);
kill(pid1,SIGKILL);
kill(pid2,SIGKILL);
kill(pid3,SIGKILL);
kill(pid_svet,SIGKILL);
kill(pid_prov,SIGKILL);
read(fd1[0],buf1,sizeof(buf1));
read(fd2[0],buf2,sizeof(buf2));
read(fd3[0],buf3,sizeof(buf3));
read(count1[0],cnt1,sizeof(cnt1));
read(count2[0],cnt2,sizeof(cnt2));
read(count3[0],cnt3,sizeof(cnt3));
printf("Number of machines of the staying on road 1 = %i\n",buf1[0]);
printf("Number of machines of the staying on road 2 = %i\n",buf2[0]);
printf("Number of machines of the staying on road 3 = %i\n",buf3[0]);
printf("Number of machines past through a traffic light in way 1 = %i\n",cnt1[0]);
printf("Number of machines past through a traffic light in way 2 = %i\n",cnt2[0]);
printf("Number of machines past through a traffic light in way 3 = %i\n",cnt3[0]);
printf("Number of machines past through a traffic light %i\n",cnt1[0]+cnt2[0]+cnt3[0]);
}
1.4 Тестирование
Тестирование показало, что программа работает правильно.
Результаты тестирования приведены в приложении А.
Заключение
кодирование программирование компиляция
В данной курсовой работе была поставлена задача разработки программы контроля выполнения хода работ по сетевому графику.
В ходе решения задачи были разработана программа, которая организовывает реализацию модели сетевого графика путем порождения и уничтожения соответствующих процессов операционной системы UNIX. Было произведено кодирование на языке программирования Си, компиляция и тестирование, в ходе которого было выявлено, что программа работает корректно на тестовом наборе данных.
Список использованных источников
1. “Системное программое обеспечение”. Гордеев А.В., Молчанов А.Ю., “Питер” 2001.
2. Рабочевский “ОС - UNIX” BHV - с-Петербург 1997.
3. Курс лекций «Операционные системы», Шашков Б.Д.
4. “Запускаем LINUX” М.Уэлш 2000.
Размещено на Allbest.ru
Подобные документы
Разработка комплекса алгоритмов. Кодирование и компиляция. Тестирование, отладка, испытание и сдача программы. Минимальные системные требования для использования Delphi 7. Написание программы с использованием инструментального языка высокого уровня.
курсовая работа [2,7 M], добавлен 21.02.2011Компиляция программ на языке C/C++. Компиляция нескольких файлов. Библиотеки объектных файлов. Создание статической и динамической библиотеки. Функции работы. Создание динамической библиотеки для решения системы линейных уравнений.
курсовая работа [27,4 K], добавлен 07.08.2007Описание математической модели, таблицы истинности. Разработка программы, реализация защитного программирования. Отладка и тестирование программы, инструкция пользователя. Расчет затрат на разработку и коммерческой эффективности проекта от реализации.
дипломная работа [3,2 M], добавлен 18.06.2012Характеристика и особенности языка программирования Pascal. Текст (листинг) программы, которая соединяет две точки линией кратчайшим путем, не пересекаясь и обходя все препятствия. Анализ и разработка алгоритма, результаты моделирования программы на ЭВМ.
курсовая работа [1,4 M], добавлен 28.10.2011Технология программирования задач для операторных и функциональных языков программирования, разработка алгоритма и отладка программы. Трансляция исходного текста, компоновка программы, ее выполнение с целью определения логических ошибок и тестирование.
курсовая работа [336,6 K], добавлен 24.04.2010Разработка и внедрение автоматизированной системы управления дорожным движением. Специфика применения программы интеллектуальных транспортных сетей, использующей принцип нейронных схем, в городе Хабаровске на языке программирования Turbo Pascal 7.0.
дипломная работа [1,7 M], добавлен 19.06.2012Разработка и тестирование программы класса Точка. Спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров функций программы. Текст программы на языке C++. Особенности тестирования программы.
лабораторная работа [43,1 K], добавлен 21.07.2012Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.
курсовая работа [1,2 M], добавлен 04.08.2014Анализ технического задания. Разработка интерфейса программы и ее алгоритмов. Кодирование и тестирование разработанного программного обеспечения, оценка его практической эффективности и функциональности. Формирование, содержание руководства пользователя.
курсовая работа [2,0 M], добавлен 31.07.2012Структура математической модели линейной задачи, алгоритм симплекс-метода. Разработка программы: выбор языка программирования, входные и выходные данные, пользовательский интерфейс. Описание программы по листингу, тестирование, инструкция по применению.
курсовая работа [1,2 M], добавлен 31.05.2013