Реклама:

В этом подразделе мы дадим краткий обзор двух операционных систем (UNIX и Windows ХР). При этом мы обратим особое внимание на историю, структуру и системные вызовы.

UNIX

Операционная система UNIX была разработана в компании Bell Labs в начале 70-х годов. Первая версия была написана Кеном Томпсоном (Ken Thompson) на ассемблере для мини-компьютера PDP-7. Затем появилась вторая версия для компьютера PDP-11, уже на языке С. Ее автором был Деннис Ритчи (Dennis Ritchie). В 1974 году Ритчи и Томпсон опубликовали очень важную работу о системе UNIX [173]. За эту работу они были награждены престижной премией Тьюринга Ассоциации вычислительной техники. После публикации многие университеты попросили у Bell Labs копию UNIX. Поскольку материнская компания Bell Labs, AT&T, была в тот момент регулируемой монополией и ей не разрешалось участвовать в компьютерном бизнесе, университеты смогли приобрести операционную систему UNIX за небольшую плату.

Машины PDP-11 использовались практически во всех компьютерных научных отделах университетов, но операционные системы, которые пришли туда вместе с PDP-11, не нравились ни профессорам, ни студентам. Эту нишу быстро заполнила операционная система UNIX, которая была снабжена исходными текстами, поэтому желающие могли дорабатывать ее до бесконечности.

Одним из первых университетов, купивших UNIX, был Калифорнийский университет в Беркли. Поскольку в наличии имелись все исходные коды, в Беркли сумели существенно преобразовать UNIX. Среди изменений было перенесение этой системы на миникомпьютер VAX, создание виртуальной памяти со страничной организацией, расширение имен файлов с 14 до 255 символов, а также поддержка сетевого протокола TCP/IP, который сейчас широко используется в Интернете (во многом благодаря тому факту, что он был задействован в системе Berkeley UNIX).

Пока в Беркли шла вся эта работа, компания AT&T самостоятельно продолжала совершенствовать UNIX, в результате в 1982 году появилась операционная система System III, а в 1984 - System V. В конце 80-х годов широко использовались две разные и совершенно несовместимые версии UNIX: Berkeley UNIX и System V. Такое положение вещей вместе с отсутствием стандартов на форматы программ в двоичном коде в значительной препятствовало коммерческому успеху UNIX. Поставщики программного обеспечения не могли писать программы для UNIX, поскольку не было никакой гарантии, что эти программы смогут работать на любой версии UNIX (в этом отношении у MS-DOS было значительное преимущество). После долгих споров организация по стандартам при институте IEEE (Institute of Electrical and Electronic Engineers - институт инженеров по электротехнике и электронике) выпустила стандарт POSIX (Portable Operating System Interface - интерфейс переносимых операционных систем), известный также как стандарт IEEE Р1003. Позднее этот стандарт стал международным.

Стандарт POSIX состоит из нескольких частей, каждая из которых посвящена отдельной области UNIX. Первая часть, PI003.1, определяет системные вызовы; вторая часть, Р1003.2, - основные прикладные программы и т. д. Стандарт PI003.1 определяет около 60 системных вызовов, которые должны поддерживаться всеми системами. Это вызовы для чтения и записи файлов, создания новых процессов и т. д. Сейчас практически все системы UNIX поддерживают системные вызовы, перечисленные в Р1003.1, однако многие системы поддерживают и дополнительные системные вызовы, в частности те, что были реализованы в System V и в Berkeley UNIX. Обычно к набору POSIX добавляются до 200 системных вызовов.

В 1987 году автор этой книги выпустил исходный код для одной из версий UNIX, названной MINUX и предназначенной для установки в университетских компьютерных системах [204]. Одним из студентов, познакомившихся с MINUX в университете Хельсинки и установивших эту систему на домашнем компьютере, оказался Линус Торвальдс (Linus Torvalds). Изучив MINIX в деталях, Линус решил написать собственную версию операционной системы, которая получила имя Linux и стала со временем весьма популярной. MINIX и Linux похожи, и поэтому почти все сведения о MINIX, изложенные в этой главе, актуальны и по отношению к Linux (если не указано иное). По внутренней структуре разнообразные версии UNIX существенно различаются, но, поскольку мы по большей части акцентируем внимание на единообразном интерфейсе системных вызовов, эти различия в данном случае несущественны.

В UltraSPARC III используется операционная система Solaris, и хотя основой для нее является версия System V, она также поддерживает многие вызовы Berkeley UNIX.

В табл. 6.3 перечислены категории системных вызовов Solaris. Системные вызовы управления файлами и каталогами - это самая важная и объемная категория. Большинство из них относятся к стандарту PI003.1, остальные берут начало в System V.

Таблица 6.3. Системные вызовы UNIX

Категория_Примеры

Управление файлами

Открытие, чтение, запись, закрытие и блокировка файлов

Управление каталогами

Создание и удаление каталогов; перемещение файлов

 

в каталоги

Управление процессами

Порождение, завершение и трассировка процессов,

 

передача сигналов

Управление памятью

Разделение общей памяти между процессами, защита

 

страниц

Получение и установка

Идентификация пользователя, группы, процесса;

параметров

установка приоритетов

Даты и периоды времени

Установка времени доступа к файлам; использование

 

временных интервалов; рабочий профиль программы

Работа в сети

Установка и выделение соединений; отправка

 

и получение сообщений

Прочее

Учет использования ресурсов; манипуляция дисковыми

 

квотами; перезагрузка системы

Сфера использования сетей в большей степени относится к Berkeley UNIX, а не к System V. Именно в Беркли было введено понятие сокета как конечной точки сетевого соединения. Моделью для этой концепции стали 4-проводные настенные розетки для телефонов. Процесс в системе UNIX может создать сокет, подключиться к нему и установить соединение с сокетом на удаленном компьютере. Через это соединение можно затем пересылать данные в обоих направлениях, обычно по протоколу TCP/IP. Поскольку сетевые технологии в системе UNIX применялись десятилетиями, значительное число серверов в Интернете используют именно UNIX.

Существует много разных версий UNIX, и каждая из них чем-то отличается от всех остальных, поэтому структуру этой операционной системы описать трудно. Тем не менее схема, изображенная на рис. 6.24, применима к большинству из них. Внизу показаны драйверы устройств, которые изолируют файловую систему от аппаратного обеспечения. Изначально каждый драйвер устройства писался без учета всех остальных и представлял собой независимую единицу. Это привело к многочисленным дублированиям, поскольку многие драйверы должны поддерживать управление потоками, исправление ошибок, приоритеты, отделение данных от команд и т. д. По этой причине Деннис Ритчи для использования принципа модульности при написании драйверов придумал структуру под названием поток ввода-вывода (stream). При наличии потока ввода-вывода можно установить двухстороннее соединение между пользовательским процессом и устройством и вставить между ними один или несколько модулей. Пользовательский процесс передает данные в поток ввода-вывода, затем эти данные обрабатываются или просто передаются дальше каждым модулем до тех пор, пока не дойдут до устройства. При передаче данных от устройства процессу все происходит аналогично.

Знакомство с операционными системами UNIX и Windows ХР

Рис. 6.24. Структура типичной системы UNIX

Над драйверами устройств находится файловая система. Она управляет файлами, каталогами, размещением дисковых блоков, защитой и выполняет многие другие функции. В системе файлов имеется так называемый кэш блоков (block

cache), предназначенный для хранения недавно считанных с диска блоков на случай, если они понадобятся еще раз. Некоторые файловые системы использовались многие годы. Среди них можно назвать быструю файловую систему Berkeley [143] и файловые системы с журнальной структурой [175, 184].

Еще одна часть ядра системы UNIX - механизм управления процессами. Он выполняет различные функции, в том числе поддерживает взаимодействие между процессами (InterProcess Communication, IPC) и их синхронизацию, что позволяет избежать состояния гонок. Код управления процессами также занимается планированием процессов на основе их приоритетов. Кроме того, он обрабатывает сигналы, которые представляют собой особую (асинхронную) форму программных прерываний. Наконец, он управляет памятью. Большинство систем UNIX поддерживают виртуальную память с подкачкой страниц по требованию, иногда с некоторыми дополнительными особенностями (например, несколько процессов могут совместно использовать общие области адресного пространства).

UNIX изначально задумывалась как весьма компактная система; компактность была призвана обеспечить повышение надежности и производительности. Первые версии UNIX были полностью текстовыми и ориентировались на терминалы, которые могли отображать 24 или 25 строк по 80 ASCII-символов. Пользовательским интерфейсом управляла программа, которая называлась оболочкой и предоставляла интерфейс командной строки. Поскольку оболочка не является частью ядра, в UNIX легко добавлять новые оболочки, и с течением времени было разработано несколько чрезвычайно сложных оболочек.

Позднее, когда появились графические терминалы, в Массачусетском технологическом институте для UNIX была разработана оконная система, получившая название X Windows. Еще позже поверх X Windows был установлен полнофункциональный графический пользовательский интерфейс (Graphical User Interface, GUI), названный Motif. Поскольку ядро должно было оставаться компактным, практически весь код для X Windows и Motif работает вне ядра в пользовательском режиме.

Windows ХР

Первая машина IBM PC, выпущенная в 1981 году, была оснащена 16-разрядной операционной системой реального режима, ориентированной на индивидуального пользователя и имевшей интерфейс командной строки. Она называлась MS-DOS 1.0. Эта операционная система состояла из находящейся в памяти 8-килобайтной программы. Через два года появилась более мощная 24-килобайтная система MS-DOS 2.0. Она содержала процессор командной строки (оболочку), и многие ее функции были заимствованы у системы UNIX. В 1984 году компания IBM выпустила машину PC/AT с операционной системой MS DOS-3.0, объем которой к тому моменту составлял уже 36 Кбайт. С годами у системы MS-DOS появлялись все новые и новые функции, но она при этом оставалась системой командной строки.

Вдохновленная успехом Apple Macintosh, компания Microsoft решила создать графический пользовательский интерфейс, который она назвала Windows. Первые три версии Windows, включая Windows 3.x, были не "настоящими" операционными системами, а графическими пользовательскими интерфейсами на базе MS-DOS. Все программы работали в одном и том же адресном пространстве, и ошибка в любой из них могла привести к "зависанию" всей системы.

В 1995 году появилась система Windows 95, но она не знаменовала собой отказ от MS-DOS, просто на смену прежней версии MS-DOS пришла новая - MS-DOS 7.0. Windows 95 и MS-DOS 7.0 в совокупности имели характерные особенности развитой операционной системы, в том числе поддерживали виртуальную память, управление процессами и мультипрограммирование. Однако операционная система Windows 95 не была полностью 32-разрядной программой. Она содержала большие фрагменты старого 16-разрядного кода (с небольшими вкраплениями 32-разрядного) и по-прежнему использовала файловую систему MS-DOS со всеми ее недостатками. Единственными изменениями в файловой системе стали увеличение длины имен файлов (ранее в MS-DOS длина имен файлов не должна была превышать 8 + 3 символов) и снятие прежнего ограничения (равного 65 536) на количество дисковых блоков.

Даже в системе Windows 98, вышедшей в 1998 году, 16-разрядный код MS-DOS (на этот раз версии 7.1) все еще присутствовал. Система Windows 98 не слишком отличалась от Windows 95, хотя часть функций перекочевали от MS-DOS к Windows, а дисковый формат, подходящий для дисков большего размера, стал стандартным. Основным различием был пользовательский интерфейс, который объединил рабочий стол, Интернет и телевидение, сделав систему более автономной. Именно это и привлекло внимание министерства юстиции США, которое обвинило Microsoft в нарушении антимонопольного законодательства. Через некоторое время в свет вышла несколько усовершенствованная редакция Windows 98 под именем Windows Millenium Edition (ME), но просуществовала она недолго.

Во время всех этих событий компания Microsoft разрабатывала совершенно новую 32-разрядную операционную систему. Эта новая система называлась Windows New Technology (новая технология Windows), или сокращенно Windows NT1. Изначально предполагалось, что она заменит все операционные системы, предназначенные для компьютеров на базе процессоров Intel. Однако ее распространение шло очень медленно и позднее была переориентирована на более дорогостоящие компьютеры. Вторая версия Windows NT, названная Windows 2000, имела гораздо больший успех, в том числе и в сегменте домашних компьютеров. Последовательницей Windows 2000 стала система Windows ХР, которая представляет собой не что иное, как слегка усовершенствованный вариант Windows 2000.

Windows ХР продается в двух версиях: для серверов и для клиентов. Эти две версии практически идентичны и построены на базе одного исходного кода. Первая версия предназначена для файловых серверов и серверов печати локальных

1 Работы над операционной системой, получившей впоследствии название Windows NT, начались после ряда неудач с 16-разрядной версией OS/2 в рамках совместного проекта IBM и Microsoft по созданию новой 32-разрядной операционной системы OS/2. Этот проект, ориентированный на микропроцессор i386, начался в 1989 году, однако уже в следующем году пути этих компаний разошлись, и Microsoft, продолжившая работу над OS/2 v.3.0, дала ей имя Windows NT, желая тем самым, во-первых, дистанцироваться от IBM, а во-вторых, подчеркнуть, что использует единый графический интерфейс со всеми своими популярными одноименными оболочками. - Примеч. научн. ред.

сетей и имеет более сложные функции управления, чем клиентская версия, которая ориентирована на настольное применение и одного пользователя. Имеется особый вариант серверной версии, предназначенный для управления крупными корпоративными сетями. Различные версии настраиваются по-разному, и каждая из них оптимизирована для ожидаемого окружения. Во всем остальном эти версии похожи. Практически все исполняемые файлы всех версий идентичны. Система Windows ХР сама идентифицирует свою версию по специальной переменной во внутренней структуре данных (системном реестре). Пользователям запрещено изменять эту переменную и, таким образом, превращать дешевую клиентскую версию в более дорогую серверную или корпоративную. В дальнейшем мы не будем заострять внимание на различиях.

MS-DOS и все предыдущие версии Windows были рассчитаны на одного пользователя. Windows ХР поддерживает мультипрограммирование, поэтому на одной и той же машине в одно и то же время могут работать несколько пользователей1. Например, сетевой сервер позволяет нескольким пользователям сети одновременно войти в систему, причем каждый из них получает доступ к собственным файлам.

Windows ХР представляет собой реальную 32-разрядную операционную систему с мультипрограммированием. Она поддерживает несколько пользовательских процессов, каждый из которых получает в свое распоряжение полное 32-разрядное виртуальное адресное пространство с подкачкой страниц по требованию. Кроме того, сама система написана в 32-разрядных кодах.

Windows ХР в отличие от Windows 95 имеет модульную структуру. Она состоит из небольшого ядра, которое работает в привилегированном режиме, и нескольких серверных процессов, работающих в пользовательском режиме. Пользовательские процессы взаимодействуют с серверными процессами в соответствии с моделью клиент-сервер: клиент посылает запрос серверу, а сервер выполняет требуемую работу и отправляет результат клиенту. Модульная структура позволяет переносить Windows ХР на некоторые компьютеры, не относящиеся к семейству Intel (DEC Alpha, IBM Power PC и SGI MIPS). Однако из соображений производительности, начиная с Windows NT 4.0, большая часть системных функций была перенесена обратно в ядро.

Можно до бесконечности долго рассказывать о структуре и интерфейсе Windows ХР, но поскольку в различных операционных системах нас в первую очередь интересуют виртуальные машины, о структуре системы мы расскажем очень кратко, а затем перейдем к интерфейсу системных вызовов.

Структура Windows ХР показана на рис. 6.25. Она состоит из ряда модулей, распределенных по уровням и совместно реализующих операционную систему. Каждый модуль выполняет определенную функцию и имеет определенный интерфейс с другими модулями. Практически все модули написаны на языке С,

1 Необходимо заметить, что, в отличие от UNIX, Windows ХР не позволяет нескольким пользователям одновременно работать с компьютером, поскольку это однотерминальная система, тогда как UNIX - система мультитерминальная. Однако через сеть с Windows ХР могут одновременно взаимодействовать несколько пользователей, оставаясь при этом у своих компьютеров. - Примеч. научн. ред.

хотя часть графического интерфейса написана на С++, а кое-что из самых нижних уровней - на ассемблере.

Знакомство с операционными системами UNIX и Windows ХР

Рис. 6.25. Структура Windows ХР

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

Над уровнем аппаратных абстракций расположен уровень, содержащий ядро и драйверы устройств. Ядро и все драйверы устройств при необходимости получают непосредственный доступ к аппаратному обеспечению, поскольку их код во многом определяется используемой аппаратурой.

Ядро поддерживает примитивные объекты ядра, прерывания, перехват и обработку исключений, синхронизацию процессов, синхронизацию процессоров в многопроцессорных системах, управление временем. Основная задача уровня ядра - сделать остальную часть операционной системы полностью независимой от аппаратного обеспечения и, следовательно, переносимой. Ядро постоянно находится в основной памяти и никуда не вытесняется, хотя временно может передавать управление для обслуживания прерываний ввода-вывода.

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

Над ядром и драйверами устройств находится исполняющая система. Исполняющая система имеет независимую архитектуру, поэтому ее можно переносить на другие машины. Она состоит из трех уровней.

Самый нижний уровень содержит файловые системы и диспетчер объектов. Файловые системы управляют файлами и каталогами. Диспетчер объектов управляет объектами, известными ядру, в том числе процессами, программными потоками (их еще называют легковесными процессами, действующими внутри адресного пространства), каталогами, семафорами, устройствами ввода-вывода, тактовыми генераторами и т. п. Диспетчер объектов управляет также пространством имен, куда можно помещать новые объекты, потом при необходимости к этим объектам можно обращаться.

Следующий уровень состоит из 6 основных частей, как показано на рис. 6.25. Диспетчер ввода-вывода обеспечивает управление устройствами ввода-вывода, а также предоставляет базовые услуги по вводу-выводу. При этом диспетчер ввода-вывода использует службы файловой системы, которая, в свою очередь, использует драйверы устройств, а также службы диспетчера объектов.

Диспетчер кэш-памяти имеет дело с файловыми блоками и помогает диспетчеру виртуальной памяти определить, какие из них надо сохранить в памяти для использования в будущем. Кроме того, диспетчер кэш-памяти управляет файлами, отображаемыми на память. Windows ХР можно конфигурировать для работы с несколькими файловыми системами. В этом случае диспетчер кэш-памяти управляет всеми файловыми системами, поэтому отдельный диспетчер для каждой из них не нужен. Когда требуется какой-либо файловый блок, нужно обращаться к диспетчеру кэш-памяти. Если диспетчер кэш-памяти не находит этот блок у себя, для его получения диспетчер направляет вызов соответствующей файловой системе. Поскольку файлы могут отображаться на адресные пространства процессов, диспетчер кэш-памяти должен взаимодействовать с диспетчером виртуальной памяти, чтобы обеспечить необходимую согласованность.

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

Диспетчер процессов и потоков управляет процессами и программными потоками, в том числе их созданием и удалением. Акцент делается не на политику применения процессов и потоков, а на механизмы управления ими.

Монитор безопасности включает механизм безопасности Windows ХР, который соответствует требованиям Оранжевой книги министерства обороны США. В Оранжевой книге перечисляется огромное количество правил, которым должна удовлетворять система, начиная с пароля и заканчивая обнулением виртуальных страниц перед их повторным использованием.

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

Самый верхний уровень исполняющей системы - системные службы. Они предоставляют интерфейс к исполняющей системе. Системные службы получают системные вызовы Windows ХР и для их выполнения вызывают другие части исполняющейся системы.

Вне ядра находятся пользовательские программы и подсистема окружения. Потребность в подсистеме окружения объясняется тем, что пользовательские программы не ориентированы на самостоятельное выполнение системных вызовов (хотя технически такая возможность у них есть). Поэтому подсистема окружения экспортирует определенную группу вызовов функций, с которыми пользовательские программы могут работать. Изначально существовали три подсистемы окружения: Win32 (для программ Windows NT, Windows 2000, Windows ХР и Windows 95/98/МЕ), POSIX (для переносимых программ UNIX) и OS/2 (для переносимых программ OS/2). Из них на данный момент поддерживается только подсистема Win32. В то же время, существует ряд новых служб модуля UNIX, в некоторой степени обеспечивающих поддержку этой операционной системы.

Приложения Windows используют функции подсистемы Win32 и взаимодействуют с этой подсистемой, чтобы делать системные вызовы. Подсистема Win32 принимает вызовы функций Win32 и использует библиотечный модуль системного интерфейса (фактически он представляет собой DLL-файл - подробнее см. главу 7), чтобы их выполнять.

Перейдем к обсуждению услуг, которые предоставляет операционная система Windows ХР. Ее интерфейс - это основное средство связи программиста с системой. К сожалению, компания Microsoft не опубликовала полный список системных вызовов Windows ХР, и, кроме того, она меняет их от выпуска к выпуску. При таких обстоятельствах практически невозможно написание программ, непосредственно совершающих системные вызовы.

Зато компания Microsoft определила набор функций, известный всем как Win32 API (Application Programming Interface - прикладной программный интерфейс). Это библиотечные функции, которые выполняют определенные действия либо в системе путем системных вызовов, либо в некоторых случаях непосредственно в библиотечной процедуре пользовательского пространства или подсистеме Win32. Набор Win32 API при создании новых версий Windows ХР не меняется. Однако помимо Win32 API существуют процедуры Windows ХР

API, которые в новых версиях Windows ХР могут меняться. Так как вызовы Win32 API документированы и достаточно стабильны, мы сосредоточим наше внимание именно на них, а не на системных вызовах Windows ХР. Когда в Windows была введена поддержка 64-разрядных машин, компания Microsoft изменила название набора с Win32 на Win64, однако для наших целей изучения 32-разрядной версии вполне достаточно.

В системах Win32 API и UNIX применяются совершенно разные подходы. В UNIX все системные вызовы общеизвестны и формируют минимальный интерфейс: удаление хотя бы одного из них изменит функционирование операционной системы. Подсистема Win32 предоставляет избыточный интерфейс. Здесь часто одно и то же действие можно выполнить тремя или четырьмя разными способами. Кроме того, Win32 включает в себя много функций, которые не являются системными вызовами (например, копирование целого файла).

Многие вызовы Win32 API создают объекты ядра того или иного типа (файлы, процессы, программные потоки, каналы и т. п.). Каждый вызов, ведущий к созданию объекта ядра, возвращает вызывающей программе результат, который называется описателем (handle). Этот описатель впоследствии может применяться для выполнения операций с объектом. Для каждого процесса существует свой описатель. Он не может непосредственно передаваться другому процессу и использоваться этим процессом (дескрипторы файлов в UNIX тоже нельзя передавать другим процессам). Однако при определенных обстоятельствах можно продублировать описатель, передать его другим процессам и разрешить им доступ к объектам, которые принадлежат другим процессам. Каждый объект имеет связанный с ним дескриптор безопасности, который определяет, кому разрешено, а кому запрещено совершать те или иные операции с объектом.

Операционную систему Windows ХР иногда называют объектно-ориентированной, поскольку оперировать объектами ядра можно только по их описателям путем вызова методов (функций API). С другой стороны, она не поддерживает такие основные свойства объектно-ориентированной системы, как наследование и полиморфизм.

Win32 API имеется и в системе Windows 95/98 (а также в операционной системе Windows СЕ, предназначенной для установки в разного рода электронных устройствах), правда, с некоторыми исключениями. Например, Windows 95/98 не имеет защиты, поэтому те вызовы, которые связаны с защитой, просто возвращают код ошибки. Кроме того, для имен файлов в Windows ХР используется набор символов Unicode, который не поддерживается в Windows 95/98. Существуют различия в параметрах некоторых вызовов API. В Windows ХР, например, все экранные координаты являются 32-разрядными числами, а в Windows 95/98 используются только младшие 16 бит (для совместимости с Windows 3.1). Поддержание набора функций Win32 API на разных операционных системах упрощает перенос программ между ними, но при этом кое-что в реальной системе вызовов остается недоступным.

Примеры операционных систем || Оглавление || Примеры виртуальной памяти