Скачиваний:
23
Добавлен:
01.05.2014
Размер:
640.51 Кб
Скачать

Федеральное агентство воздушного транспорта

Федеральное государственное образовательное учреждение высшего профессионального образования

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

УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ

Кафедра «вычислительные машины, комплексы, системы и сети»

Курсовая работа

защищена с оценкой

_______________________

_______________________

(подпись преподавателя, дата)

КУРСОВАЯ РАБОТА

По дисциплине «Системное программное обеспечение»

Вариант №13

Тема: программа создания параллельно

взаимодействующих вычислительных процессов

Курсовая работа

допущена к защите

________________

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

Выполнил студент группы ЭВМ 3-2

_______________________________

(Ф.И.О.)

Руководитель:

_______________________________

(звание, степень, Ф.И.О.)

МОСКВА – 2008

СОДЕРЖАНИЕ

Введение…………………………………………………….…………….

1.Техническое задание………………………………………………….

1.1. Назначение разработки…………………………………………..

1.2. Описание разработки…………………………………………….

1.3. Исходные данные………………………………………………...

1.4. Технические характеристики……………………………………

1.5 Специальные технические требования……………………….....

2. Разработка структуры программы………………………………….

3. Разработка алгоритмов программы………………………………...

4. Разработка программы……………………………………………...

Заключение………………………………………………………………..

Список используемой литературы………………………………………

Приложение А. Спецификация…………………………………………..

Приложение Б. Текст программы………………………………………..

Приложение В. Руководство оператора………………………………....

Аннотация

Работа посвящена разработке программы создания параллельно взаимодействующих процессов на языке С.

В работе рассмотрен метод создания многопоточного приложения на языке С. Разработан алгоритм и его программная реализация на языке С.

ВВЕДЕНИЕ

Современные операционные системы (OC) нацелены на наиболее эффективное использование ресурсов компьютера. По большей части эффективность достигается за счет разделения ресурсов компьютера между несколькими процессами (многозадачность).  Многопоточность является естественным продолжением многозадачности, точно также как виртуальные машины, позволяющие запускать несколько ОС на одном компьютере, представляют собой логическое развитие концепции разделения ресурсов. В многопоточном приложении одновременно работает несколько потоков. Иногда вместо термина "поток" используется термин "нить". Потоки – это независимые друг от друга задачи, выполняемые в контексте процесса. Поток использует код и данные родительского процесса, но имеет свой собственный уникальный стек и состояние процессора, включающее указатель команд.

Потоки часто становятся источниками программных ошибок особого рода. Эти ошибки возникают при использовании потоками разделяемых ресурсов системы (например, общего адресного пространства) и являются частным случаем более широкого класса ошибок - ошибок синхронизации. Если задача разделена между независимыми процессами, то доступом к их общим ресурсам управляет операционная система и вероятность ошибок из-за конфликтов доступа снижается. Важнейшее преимущество потоков перед самостоятельными процессами заключается в том, что накладные расходы на создание нового потока в многопоточном приложении оказываются ниже, чем накладные расходы на создание нового самостоятельного процесса. Уровень контроля над потоками в многопоточном приложении выше, чем уровень контроля приложения над дочерними процессами. Кроме того, многопоточные программы не склонны оставлять за собой вереницы зомби или "осиротевших" независимых процессов. Для порождения дочернего процесса, находясь в родительской программе, поток получает копии виртуальной памяти дескрипторов файлов и пр. Модификации содержимого памяти, закрытие файлов и другие подобные действия в дочернем процесса не влияют на работу родительского процесса и наоборот. С другой стороны, когда программа создает поток, ничего не копируется. Оба потока – старый и новый – имеют доступ к общему виртуальному пространству, общим дескрипторам файлов и другим системным ресурсам. Если, к примеру, один поток меняет значение переменной, это изменение отражается на другом потоке. Точно так же, когда один поток закрывает файл, второй поток теряет возможность работать с этим файлом. В связи с тем что процесс и все его потоки могут выполнять лишь одну программу одновременно, как только один из потоков вызывает функцию семейства exec(), он сразу же завершается.

Первая подсистема потоков в Linux появилась в 1996 году и называлась - LinuxThreads. Рудимент этой подсистемы, который есть в любой современной системе Linux, - файл /usr/include/pthread.h, указывает год релиза - 1996 и имя разработчика - Ксавье Лерой (Xavier Leroy). Библиотека LinuxThreads была попыткой организовать поддержку потоков в Linux в то время, когда ядро системы еще не предоставляло никаких специальных механизмов для работы с потоками. Позднее разработку потоков для Linux вели сразу две конкурирующие группы - NGPT и NPTL. В 2002 году группа NGPT фактически присоединилась к NPTL и теперь реализация потоков NPTL является стандартом Linux. Подсистема потоков Linux стремится соответствовать требованиям стандартов POSIX, что позволяет новым многопоточным приложениям Linux без проблем компилироваться в POSIX-совместимых системах.

В курсовой работе разработанна программа, реализованая на языке С. Программа позволяет выводить на экран результаты операций факториал, суммы бесконечно убывающей геометрической прогрессии, суммы числового ряда.