Окт 13

Многозадачность

ногозадачные операционные системы позволяют пользователю одновременно работать с несколькими приложениями или несколькими копиями одного приложения. Например, пользователь может открыть Visual Studio 6.0 и набирать в текстовом редакторе код одной из программ, приведенных в этой книге, одновременно слушая приятную музыку, воспроизводимую приложением «Проигрыватель Windows Media». В это же время программа explorer.exe может заниматься поиском необходимого файла по всему дисковому пространству компьютера.
В первых версиях Windows была реализована так называемая кооперативная (или невытесняющая) многозадачность, когда приложения должны были сами отдавать управление операционной системе, чтобы дать возможность работать другим программам. Такая стратегия имела существенный недостаток, ведь любое некорректно работающее приложение могло «подвесить» операционную систему. Но уже в Windows 95 была введена вытесняющая многозадачность. Операционная система автоматически переключается с одной задачи на другую, не ожидая, пока выполняемая программа освободит управление процессором.
Многозадачность осуществляется в Windows при помощи процессов и потоков. Любое приложение Windows после запуска реализуется как процесс (process). Грубо говоря, процесс можно представить как совокупность программного кода и выделенных для его исполнения системных ресурсов. При инициализации процесса система всегда создает первичный (основной) поток (thread), который исполняет код программы, манипулируя данными в адресном пространстве процесса.
Из основного потока при необходимости могут быть запущены один или несколько вторичных потоков, которые выполняются одновременно с основным потоком. На самом деле истинный параллелизм возможен только при исполнении программы на многопроцессорной компьютерной системе, когда есть возможность распределить потоки между разными процессорами. В случае обычного однопроцессорного компьютера операционная система выделяет по очереди некоторый квант времени каждому потоку.
Но каковы соотношения между потоками и окнами? Дело в том, что окно всегда принадлежит некоторому потоку. Поток может быть владельцем одного или нескольких окон, а может быть и вовсе безоконным. Например, если вторичный поток создан для приема данных из СОМ-порта, то он вполне может обойтись без своего окна.
Наконец, сами окна, принадлежащие потоку, находятся в некоторых иерархических взаимоотношениях. Одно окно является окном верхнего уровня (top-level window)1, другие окна называются дочерними (child windows). Дочерние окна подчиняются своим родительским окнам (parent windows).
Если на экране находится несколько окон, то в каждый момент времени только одно из них может быть активным. Активное окно отличается более ярким фоном на строке заголовка, в то время как пассивные окна имеют более тусклый фон заголовка. Говорят, что активное окно имеет фокус ввода. Это означает, что любая информация, вводимая пользователем при помощи клавиатуры или мыши, будет перенаправляться операционной системой именно данному окну.