- •Операционные системы реального времени
- •Типичные времена реакции на внешние события в управляемых осрв процессах
- •Последовательное и параллельное исполнение программ (однопрограммная или мультипрограммная реализация задачи управления)
- •Пример – пресс для пластика
- •Управление на основе последовательного и параллельного программирования
- •Программы, задачи, процессы, потоки
Программы, задачи, процессы, потоки
Основным объектом в системах реального времени является процесс (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, но не для систем, где запаздывание отклика может привести к тяжелым последствиям |