Windows многозадачная или однозадачная операционная система почему

Процессы в Windows и потоковая многозадачность

Win9X/NT. Windows, в отличие от MS DOS, представляет собой многозадачную операционную сис­тему, созданную для одновременной работы ряда приложений и/или меньших процессов с максимальными возможностями использования аппаратного обеспечения. Это означа­ет, что Windows является разделяемой средой: ни одно приложение не может получить в свое распоряжение всю систему целиком. Хотя Windows 95, 98, ME, ХР и 2000/NT похо­жи, они имеют ряд технических отличий. Однако в этой книге рассматриваются общие черты, а не отличия, так что делать большую драму из различия операционных систем не стоит.

Windows – это многозадачная операционная система, то есть она может одновременно выполнять две и более программ. Конечно, программы используют единственный процессор и, строго говоря, выполняются не одновремен­но. Однако высокое быстродействие компьютера создает такую иллюзию. Windows поддерживает два типа многозадачности: процессную и потоковую.

1. Процесс – это программа (или приложение – в терминологии Windows), находящиеся в фазе выполнения. Процессная многозадачность заключается в том, что Windows может выполнять одновременно более одной программы. Таким образом, Windows поддерживает «традиционную» процессную многозадачность, с которой Вы, ве­роятно, знакомы.

2. Поток – это отдельно выполняемая и управляемая часть программы. Название происходит от термина «поток выполнения». Любой процесс имеет как минимум один поток. В Windows процесс может иметь несколько (много) потоков.

Тот факт, что Windows способна управлять потоками, и каждый процесс может иметь несколько потоков, означает, что любой процесс может иметь две или более частей, выполняющихся одновременно. Следовательно, работая в Windows, можно одновременно выполнять как несколько программ, так и частей отдельной програм­мы. Вы увидите ниже, что это свойство делает возможным написание очень эффек­тивных программ.

Для доступа к системе интерфейс в Windows использует множество функций, определенных в ней. Это множество функций называется Программным Интерфейсом Приложений (Application Program Interface, API). API содержит несколько сотен функций, которые программа пользователя может вызывать для доступа к Windows. Функции включают все необходимые системно-зависимые действия, такие как выделение памяти, вывод на экран, создание окон и т.п. Аналогичные WinAPI средства имеются и в современных версиях операционной системы Unix.

Windows позволяет выполняться нескольким приложениям од­новременно, при этом каждое приложение по очереди получает малый отрезок времени для выполнения, после чего наступает черед другого приложения. Как показано на рис. 1.1, процессор совместно используется несколькими выполняющимися процессами. Точное определение, какой именно процесс будет выполняться следующим и какое про­цессорное время выделяется каждому из приложений, – задача планировщика.

Планировщик может быть очень простым, обеспечивающим выполнение каждого из процессов одинаковое количество миллисекунд, а может быть и очень сложным, рабо­тающим с учетом различных уровней приоритета приложений и вытесняющим низко­приоритетные приложения. В Windows 9X/NT используется вытесняющий планировщик, ра­ботающий с учетом приоритетов. Это означает, что одни приложения могут получить больше процессорного времени, чем другие.

Однако беспокоиться о работе планировщика не стоит, если только Вы не разработ­чик операционной системы или программы, работающей в реальном времени. В боль­шинстве случаев Windows сама запустит и спланирует приложение, и с вашей стороны для этого не требуется никаких специальных действий.

Читайте также:  Windows phone как отключить обновления

Познакомившись с Windows поближе, мы увидим, что это не только многозадачная, но и многопоточная операционная система. Это означает, что в действительности про­граммы состоят из ряда более простых потоков выполнения. Выполнение этих потоков планируется так же, как и выполнение более мощных процессов, таких, как программы. Вероятно, в настоящий момент на вашем компьютере работает от 30 до 50 потоков, вы­полняющих разные задачи. Итак, в Windows единая программа может состоять из одного или нескольких потоков выполнения.

На рис. 1.2 схематически показана многопоточность в Windows. Как видите, каждая программа в действительности состоит, в дополнение к основному потоку, из нескольких рабочих потоков.

Для развлечения посмотрим, сколько потоков выполняется на вашей машине в на­стоящий момент. Нажмите на компьютере под управлением Windows для вызова Active Program Task Manager и посмотрите, чему равно количество выпол­няющихся в системе потоков (или процессов). Это не совсем та величина, которая нас интересует, но весьма близкая к ней. Нас интересует приложение, способное сообщить реальное количество выполняющихся процессов. Для этого подходит множество условно бесплатных и коммерческих программ, но они нас не интересуют, поскольку в Windows есть встроенное средство для получения этой информации.

В каталоге Windows (в большинстве случаев это папка \WINDOWS) можно обнаружить программу SYSMON.EXE (она не включена в установку Windows по умолчанию, так что при ее отсутствии просто добавьте ее в систему посредством Control Panel Þ Add/Remove Programs Þ System Tools) или, в Windows NT, PERFMON.EXE. Данная программа предоставляет и другую важную информацию, такую, как использование памяти и загрузка процессора. Часто эта программа используется, чтобы отслеживать, что происходит при работе создаваемых программ.

А теперь о приятном: Вы можете сами управлять созданием потоков в своих програм­мах. Это одна из наиболее увлекательных возможностей при программировании игр – мы можем создать столько потоков, сколько нам потребуется для выполнения различных задач в дополнение к основному процессу игры.

Замечание: в Windows 98/NT введен новый тип объекта выполнения – нить (fiber), который еще проще, чем поток.

Вот основное отличие игр для Windows от игр для DOS. Поскольку DOS – одноза­дачная операционная система, в ней после запуска программы на выполнение больше ничего другого выполняться не может (не считая время от времени вызываемых обработ­чиков прерываний). Следовательно, если вы хотите добиться многозадачности или мно­гопоточности в DOS, вам придется эмулировать ее самостоятельно (см., например, книгу Teach Yourself Game Programming in 21 Days, где описано многозадачное ядро на основе DOS). И это именно то, чем многие годы занимались программисты игр. Конечно, эму­ляция многозадачности и многопоточности никогда не будет такой же надежной, как ре­альная многозадачность и многопоточность в поддерживающей их операционной систе­ме, но для отдельной игры такой эмуляции вполне достаточно.

Перед тем как перейти к программированию в Windows, нужно упомянуть еще одну де­таль. Вы можете подумать, что Windows – «волшебная» операционная система, поскольку позволяет одновременно решать несколько задач и выполнять несколько программ. Но это не так. Если в системе только один процессор, то одновременно может выполняться только один поток, программа или другая единица выполнения. Windows просто пере­ключается между ними так быстро, что создается иллюзия одновременной работы нескольких программ. Если же в системе несколько процессоров, то несколько задач могут выполняться действительно одновременно. Например, есть компьютер с двумя процессорами Pentium II 400MHz, работающий под управлением Windows 2000. В этой системе действительно возможно одновременное выполнение двух потоков инструкций. В ближайшем будущем следует ожидать новую архитектуру микропро­цессоров для персональных компьютеров, которая обеспечит одновременное выполне­ние нескольких потоков как часть конструкции процессора. Например, процессор Pen­tium имеет два модуля выполнения – U- и V-каналы. Следовательно, он может одновре­менно выполнять две инструкции, однако эти инструкции всегда из одного и того же потока. Аналогично, процессоры Pentium II, III, IV также могут выполнять несколько инструкций одновременно, но только из одного и того же потока.

Читайте также:  Get passwords from windows

Модель событий. Windows является многозадачной и многопоточной операционной системой, но при этом она остается операционной системой, управляемой событиями (event-driven). В отли­чие от программ DOS, большинство программ Windows попросту ждут, пока пользователь не сделает что-то, что запустит событие, в ответ на которое Windows предпримет некоторые действия. На рис. 1.3 Вы можете рассмотреть работу этой системы. Здесь изображены не­сколько окон приложений, каждое из которых посылает свои события или сообщения Win­dows для последующей обработки. Windows выполняет обработку определенных сообще­ний, но большинство из них передаются для обработки вашему приложению.

Хорошая новость состоит в том, что Вам нет необходимости беспокоиться о других рабо­тающих приложениях – Windows сама разберется с ними. Все, что вы должны сделать, – это позаботиться о вашем собственном приложении и обработке сообщений для вашего окна (окон). Ранее, в Windows 3.0/3.1, это было не так. Эти версии Windows не были истинно многозадачными операционными системами, и каждое приложение должно было передать управ­ление следующему. Это означало, что если находилось приложение, которое ухитрялось на­долго захватить систему, другие приложения ничего не могли с этим поделать.

Теперь о концепциях операционной системы Вам известно почти все. К счастью, Windows настолько хорошо подходит для написания программ, что Вам не нужно заботиться о планировании, – от Вас требуется лишь программный код приложения.

Далее Вы встретитесь с реальным программированием и увидите, на­сколько простое это занятие. Но (всегда это «но»!) пока что Вам следует познакомиться с некоторыми соглашениями, используемыми программистами Microsoft. Применяя их, Вы никогда не запутаетесь среди имен функций и переменных.

Динамические библиотеки

Поскольку API содержит несколько сотен функций, можно предположить, что каждая программа для Windows должна связываться с большим количеством библиотек, и это может привести к дублированию большого объема кода. Однако это не так. Вместо обычных библиотек функции Windows API объединены в динамические библиотеки (Dynamic Link Library, DLL), доступ к которым может получить любая программа во время выполнения. В настоящем разделе Вы познакомитесь с тем, как работает динамическое связывание. Функции API Windows хранятся в перемещаемом формате в DLL. В процессе компиляции, когда программа вызывает функцию API, компоновщик не добавляет код этой функции к исполняемому модулю. Вместо него он добавляет только инструкции для загрузки функции, содержащие имя DLL, в которой находится функция, и ее имя. При выполнении программы все необходимые функции API также загру­жаются в память. Таким образом, при построении программы код функций API фактически не используется – он добавляется только тогда, когда программа загружается в память для выполнения.

Читайте также:  Kali linux интерфейс windows

Динамическое связывание имеет ряд важных преимуществ. Во-первых, посколь­ку практически все программы используют функции API, DLL сохраняет место на диске, не дублируя объектный код в выполняемых файлах. Во-вторых, дополнения и расширения Windows могут ограничиваться изменением программ в отдельных динамических библиотеках, и существующие приложения не будут нуждаться в перекомпиляции.

Приложения Windows могут использовать до 16 Гбайт виртуальной памяти! Более того, эти 16 Гбайт адресуются прямо, без переключения сегментов. В отличие от других операционных систем, которые используют сегментированную память, Windows рассматривает адресное пространство задачи как линейное. И поскольку она виртуализирует память, то каждое приложение может занять столько памяти, сколько (в разумной мере) пожелает. Так как прямая адресация более понятна программисту, она позволяет избежать опасности, связанной с использованием прежнего сегментного подхода.

Windows использует схему переключения задач с автовыгрузкой (preemptive multitasking), базируясь на временных квантах. Отработав некоторое время, задача в Windows автоматически выгружается системой и управление передается следую­щей задаче (если таковая имеется). Такая схема переключения является более предпочтительной, поскольку позволяет операционной системе полностью контро­лировать все задачи и предохраняет ее от блокирования одной задачей. Большинство программистов рассматривают схему переключения задач с автовыгрузкой как более прогрессивную.

Однозадачные и многозадачные операционные системы

По числу одновременно выполняемых задач операционные системы делятся на два класса: однозадачные (MS DOS) и многозадачные (OS/2, Unix, Windows).

В однозадачных системах используются средства управления периферийными устройствами, средства управления файлами, средства общения с пользователями. Многозадачные ОС используют все средства, которые характерны для однозадачных, и, кроме того, управляют разделением совместно используемых ресурсов: процессор, ОЗУ, файлы и внешние устройства.

В зависимости от областей использования многозадачные ОС подразделяются на три типа:

1. Системы пакетной обработки (ОС ЕС);

2. Системы с разделением времени (Unix, Linux, Windows);

3. Системы реального времени (RT11).

Системы пакетной обработки предназначены для решения задач, которые не требуют быстрого получения результатов. Главной целью ОС пакетной обработки является максимальная пропускная способность или решение максимального числа задач в единицу времени.

Эти системы обеспечивают высокую производительность при обработке больших объемов информации, но снижают эффективность работы пользователя в интерактивном режиме.

В системах с разделением времени для выполнения каждой задачи выделяется небольшой промежуток времени, и ни одна задача не занимает процессор надолго. Если этот промежуток времени выбран минимальным, то создается видимость одновременного выполнения нескольких задач. Эти системы обладают меньшей пропускной способностью, но обеспечивают высокую эффективность работы пользователя в интерактивном режиме.

Системы реального времени применяются для управления технологическим процессом или техническим объектом.

Оцените статью
Adblock
detector