УДК: 004.4 ББК: 32.97-018.2
Трубачева С.И.
ПОЧЕМУ LINUX И СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ?
Trubachyova S.I.
WHY LINUX AND REAL-TIMESYSTEMS?
Ключевые слов: операционная система Linux,системы реального времени, мягкие и жесткие системы реального времени, квантование, приоритеты, прерывания.
Keywords: the Linux operating system, real-time systems, soft and hard real-time systems, the quantization, priorities, interrupts, shell, the Shell scripts.
Аннотация: в настоящее время широко используются мобильные устройства, планшеты, бытовая техника, «напичканная» электроникой и пр. Для управления системных ресурсов, выполнения различных приложений разработчики стали широко использовать Linux. Linux относится к системам разделения времени, а системные разработчики используют ее для работы в системах реального времени. Почему? В статье рассматриваются вопросы проектирования и использования Linux для систем реального времени.
Abstract: currently widely used mobile devices, tablets, appliances, equipped with electronics, etc. To manage system resources, perform a variety of applications, developers have become widely used Linux. Linux refers to the time sharing systems, and system developers use it to work in real-time systems. Why? The article discusses the design and use Linux for real-time systems.
Цель научного исследования
Почему ОС Linux, которая относится к системам разделения времени, системные разработчики используют для работы в системах реального времени?
Какой функционал этой ОС можно использовать для реализации систем реального времени, построенных на платформе Linux? В чем особенности Linux?
Почему система, написанная непрофессиональными программистами, стала так популярна?
Введение
В настоящее время широкое распространение получают карманные компьютеры, планшеты, мобильные устройства, механизмы управления устройствами в автомобиле, в бытовой технике и др.
Для управления системными ресурсами, выполнения приложений, обеспечения работы пользовательского интерфейса используются операционные системы (ОС). Все ОС по областям использования делятся на три основные группы:
1) ОС пакетной обработки (ранние
ОС);
2) ОС разделения времени (ОС семейства Windows, Unix);
3) ОС реального времени (QNX и др.).
ОС пакетной обработки - первые ОС,
в настоящее время не используются.
Большинство используемых в настоящее время ОС - ОС разделения времени. Машинное время выполнения программы делится на маленькие (несколько десятков миллисекунд) временные периоды - кванты. По истечении кванта времени текущая задача прерывается, процессором начинает выполняться следующая, из очереди готовых, задача. Реализация такой идеи позволила обеспечить многозадачность. Все современные ОС в основном относятся к многозадачным ОС.
Системы реального времени (Real Time System, RTS) - СРВ - системы, в которых существенную роль играет время генерации выходного сигнала. СРВ предназначены для управления в режиме реального времени техническим объектом, технологическим процессом и пр.
Технологические процессы на производстве протекают с определенной
скоростью. Полученные от этих процессов данные должны быть обработаны за определенное время. В СРВ существует предельно допустимое время генерации выходного сигнала. Это время называется реакцией системы. А соответствующее свойство системы - реактивностью. Большинство автоматизированных систем управления (АСУ) является СРВ, среди автоматизированных информационных
систем (АИС) такие системы встречаются редко.
СРВ делятся на 2 категории: жесткого реального времени и мягкого реального времени.
В жестких СРВ (ЖСРВ) генерация выходного сигнала должна осуществляться в жестко заданный период времени (управление ядерным реактором, самолетом, спутником и т.д.).
Мягкие СРВ (МСРВ) менее требовательны к соблюдению временного периода между запуском программы и генерацией выходного (управляющего) сигнала. МСРВ чаще используются в мультимедиа.
Примеры ОС реального времени:
QNX -Quick Unix - быстрый Юникс -относится к жестким системам реального времени.
RTL - Real Time Linux - Линукс реального времени, относится к мягким системам реального времени.
PSOS - ОС персонального компьютера; OS-9 - ОС-9 и др.
На сегодняшний день созданы расширения Linux, такие как: RTLinux (ЖСРВ); KURT, UTIME (МСРВ).
Запуск в СРВ осуществляется по прерываниям.
При проектировании жестких СРВ необходимо учитывать возможность пиковых нагрузок. Например, при управлении атомной электростанцией необходимо учесть срабатывание всех аварийных датчиков в случае аварии. Это также создаст корреляционную нагрузку на все устройства вычислительной системы (ВС). Проектировать такие ВС очень сложно.
Для управления мультимедиа таких решений не требуется. В настоящее время для мобильных устройств, мультимедиа,
бытовой, автомобильной техники и прочее стали разрабатывать различные приложения на платформе Linux. В чем же достоинства Linux? Почему ее так широко стали использовать, в том числе и для работы в режиме реального времени.
Преимущества ОС Linux:
1) открытый код ОС;
2) бесплатно распространяемая ОС;
3) наличие большого количества ПО, работающего под управлением ОС;
4) наличие документации на API-интерфейс;
5) работа на процессорах разного типа.
Первое. Открытая ОС - такая ОС,
программные модули которой доступны для анализа и изменений. Linux получила широкое распространение еще и потому, что разработчики поставляют ОС таким образом, что программные модули можно прочитать и понять, внести изменения. В связи с этим программисты многих стран мира могут участвовать в разработке и модификации Linux.
Второе. Linux поставляется вместе с лицензией, разработанной Ричардом Столлманом - основатель Фонда бесплатного ПО - Free Software Fondation. Linux использует лицензию GNU: пользователи могут ее бесплатно копировать, модифицировать, распространять.
Ограничение касается продажи:
исполняемые коды должны поставляться вместе с исходными.
Третье. Наличие большого количества программного обеспечения, работающего под управлением ОС Linux.
Четвертое. API - интерфейс прикладного программирования облегчает пользователю писать программы, позволяет использовать вызовы стандартных функций (например, open, read, write и др.). API -программный слой, позволяет перехватить вызов стандартной функции, обеспечить соединение с библиотекой, содержащей тело функции. Наличие документации облегчает процесс программирования.
Пятое. Работа на разных аппаратных платформах позволяет обеспечить совместимость и переносимость
программных модулей.
Немного истории о Линукс
Финский студент (заметьте, студент) Линус Торвальд в 1991 году создал клон Unix и назвал его Linux (версия 0.0.1). Вся ОС размещалась в ядре, была монолитной (9300 строк кода на С, 950 - на Assembler). Работала на процессоре Intel (386). Окончательно датой выпуска считается 1994 год, версия 1.0 (165 тысяч строк кода, новая файловая система, сетевое программное обеспечение). 2-я версия - 1996 год (470 тысяч строк кода, добавлены новые драйверы устройств).
Резкий скачок в развитии. Почему?
C 1992 года Линукс неожиданно получила поддержку в развитии. Университет Беркли - разработчик FreeBSD, решил прекратить разработку ОС, выпускает версию FreeBSD с лицензией GNU. Компания AT&T подает в суд на университет за нарушение авторского права (Беркли же код компании AT&T не использовал), время на судебные дела было потеряно. Разработка FreeBSD была временно прекращена, а Линукс "набрал обороты", хотя разработкой FreeBSD занимались серьезные профессионалы-программисты, а Линукс - студенты, программисты-любители. Судьба...
Далее рассмотрим особенности построения СРВ, OC, Linux, механизмов поддержки выполнения заданий в назначенное время, инструментальные средства для разработки приложений для СРВ. В Linux имеется механизм (программа cron), использование которого позволяет выполнять задания в назначенное время.
Демон1 CRON. Демон cron запускается во время начальной загрузки системы и остается в активном состоянии, пока система не выключена. Все команды и время их выполнения содержатся в файле конфигурации, который получил название Crontab-файла (сокращенно от cron table), содержащий расписание времени выполнения команд. Строки файла обрабатываются интерпретатором shell (sh), поэтому почти
Демон - загруженный в память код программы. Программа находится в спящем режиме. Начинает работать, когда приходит сигнал - сигнал «побудки». Такие спящие процессы в Unix, Linux называют демонами.
2 sh от слова shell - оболочка Linux,
все, что можно сделать из shell вручную, можно перепоручить процессу cron. Запись crontab-файла в общем случае состоит из семи полей (таблица 1).
Таблица 1 - Поля записи crontab- файла
Поля в файле разделяются пробелами. В поле команда нужно написать команду shell, которую необходимо выполнять в заданное время. Поле команда не должно иметь кавычек и может содержать символы пробела и табуляции.
Шаблон файла: <минуты <часы> <день> <месяц> <день недели> <команда> Примеры:
01 * * * * command -запуск программы или скрипта в первую минуту каждого часа. * 06 * * * command -запуск программы или скрипта каждый день в 6 часов утра.
Скрипты. Что это в Linux?
Скрипт - командный файл, написанный на языке Shell. Командный язык Shell - язык программирования высокого уровня. На этом языке пользователь осуществляет управление компьютером. После входа в систему, Вы начинаете взаимодействовать с командной оболочкой. Shell не является единственным командным языком (хотя именно он стандартизирован в рамках POSIX - стандарта мобильных систем).
Процедура языка Shell - это командный файл. Для выполнения команд необходимо текстовый файл сделать исполнимым (с помощью команды ^mod, например,
интерпретатор команд, файл обработки введенных пользователем команд. Есть встроенный язык shell (и его разновидности), это разные понятия, не путайте.
Поле Диапазон
минуты от 0 до 59
часы от 0 до 23
день от 1 до 31
месяц от 1 до 12
день недели от 1 до 7
команда команда или имя файла для исполнения
chmod u+x myprog - добавить user право на выполнение - x, execute). Запуск осуществляется написанием в командной строке следующей команды:
sh имя_исполняемого_файла Командный файл называют скриптом. Можно разработать скрипт, сформировать запись в crontab-файле, запускать программу в назначенное время.
Пример 1
В любом текстовом редакторе создаем текст следующего содержания:
who
who i am date
uname -a
(кто есть активные пользователи в системе, под каким именем я работаю за текущим терминалом, вывести текущую дату и время, вывести на экран версию системы).
Сохраняем его, например,
/home/masha/myprog1.
Делаем файл исполняемым (см. выше -команда chmod).
Исполняем его:
sh /home/masha/myprog1
или ./home/masha/myprog1
или проектируем запись в cron-файле:
30 08 * * * /home/masha/myprog1 -запуск скрипта каждый день в 8-30 часов утра.
Пример 2
echo
echo "Hello, World"
echo
exit
(команда echo позволяет выводить сообщения).
Остальные действия аналогичны описанным выше.
Пример 3
echo "Vvedite a " read a
echo "Vvedite b " read b
c= expr $a + $bx echo $c
Команда echo позволяет выводить сообщения. Команда read позволяет считать данные в оперативную память. Команда expr используется в shell для выполнения арифметических операций. Знак $ - взять значение из памяти, где хранится переменная
(а, b).
Остальные действия аналогичны описанным выше. Пример 4
for a in (1,2,3) do cat $a done
В текущем каталоге есть три файла (1, 2, 3). На первом шаге итерации переменной а присваивается имя первого в множестве in файла (предварительно проверяется его наличие). Далее - do (выполнить). Что? Команду cat (отобразить). Отобразить что? Считывается значение переменной a, т.е. имя файла. На экране системы отображается содержимое файла 1. Циклическая конструкция повторяется. На экран поочередно выводится содержимое файла 2, затем 3.
Следующие примеры попробуйте разобрать самостоятельно.
Пример 5
for file in adminpeople hardpeople softpeople
do sort +1 $file | lpr done
Пример 6
echo "Vvedite a" read a
if test $a -lt 5 # lt - меньше then echo "Ok" else echo "Vvedite a < 5" fi
Пример 7
if test -w $2 -a -r $1 then cat $1 >> $2 else echo "can not append" fi
($1, $2, ... $9 - взять значения
параметров командной строки).
Проверяется первый файл командной строки, доступен ли он работающему пользователю для чтения и второй - доступен ли он для записи. Если условие истинно, содержимое первого файла добавляется ко второму.
Пример 8
if test -s $1 then cat $1
else echo "Enter filename " fi
read x suml x
Пример 12
sum2() {
z=*expr $x + $yy
echo $z }
echo "Vvedite x" read x
echo "Vvedite y" read y
Пример 9
if test $1==password then cd / ls -l
else echo "error passwd" fi
Пример 10
while true
do echo " Check menu your computer:
1) Disk space
2) Mountedfile systems
3) System name
4) Who is logged in
5) Exit
echo "What do you want?" read number case $number in 1) df;;
2) mount -t msdos dev/fd0 /mnt/floppy;;
3) uname;;
4) who;;
5)break;;
*) echo "you must enter a number
(1 throught 5) "
continue;;
esac done exit 0
Пример 11 (работа с функциями)
sum1() {
z=$x
echo $z }
echo "Vvedite x "
sum2 x y
Таким образом, можно разработать shell-программы, сформировать запись в файле crontab, тем самым обеспечить запуск задачи в назначенное время.
Сам язык shell и его разновидности достаточно простой, но позволяет разрабатывать серьезные с точки зрения системного программирования приложения, чаще - конфигурационные файлы.
Далее рассмотрим примеры написания си-программ под Linux и их запуск в назначенное время.
Структура си-программы выглядит следующим образом:
[объявления библиотек] [объявления глобальных переменных] [описания (функции, структуры, ...)] описание главной функции
И сразу рассмотрим пример программы:
#include <iostream.h>
int main() {
cout << "Hello";
return 0; }
Компиляция программ производится командой:
gcc <имя_файла>
После этого, если процесс компиляции
пройдет успешно, то вы получите загружаемый файл a.out, запустить который можно командой:
./a.out
Компилировать можно все файлы одновременно одной командой, перечисляя составные файлы через пробел после ключа -c: gcc -c main.c fl.c f2.c
Или каждый файл в отдельности: gcc -c fl.c gcc -c f2.c gcc -c main.c
В результате работы компилятора мы получим три отдельных объектных файла:
main.o
fl.o f2.o
Чтобы их собрать в один файл с помощью gcc, надо использовать ключ -o, при этом линкер соберет все файлы в один:
gcc main.o fl.o f2.o -o rezult
запуск осуществим командой: ./rezult
Данные помещаем в crontab-файл, указываем время запуска программы.
В статье рассмотрен простой пример си-программы. Цель изложения материала -пояснить принцип запуска задач в назначенное время.
Далее. В настоящее время языку С на смену пришел С++ - объектно-ориентированный язык, более сложный с точки зрения понимания, но более удобный с точки зрения проектирования и программирования. Содержит множество компонентов, которые программист может использовать в собственной программе, только ссылаясь на них.
Таким образом, используя различные инструментальные средства, можно разрабатывать приложения под Linux и запускать их в назначенное время.
Запуск задач в назначенное время -один из механизмов, приближающих систему разделения времени к системам
реального времени.
Далее. В настоящее время широкое распространение получили встраиваемые ОС (используются в бытовой технике, автомобилях и пр.). Вышеперечисленные дoстoинства ОС Linux привлекают разрабoтчиков встрaиваемых систем. Применяемая ОС должна использовать конкретный объем ОП и обеспечивать требуемые технические характеристики. Многие разработчики пользуются инструментальными средствами GNU (Linux). GNU-библиотека сейчас включает в свой состав десятки различных средств программирования: редакторов, отладчиков, библиотек, служебных утилит и т.д.
Какое отношение средства GNU имеют к ОС Linux? Многие базовые компоненты Linux разрабатывались и распространялись в соответствии с условиями политики бесплатного лицензирования, предложенной Столлманом.
Во многие коммерческие версии Linux включено множество различных средств GNU (включая компиляторы языков, отладчики и разнообразные утилиты).
Существует два общих подхода к превращению Linux в операционных системах реального времени с более детерминированными характеристиками. Первый из них реализован в таких проектах, как RT-Linux технологического института Нью-Мексико (New Mexico Tech) и RealTime Application Interface (RTAI) Миланского университета (University of Milan).
В первом случае пользователи получают обычную ОС Linux и ядро реального времени. ОС Linux здесь выполняется как задача с самым низким приоритетом, исполняющаяся в ОС реального времени.
Во втором случае пользователи настраивают характеристики драйверов и других конфигурационных файлов для получения предсказуемых откликов существующих компонентов ОС. Повышая эффективность драйверов, снижая скрытые задержки обработки и улучшая время реакции планировщика, можно сделать характеристики ОС достаточно
детерминированными для более широкой
области применения.
Для встраиваемых приложений используются Hard Hat Linux компании Monta Vista, eCos компании Red Hat. Последняя представляет собой версию конфигурируемой ОС прикладного назначения с открытым исходным кодом компании Cygnus Solutions (для бытовых приборов с выходом в Internet, персональных цифровых секретарей - PDA personal digital assistant, карманных компьютеров).
Вывод
До появления современных ОС уже существовали промышленные СРВ, алгоритмы управления выполнялись жестко на аппаратном уровне. Современные ОС СРВ - многозадачные, многопоточные ОС. Необходимо управлять синхронизацией, обменом между задачами, обращениями к аппаратным ресурсам и прочее. ОС СРВ должна быть тщательно спроектирована. 95% приложений СРВ требуют ограниченного времени ответа (до 10 мсек). СРВ отвечают на внешние параметры и создают новые результаты вывода. Сегодня достаточно крупные компании используют Linux для СРВ.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Климентьев, К.Е. Системы реального времени. - Самара: Изд. СГАУ, 2014.
2. Олифер, В.Г. Сетевые ОС. - СПб.: Питер, 2008.
3. Джек Такет, Стив Баркет. Использование Linux: Специальное издание. - СПб.: Питер,
2009.
4. Стахнов, А. LINUX: Наиболее полное руководство. - СПб.: БХВ; Питер, 2010.
5. Таненбаум, Э. Современные операционные системы. - 2-е изд. - М., 2011.
6. Трубачева, С.И. Операционные системы: учеб. пособие. - Тольятти: Изд. ВУиТ,
2009.
Трубачева С.И. Централизованное управление настройкой прав доступа в Unix-cистемах // Вестник Волжского университета им В.Н. Татищева. №1 (23). - Тольятти: Изд-во ВУиТ, 2015.