Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ по ОС.doc
Скачиваний:
28
Добавлен:
15.06.2014
Размер:
77.82 Кб
Скачать

Федеральное агентство по образованию

"ОМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ"

(ОмГТУ)

Кафедра «Информатика и вычислительная техника»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ РАБОТЕ

по дисциплине «Операционные системы»

РАЗРАБОТКА МНОГОПОТОЧНОЙ ПРОГРАММЫ

«Имитация дорожного перекрёстка»

Принял:

преподаватель А.Н. Флоренсов

подпись, дата

Выполнил:

студент гр. ИВТ-338

Визигин Д.В.

подпись, дата

Омск 2010

Постановка задачи

Разработать для Linux многопоточную программу следующей задачи. На экране в консольном режиме изображён перекрёсток двух дорог с двусторонним движением. По каждой дороге, пересекающей окно в одном из четырёх направлений движется поток «длинных» машин. Скорость каждого из этих четырёх потоков изменяется случайным образом (практически следует задавать случайны интервал между шагами движения по каждой из дорог). Каждая машина представляется на экране тремя или четырьмя последовательными символами (хотя бы буквами). Интервал движения между машинами должен составлять четыре или пять клеток. Перекрёсток неуправляемый с точки зрения правил дорожного движения – как только можно «втиснуться» на перекрёсток, машина делает это. Обеспечить в программе безаварийное движение с помощью программных семафоров. Отображение на экране осуществляется с помощью функций библиотеки curses в виде условных схем в консольном окне. Для правильного взаимодействия использовать семафоры или мьютексы.

Абстрактное описание работы программы

Работа программы начинается с отрисовки визуальных элементов. Визуальными элементами являются: две дороги и фон. Отрисовка фона происходит по простому алгоритму заполнения экрана светло-зелёными символами на тёмно-зелёном фоне, в случае если символ является ‘*’, то происходит отрисовка символа другого цвета. Визуальный элемент «дорога» состоит из трёх составляющих: встречная полоса, попутная полоса и линии разметки. Это разделение на полосы релизовано для простоты отрисовки движущихся машин. После отрисовки происходит инициализация семафора и назначение процедур каждой нити. Абстрактно, нить – это один из потоков машин. Описание каждой нити похоже, поэтому как пример, мы будем рассматривать нить горизонтального попутного потока машин. В начале инициализации нити создаётся массив структур Car. С помощью этого массива можно управлять положением и цветом любой машины в потоке, что и происходит в начале работы нити. После происходит инициализация переменных нужных для потока автомобилей. А именно переменных хранящих логическое и числовое значение машины пересекающей перекрёсток. Массив структур начинает работать в бесконечном цикле с самого начала определяя скорость автомобиля на текущем шаге, после происходит перерисовка дорожной полосы данного потока. Далее рассматриваем есть ли машина на потоке, которая въехала на перекрёсток:

- если машины нет поочерёдно с конца перерисовываем автомобили и наращиваем положение каждого на еденицу, а также сразу проверяем въехала ли какая-либо машина на перекрёсток. Если въехала, то блокируем семафор данной нитью и сохраняем логическое и числовое значение машины на перекрёстке;

- если машина есть, поочерёдно с конца перерисовываем автомобили и наращиваем положение каждого на еденицу, до того момента пока поток не достигнет перекрёстка, а машина, которая въехала на перекрёсток и продолжает движение должна разблокировать семафор после того как она выйдет за пределы экрана;

Цикл заканчивается условием, которое даёт возможность выезжать машинам из за пределов экрана. Выход из цикла а также из нити происходит, если последняя машина уехала за поле.

Соседние файлы в предмете Операционные системы