Глава 1. Задачи.
Под термином задача (task) как правило подразумевается программа, выполняющая определённые действия, т.е. задача - это программа. Всякая программа характеризуется своей средой исполнения (execution environment) - это сегменты кода, которые она использует, сегменты и типы данных, порты ввода/вывода, различные устройства и даже состояние регистров, в общем, всё, с чем она взаимодействует.
Если компьютер управляется одной программой, то все ресурсы этого компьютера она может использовать монопольно и так, как ей это будет нужно, то есть в компьютере будет один "хозяин".
Если же необходимо выполнять параллельно несколько различных программ, то возникает ряд проблем, и все они связаны с тем, что компьютер один, а программ - много. Даже в мультипроцессорной системе, где каждой задаче можно выделить отдельный процессор, возникает проблемы с коллективным доступом к одиночным устройствам, например, шине данных, памяти, дисковой, сетевой, видео системам и пр.
То, что мультизадачность является важным свойством любой операционной системы, уже давно не подлежит сомнению. Сам процесс параллельной работы нескольких программ можно реализовать множеством способов, но только один из них будет наиболее надёжным - тот, где управление задачами будет происходить на аппаратном уровне. В 32-разрядных интеловских процессорах существует такой механизм, он достаточно мощный и гибкий, что значительно облегчает использование мультизадачности.
На самом деле любая мультизадачная система реализуется так, что одновременно выполняется только одна задача и лишь при быстром переключении с одной задачи на другую, создаётся иллюзия, что задачи работают параллельно. Так построены все операционные системы и иначе нельзя - ведь процессор может выполнять одновременно только одну программу, даже имея несколько параллельных конвейеров, всё равно он выполняет одну задачу. Каждая задача имеет свою среду исполнения и надёжность мультизадачной системы заключается в том, что на состояние любой задачи не может повлиять никакая другая. Пока работает текущая задача, все остальные находятся в состоянии паузы, в это время их команды не выполняются и данные не меняются.
Для корректной работы мультизадачной системы нужны следующие основные факторы:
1. | Каждая задача (т.е. программа) должна быть изолирована от других, её код, данные и стек должны использоваться только ею самой и в идеале задача не должна "подразумевать" наличие других задач. |
2. | В мультизадачной системе должна быть одна задача - "хозяин", которая имеет высший приоритет по сравнению со всеми остальными задачами. Это нужно для того, чтобы переключать между собой задачи и управлять ресурсами, доступ к которым одновременно возможен для нескольких задач. |
3. | Использование разделяемых ресурсов (т.е. тех, которые разделяют между собой несколько задач, например, дисковая подсистема) должно быть корректным - либо каждая задача должна быть "в курсе" того, что кроме неё ещё кто-то может использовать этот ресурс, либо для каждого ресурса создаётся свой диспетчер - процедура или даже отдельная задача, которой принадлежит исключительное право на управление ресурсом. |
4. | При переключении с одной задачи на другую система должна обеспечить способ, благодаря которому состояние "старой" задачи не изменится состоянием "новой" задачи. |
5. | Необходимо учитывать временные характеристики - каждая задача должна подразумевать, что её выполнение может быть прервано в любой момент на неопределённое время. Этот фактор нужно учитывать при построении систем ввода/вывода, зависящих от времени, например, задача, управляющая модемом не должна терять данные по причине своего прерывания. |
В 32-разрядных процессорах предоставляется только базовый аппаратный механизм управления мультизадачностью, структура же самих задач, их работа и взаимодействия друг с другом целиком ложатся на плечи программиста и в связи с этим возникает множество возможных вариантов построения мультизадачной системы. Нельзя сказать, что какой-то метод самый лучший - всё зависит, во-первых, от предназначения ОС, а во-вторых, и это основная причина, от времени, которое вы можете затратить на построение ОС - нормальным явлением будет многократная переделка и усовершенствование структуры задач и их управления.
В этом разделе вашему вниманию будут представлены несколько примеров мультизадачных систем, сложность которых будет постепенно возрастать. Эти примеры приводятся только для того, чтобы показать, как именно реализуется мультизадачность, но ни в коем случае не рассматривайте эти примеры, как единственно или наиболее правильные варианты построения мультизадачности, т.к. эта часть ОС сильно зависит от её предназначения и является одной из главных характеристик любой системы.
Следующая глава | Оглавление | Вопросы? Замечания? Пишите: sasm@narod.ru |
Copyright © Александр Семенко. |