К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

2.4. Сравнение ОС Windows и UNIX

Операционные системы Windows и UNIX фундаментально отличаются друг от друга в соответствующих моделях программирования. Программы UNIX состоят из кода, который выполняет те или иные действия, при необходимости обращаясь к системе с системными вызовами для получения конкретных услуг. В отличие от этого программой Windows управляют, как правило, события. Основная программа ждет, пока возникнет какое-нибудь событие, а затем вызывает процедуру для его обработки. Типичные события — это нажатие клавиши, перемещение мыши, нажатие кнопки мыши или подключение USB-диска. Затем для обслуживания события, обновления экрана и обновления внутреннего состояния программы вызываются обработчики. В итоге все это приводит к несколько иному стилю программирования, чем в UNIX, но поскольку эта книга посвящена функциям и структурам операционных систем, различные модели программирования не будут вызывать у нас особого интереса.
Разумеется, в Windows также есть системные вызовы. В UNIX имеется практически однозначная связь между системными вызовами (например, read) и библиотечными процедурами (с той же read), используемыми для обращения к системным вызовам. Иными словами, для каждого системного вызова обычно существует одна библиотечная процедура, чаще всего одноименная, вызываемая для обращения к нему. При этом в стандарте POSIX имеется всего лишь около 100 процедурных вызовов.

В системе Windows ситуация совершенно иная. Начнем с того, что фактические системные вызовы и используемые для их выполнения библиотечные вызовы намеренно разделены. Корпорацией Microsoft определен набор процедур, названный Win32 API (Application Programming Interface — интерфейс прикладного программирования). Предполагается, что программисты должны использовать его для доступа к службам операционной системы. Этот интерфейс частично поддерживается всеми версиями Windows, начиная с Windows 95. Отделяя API-интерфейс от фактических системных вызовов, Microsoft поддерживает возможность со временем изменять существующие системные вызовы (даже от одной версии к другой), сохраняя работоспособность уже существующих программ. Фактически в основу Win32 вносится некоторая неоднозначность, поскольку в самых последних версиях Windows содержится множество новых, ранее недоступных системных вызовов. В этом разделе под Win32 будет пониматься интерфейс, поддерживаемый всеми версиями Windows. Win32 обеспечивает совме­стимость версий Windows.

Количество имеющихся в Win32 API вызовов велико — исчисляется тысячами. Более того, наряду с тем, что многие из них действительно запускают системные вызовы, существенная часть целиком выполняется в пространстве пользователя. Как следствие, при работе с Windows становится невозможно понять, что является системным вызовом (то есть выполняемым ядром), а что — просто вызовом библиотечной процедуры в пространстве пользователя. Фактически то. что было системным вызовом в одной версии Windows, может быть выполнено в пространстве пользователя в другой, и наоборот. В этой книге при рассмотрении системных вызовов Windows мы будем использовать там, где это необходимо, процедуры Win32, поскольку Microsoft гарантирует, что с течением времени они не будут меняться. Но следует помнить, что не все они действительно являются системными вызовами (то есть обрабатываются ядром).
В Win32 API имеется огромное число вызовов для управления окнами, геометриче­скими фигурами, текстом, шрифтами, полосами прокрутки, диалоговыми окнами, меню и другими составляющими графического пользовательского интерфейса. Если графическая подсистема работает в памяти ядра (что справедливо для некоторых, но не для всех версий Windows), то их можно отнести к системным вызовам, в противном случае они являются просто библиотечными вызовами. Следует ли рассматривать подобные вызовы в этой книге? Поскольку фактически они не относятся к функциям операционной системы, мы решили, что не следует, даже учитывая то, что они могут выполняться ядром.
Даже простое перечисление на этих страницах всех вызовов Win32 API выходит за рамки нашей тематики, поэтому мы ограничимся только теми, которые по своим функциональным возможностям можно приблизительно сопоставить с системными вызовами UNIX. Их список представлен в табл. 1. 1.

Давайте коротко поговорим об этом списке. Вызов Create Process создает новый процесс. В нем совмещается работа UNIX-вызовов forit и ехесvе. Множество параметров этого вы­зова определяют свойства вновь создаваемого процесса. В Window's отсутствует иерархия процессов, присущая UNIX, поэтому понятия родительского и дочернего процессов здесь не используются. После создания процесса процесс-создатель и вновь созданный про­цесс становятся равноправными. Вызов WaitForSingleObject используется для ожидания события. Ожидание может касаться множества возможных событий. Если в параметре указан процесс, то вызывающая программа дожидается окончания конкретной) процесса. Завершение работы процесса происходит при использовании вызова ExitProcess.

Таблица 1.1. Вызовы Win32 API, приблизительно соответствующие вызовам UNIX

UNIX

Win32

Описание

fork

CreateProcess

Создает новый процесс

waitpid

WaitForSingleObject

Ожидает завершения процесса

execve

Нет

CreateProcess=fork+execve

exit

ExitProcess

Завершает выполнение процесса

open

CreateFile

Создает файл или открывает существующий файл

close

CloseHandle

Закрывает файл

read

ReadFile

Читает данные из файла

write

WriteFile

Записывает данные в файл

Iseek

SetFilePointer

Перемещает указатель файла

stat

GetFileAttributesEx

Получает различные атрибуты файла

mkdir

CreateDirectory

Создает новый каталог

rmdir

RemoveDirectory

Удаляет пустой каталог

link

Нет

Win32 не поддерживает связи

unlink

DeleteFile

Удаляет существующий файл

mount

Нет

Win32 не поддерживает подключение к файловой системе

umount

Нет

Win32 не поддерживает подключение к файловой системе

chdir

SetCurrentDirectory

Изменяет рабочий каталог

chmod

Нет

Win32 не поддерживает защиту файла (хотя NT поддер­живает)

kill

Нет

Win32 не поддерживает сигналы

time

GetLocalTime

Получает текущее время

Следующие шесть выловов работают с файлами и функционально похожи на своих UNIX-собратьев, хотя и отличаются от них в параметрах н деталях. Тем не менее файлы могут быть открыты, закрыты, прочитаны и записаны практически так же, как в UNIX.
Вызовы Set File Pointer и GetFileAttributesEx устанавливают позицию указателя файла п получают некоторые из атрибутов файла.
В Windows также имеются каталоги, которые создаются и удаляются вызовами CreateDirectory и Remove Directory соответственно. Здесь тоже имеется понятие теку­щего каталога, который устанавливается вызовом SetCurrentDirectory. Для получения текущего времени используется вызов GetLocalTime.

В интерфейсе Win32 отсутствует поддержка связанных файлов, подключаемых файловых систем, защиты файлов, сигналов, поэтому отсутствуют и вызовы, соответствующие тем, что есть в UNIX. Разумеется, в Win32 есть огромное количество других вызовов, которых нет в UNIX, особенно относящихся к графическому пользовательскому интерфейсу. Windows Vista имеет усовершенствованную систему защиты, а также поддерживает связанные файлы. А в Windows 7 и 8 добавлено еще больше свойств и системных вызовов.

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


Предыдущая        В начало страницы       Следующая
4