Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л2_3_4КУТО.doc
Скачиваний:
3
Добавлен:
16.11.2019
Размер:
985.6 Кб
Скачать

Программы, задачи, процессы, потоки

Основным объектом в системах реального времени является процесс (process) или задача (task). Между программами и процессами имеется существенное различие. Программы представляют собой информацию о том, как обрабатывать и преобразовывать исходные данные, а процессы суть программы, исполняемые процессором. Процесс состоит из кода, т.е. инструкций программы – области кода, области данных, в которой хранятся переменные и константы, свободной динамически распределяемой рабочей области памяти – кучи (heap) и стека (stack) (рис. 10.2). Два последних механизма зависят от конкретной реализации. Область стека примыкает к куче и расширяется за ее счет. Программа, написанная на одном и том же языке высокого уровня, а затем откомпилированная и исполняемая на разных ЭВМ, порождает различные процессы, каждый из которых имеет собственные области команд и данных, кучу и стек. В курсовом вы создавали загрузочные модули после расположения в пр. памяти - исполняемые модули. При условии определения вами памяти под данные и стек (функция ОС) вы получали процесс.

Каждый процесс в любой момент времени находится в точно определенном состоянии, однозначно описываемом содержимым регистров процессора, расположением областей кода, данных и стека и счетчиком команд, указывающим следующую исполняемую инструкцию в области кода. Эта базовая информация об исполняющемся процессе называется его контекстом (context). Существование контекста – это общее свойство процессов, а то, какие регистры, структуры и указатели реально являются частью контекста, зависит от используемого процессора и операционной системы.

Частным типом процессов являются потоки (threads). Они представляют собой часть программы, которая может независимо исполняться на том же самом или другом процессоре. Потоки порождаются процессом и выполняются параллельно, т.е. поток – это дочерний процесс (child process). В отличие от процессов, потоки используют общую область данных, т.е. переменные породившего их процесса. Однако каждый поток имеет собственный контекст, включающий отдельные область кода и стек. Потоки играют важную роль в операционных системах UNIX и Windows NT.

Последовательность преобразования программы в процесс состоит из сохранения исходного текста на компьютерном носителе (магнитная лента или диск), компиляции (compilation), связывания (linking), загрузки (loading) и исполнения (execution). Эти шаги детально описываются в учебниках по программированию и операционным системам и здесь рассматриваться не будут.

В системе выделяются два вида потоков - интерактивные, крутящие свой цикл обработки сообщений (такие, как главный поток приложения), и рабочие, представляющие собой простую функцию. Во втором случае поток завершается по мере завершения выполнения этой функции.

Итак, в Windows выполняются не процессы, а потоки. При создании процесса автоматически создается его основной поток. Этот поток в процессе выполнения может создавать новые потоки, которые, в свою очередь, тоже могут создавать потоки и т.д. Процессорное время распределяется именно между потоками, и получается, что каждый поток работает независимо.

Все потоки, принадлежащие одному процессу, разделяют некоторые общие ресурсы - такие, как адресное пространство оперативной памяти или открытые файлы. Эти ресурсы принадлежат всему процессу, а значит, и каждому его потоку. Следовательно, каждый поток может работать с этими ресурсами без каких-либо ограничений. Но так ли это в действительности? Вспомним, что в Windows реализована вытесняющая многозадачность - это значит, что в любой момент система может прервать выполнение одного потока и передать управление другому. (Раньше использовался способ организации, называемый кооперативной многозадачностью. Система ждала, пока поток сам не соизволит передать ей управление. Именно поэтому в случае глухого зависания одного приложения приходилось перезагружать компьютер. Так была организована, например, Windows 3.1). Что произойдет, если один поток еще не закончил работать с каким-либо общим ресурсом, а система переключилась на другой поток, использующий тот же ресурс? Произойдет штука очень неприятная и результат работы этих потоков может чрезвычайно сильно отличаться от задуманного. Такие конфликты могут возникнуть и между потоками, принадлежащими различным процессам. Всегда, когда два или более потоков используют какой-либо общий ресурс, возникает эта проблема. Письмо из Простоквашино

Именно поэтому необходим механизм, позволяющий потокам согласовывать свою работу с общими ресурсами. Этот механизм получил название механизма синхронизации потоков (thread synchronization).

КАКУЮ РЕАКТИВНОСТЬ (латентность) СИСТЕМЫ ОБЕСПЕЧАТ ВАМ РАЗЛИЧНЫЕ ОС

Время реакции

Операционная система

Менее 10 мкс

Только ОСРВ. Но даже и они могут оказаться бессильны – это граница выбора между схемным и программным решением

10 - 100 мкс

Операционные системы реального времени

100 мкс - 1 мс

ОСРВ, RTAI, RT LINUX, расширения реального времени для Windows NT, Windows CE

1 мс

Можно пытаться что-то делать с Linux и Windows NT, но не для систем, где запаздывание отклика может привести к тяжелым последствиям