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

Разработка программы, которая организовывает реализацию модели сетевого графика путем порождения и уничтожения соответствующих процессов операционной системы 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.