- •Глава 9. Компоненты и подсистемы операционных систем Компоненты и подсистемы Windows
- •Ресурсы
- •Управление программами
- •Управление оперативной памятью
- •Файловая система
- •Драйверы устройств ввода/вывода
- •Библиотеки динамической загрузки dll
- •Вставка и привязка объектов ole
- •Другие компоненты и подсистемы
- •Интерфейс графических устройств gdi
- •Управление шрифтами
- •Невытесняющая мультизадачность Microsoft Windows
- •Переключение программ
- •Вытесняющая мультизадачность ibm os/2
- •Семафоры
- •Каналы передачи данных между процессами
- •Очереди
- •Система управления памятью
- •Управление памятью в первых версиях ibm os/2 и в стандартном режиме Microsoft Windows
- •Адресация памяти в ibm os/2 Warp
- •Модель памяти flat
- •Файловая система
- •Недостатки файловой системы dos
- •Файловая система hpfs
- •Библиотеки динамической компоновки
- •Драйверы
- •Создание и удаление каналов
- •Работа с базой данных объектов
Переключение программ
Пользователи DOS активно работают с резидентными программами, организующими "переключательную" мультизадачность. Как вы знаете, резидентная программа активизируется в том случае, когда пользователь нажимает определенную для каждой резидентной программы комбинацию клавиш. В этом случае выполнение текущей программы приостанавливается, и на экране появляется резидентная программа.
В операционную систему MS-DOS версии 5.0 был встроен специальный переключатель программ DOS Shell, который позволял запускать одновременно несколько обычных (не резидентных) программ DOS и переключаться между ними с помощью удобной диалоговой оболочки. Однако переключатель DOS Shell не прижился в MS-DOS, так как был вытеснен Microsoft Windows. MS-DOS версии 6.22 поставляется уже без этого переключателя.
И резидентные программы, и переключатель задач не обеспечивают реальной мультизадачности, так как пока одна из запущенных программ работает, другие находятся в "замороженном" состоянии. Поэтому в среде DOS вы едва ли сможете одновременно редактировать текст и принимать факс либо файл через факс-модем, не говоря уже о том, чтобы продолжать работу одновременно с форматированием дискет. Если вам когда-либо приходилось форматировать большое количество дискет в среде DOS, то вы знаете, что во время этой весьма длительной процедуры пользователь может только беспомощно смотреть на экран и слушать щелканье головок НГМД.
Вытесняющая мультизадачность ibm os/2
В ядро операционной системы OS/2 встроена система разделения времени, выделяющая каждой запущенной программе или приложению кванты времени
Кванты времени выделяются по прерыванию таймера, поэтому вне зависимости от состояния запущенных программ ни одна программа не будет обделена вниманием операционной системы.
Такая мультизадачность называется вытесняющей (preemptive). Она реализована не только в IBM OS/2, но и в Microsoft Windows-95, Microsoft Windows NT, а также в различных версиях UNIX.
Работоспособность систем с вытесняющей мультизадачностью в целом меньше зависит от работоспособности отдельных приложений, хотя плохо сделанные приложения могут повлиять на производительность всей системы (но не вывести ее из строя).
Самая замечательная возможность, предоставляемая системой разделения времени и системой управления программами IBM OS/2 - возможность создания мультизадачных программ и приложений.
Уточним, что мы имеем в виду под мультизадачной программой. Для этого вначале вспомним однозадачные программы.
Если вы программировали для DOS, то имели дело как раз с линейными однозадачными программами, работающими в однозадачной операционной системе. Программа DOS выполняется линейно, вызывая по мере необходимости различные подпрограммы, функции, а так же прерывания DOS и BIOS
Операционная система IBM OS/2 позволяет организовать параллельное выполнение многих программ, а также отдельных фрагментов кода одной и той же программы.
Когда пользователь запускает программу в среде IBM OS/2, операционная система создает так называемый процесс (process). Это понятие мы уточним позже, а сейчас достаточно знать, что для процесса выделяется отдельное адресное пространство, изолированное от адресных пространств других процессов. Изоляция выполняется на физическом уровне с использованием схемы адресации памяти защищенного режима (описанной нами в 6 томе "Библиотеки системного программиста").
В рамках процесса создается задача (thread), которая выполняется автономно и асинхронно по отношению ко всем остальным активным задачам. После запуска эта задача может создать в рамках процесса другие задачи.
Что такое задача?
Задача больше всего похожа на подпрограмму, которая вызывается из основной программы, но выполняется по отношению к ней асинхронно. Это возможно благодаря системе разделения времени, которая передает управление всем активным задачам по прерыванию таймера и с учетом приоритетов задачи.
Все задачи, созданные в рамках одного процесса, используют общее адресное пространство процесса. Заметим, что операционная система IBM OS/2 присваивает приоритеты не процессам, а задачам. Поэтому программист не может изменить приоритет процесса (такое понятие, как приоритет процесса просто не существует), но может управлять приоритетом отдельных задач.
Синхронизация задач
При использовании параллельно работающих задач возникает проблема синхронизации их выполнения
Операционная система IBM OS/2 допускает оба варианта запуска задач, обеспечивая дополнительно такие средства синхронизации задач, как критические секции и семафоры.
Критические секции
Программист может организовать внутри задачи фрагмент кода, который должен выполняться в монопольном режиме по отношению ко всем другим задачам создавшего их процесса.
Такой фрагмент кода и называется критической секцией. Он ограничен сверху и снизу вызовом, соответственно, функций DosEnterCritSec и DosExitcritSec , не имеющих параметров:
// Начало критической секции
DosEnterCritSec();
...
// Этот фрагмент задачи выполняется в монопольном
// режиме по отношению к другим задачам процесса
...
// Конец критической секции
DosExitcritSec();
По своей сути критические секции предназначены для временной отмены мультизадачности в рамках одного процесса, поэтому в нашем случае с проигрыванием музыки на фоне выполнения расчета само по себе это несложное в использовании средство ничего не даст.
Обычно критические секции используются для организации доступа к таким ресурсам, которые можно использовать только последовательно.
Представьте себе, например, что вы подключили к компьютеру нестандартное печатающее устройство, для печати на котором необходимо обращаться к портам специализированного контроллера. Если несколько задач, принадлежащих одному или разным процессам, начнут одновременную печать, это может привести к повреждению контроллера или принтера (со стандартным принтером ничего подобного произойти не может, так как IBM OS/2 выполняет все необходимые действия по синхронизации доступа).
