Здесь рассматривается взаимодействие пользователя с ОС вне программы - через команды, вводимые с клавиатуры терминала в интерактивных системах или поступающие во вводном потоке в пакетных системах. В первом случае, как правило, новая команда вводится после выполнения предыдущей и сама новая команда или ее параметры могут выбираться в зависимости от результатов этого выполнения. Во втором случае задается сразу целая последовательность команд и возможные отклонения от последовательного их выполнения должны задаваться явным образом. Из таких различий в технологии взаимодействия пользователей с системой вытекают естественные различия в интерактивных и пакетных командных языках, но по мере расширения командных языков они имеют тенденцию к сближению: в интерактивные командные языки включаются возможности задания последовательностей команд, а в пакетные - более гибкие средства управления последовательностью выполнения.
Командный язык и командный процессор
Команды представляют собой инструкции, сообщающие ОС, что нужно делать. Команды могут восприниматься и выполняться либо модулями ядра ОС, либо отдельным процессом, в последнем случае такой процесс называется командным интерпретатором или оболочкой - shell). Набор допустимых команд ОС и правил их записи образует командный язык (CL - control language).
Большинство запросов пользователя к ОС состоят из двух компонент: какую операцию следует выполнить и в каком окружении (environment) должно происходить выполнение операции. Могут различаться внутренние и внешние операции-команды. Выполнение внутренних операций производится самим командным интерпретатором, выполнение внешних требует вызова программ-утилит. Вызов и выполнение программ-утилит ничем не отличаются от вызова и выполнения приложений. Командный интерпретатор порождает процессы-потомки и выполняет в них заданные программы, используя для этого те же самые системные вызовы, которые может использовать и прикладная программа.
Окружением или средой называется то, что отличает одно выполнение программы от другого. Окружение конкретного выполнения может формироваться одним из следующих способов или их комбинациями:
· командами установки локального окружения;
· параметрами программы;
· командами установки глобального окружения.
Окружение может быть локальным или глобальным. В первом случае параметры окружения устанавливаются только для данного конкретного выполнения данной конкретной программы-процесса и теряются по окончании выполнения. Во втором случае параметры окружения сохраняются и действуют все время до их явной отмены или переустановки.
Переменные окружения могут быть системными или пользовательскими. Системные имеют зарезервированные символьные имена и интерпретируются командным интерпретатором либо другими системными утилитами. Пользовательские переменные создаются, изменяются и интерпретируются пользователями и приложениями. Чтобы окружение могло быть использовано, в системе должны быть средства доступа к нему. На уровне команд - это должна быть команда типа, выводящая на терминал имена и значения всех переменных глобального окружения, на уровне API - системный вызов, возвращающий адрес блока глобального окружения.
В ОС, позволяющих легко порождать новые процессы, предполагается выполнение сложных действий как результата совместной (последовательной или параллельной) работы нескольких простых процессов. Поэтому командный язык таких ОС включает в себя средства интеграции процессов. К числу таких средств относятся:
· командные списки - простое перечисление в одной командной строке нескольких команд, которые будут выполняться последовательно;
· переадресация системного ввода-вывода - переадресация ввода дает возможность использовать в качестве входных данных программы данные, заранее записанные в файл, причем программа вводит и интерпретирует эти данные как введенные с клавиатуры; переадресация вывода сохраняет данные, которые должны выводиться на экран, в файле;
· конвейеризация - сочетание командного списка с переадресацией ввода-вывода; выходные данные программы 1 направляются не на экран, а сохраняются и затем используются, как входные для программы 2;
· параллельное выполнение - специальный признак в командной строке применяется в качестве указания командному интерпретатору вводить и выполнять следующую команду, не дожидаясь окончания выполнения предыдущей.
Командные файлы и язык процедур
Соображения удобства пользователя диктуют необходимость короткого обращения к часто выполняемым последовательностям команд. Простым и эффективным решением этой задачи является запись такой последовательности в текстовый файл и обращение к ней в дальнейшем по имени файла. Такие файлы называются командными файлами. В интерактивных системах их иногда также называют пакетными файлами, а в пакетных - файлами процедур. Командный интерпретатор должен при вводе команды-обращения к такому файлу распознать тип файла и далее считывать и интерпретировать команды из файла.
В простейшем случае командный файл содержит неизменяемую последовательность команд и является просто аббревиатурой этой последовательности. Несколько более сложные средства позволяют управлять последовательностью выполнения команд в командном сценарии. Простейшим вариантом такого управления является включение в команду условия ее выполнения, более сложный и гибкий вариант - условный переход на ту или иную команду. В условии выполнения или перехода должен анализироваться код завершения одной или нескольких предыдущих команд.
Развитые же командные языки обладают всеми наборами свойств алгоритмических языков и позволяют писать целые программы в командных файлах, включающие в себя как обращения к командам системы, так и обработку их результатов. Наиболее развитыми из таких языков являются shell (ОС Unix и ее клоны) и REXX (все ОС фирмы IBM).
Полноэкранный интерфейс
Интерфейс командной строки на сегодняшний день используется только системными программистами и администраторами. Программируемые видеотерминалы дают возможность выводить информацию в любую позицию экрана и, следовательно, использовать все пространство экрана для организации взаимодействия между ОС и пользователем.
Полноэкранный интерфейс строится на основе принципа согласованности, который состоит в том, что у пользователя формируется система ожидания одинаковых реакций на одинаковые действия. Общие принципы панельного интерфейса в основном не зависят от типа применяемых терминалов. Однако, сочетание графических видеоадаптеров с высокой разрешающей способностью с общим увеличением вычислительной мощности персональных вычислительных систем позволяет существенно изменить общий облик экрана. Основные направления этих изменений: многооконность, объемность, иконика. Приоритет в разработке графических интерфейсов (в том числе и объектно-ориентированных) принадлежит фирме Apple, но повсеместное распространение интерфейсная графика получила, прежде всего, в ОС Windows фирмы Microsoft.
Даже на чисто текстовых видеотерминалах имелась возможность вывода на экран нескольких окон одновременно, но для графического режима эта возможность значительно расширилась. В многооконном интерфейсе значительно увеличивается роль мыши, как средства выбора окна и как средства целеуказания внутри выбранного окна. Высокая разрешающая способность графических дисплеев позволяет также имитировать объемные панели. На "объемной" панели применяются также дополнительные графические элементы - органы управления.
Главное изменение в облике интерфейса - иконика - представление объектов (файлов) в виде миниатюрных графических изображений - пиктограмм (icon). Помимо чисто внешних изменений иконика породила возможность манипулировать объектами через манипулирование их изображениями. Широкое распространение получила техника перемещения/копирования файлов, именуемая транспортировкой. Дальнейшее развитие графика интерфейсов получает в объектно-ориентированном интерфейсе.
Объектно-ориентированный интерфейс
В противовес обычному интерфейсу, который представляет пользователю практически единственный тип объекта - файл, единицу хранения информации в ОС, объектно-ориентированный (ОО) интерфейс представляет объекты различных типов. Файлы могут быть разными типами объектов - в зависимости от типа информации в них хранящейся и способов ее обработки. Кроме того, объектами могут быть устройства, сетевые ресурсы и т.д. В ОО программировании под объектом понимается абстрактный тип данных, включающий в себя как сами данные, так и процедуры их обработки. Аналогично объекты понимаются и в ОО интерфейсе. Среди свойств, присущих объекту, имеется и указание на способ его обработки - в том числе и на приложение, обрабатывающее данные этого типа. Выполнение некоторых действий над объектом включает в себя автоматический запуск приложений, которые эти действия выполняют.
В современных ОС ОО интерфейс пользователя основывается на концепции рабочего стола - оболочки ОС, представляющей экран в виде ровной поверхности, на которой расположены объекты и папки. Сам рабочий стол также является объектом, имеющим определенный набор свойств и возможных операций. Папкой называется объект, в котором содержатся другие объекты и/или папки. Объекты и папки представляются пиктограммами, для них целеуказателем является мышь, для задания практически всех необходимых действий используются клавиши мыши. Операции копирования, перемещения и т.п. выполняются с применением техники транспортирования. Определенное действие пользователя (нажатие кнопки мыши) вызывает появление меню действий - списка операций, возможных для объекта данного типа. Меню действий будут различными для разных типов объектов. Многие действия, названия которых общие для всех объектов, выполняются, однако, по-разному, и требуют вызова разных приложений. Одним из действий, общим для всех объектов является чтение/установка свойств объекта. При выборе этого действия на экран выводится список свойств, специфицированных для объекта выбранного типа, и их значений для данного объекта.
Часть 3. Основы работы в среде ОС
Базовые принципы создания прикладных программ: Win32 Application Programming Interface (Win32 API), Object Linking and Embedding (OLE). Общие правила работы с приложениями (прикладными программами);
Здесь ОС нас будет интересовать с позиции программиста, желающего разобраться в принципах создания собственной прикладной программы.
На заре Windows программы создавались с применением набора Microsoft Software Development Kit (SDK). В состав этого набора, который продолжает выпускаться и сейчас, входит комплект полезных утилит, предназначенных для создания ресурсов приложений, тестирования программ и просто ускорения процесса разработки. SDK содержит полный набор библиотек для связывания Windows-программ, заголовочные файлы, электронную документацию и большое количество примеров программ на все случаи жизни.
Сегодня добавились еще две возможности программировать для Windows, обе предполагают использование какой-то современной системы программирования:
1. Win32 API (the 32-bit Windows application programming interface)
2. Пользование библиотеками классов, имеющихся в системе программирования.
Можно рекомендовать в качестве таких систем Borland C++ Builder или Delphi, построенные на базе языков программирования Си++ и Pascal соответственно. На самом деле систем программирования очень много. В их число входят и Visual Basic и FoxPro, и множество малоизвестных русскоязычному программисту систем класса Power Builder.
Исходные тексты Windows-приложений, разработанных на уровне программного интерфейса Windows API, легко могут быть переработаны в готовые программы с помощью любого компилятора языков Си и Си++. Все, что потребуется, - это знание универсального программного интерфейса API Win32, на котором базируются приложения для Windows 9х и Windows NT. Win32 API подкреплен Object Linking Embedding (OLE), механизмом внедрения данных из одной прикладной программы в другую. С помощью OLE можно внедрить в текстовый документ, например, звуковой или видео фрагмент, не обращаясь к программам обработки звука (изображения).
Помимо OLE используется Component Object Model (COM) -спецификация Microsoft для создания программных компонентов, которые легко объединяются в программы или могут быть добавлены к существующим программам, чтобы придать им дополнительную функциональность. COM является основой спецификаций OLE, ActiveX и DirectX.
Помимо COM существует DCOM – распределенная объектная модель компонентов, определяющая, каким образом компоненты взаимодействуют в сети на основе Windows.
ActiveX – вариант технологии OLE, специально предназначенный для использования в Internet, где невелика скорость передачи данных между узлами. Обеспечивает взаимодействие компонентов ПО (написанных на разных языках) в сетевой среде.
DirectX – системная библиотека, компоненты которой обеспечивают управление звуковыми и графическими средствами компьютера.
Можно обойтись и без API, работая только с библиотеками классов. Класс - ключевое понятие C++. Класс - это тип данных, определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию, неявное преобразование типов, для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций.
Но вы не создадите серьезной программы для Windows, если не знаете API. С помощью библиотеки можно создать работающий каркас с приятным внешним видом, но по мере усложнения вашей программы и добавления новых функций, вы все чаще и чаще будете сталкиваться с невозможностью решения проблем на уровне библиотек класса. Кроме того, знание API дает понимание глубинных процессов, происходящих в программах. А без этого некорректно считать себя программистом.
Рассмотрим понятие Окно (window) – базовое для графического интерфейса пользователя (GUI) и основной объект внутрисистемного взаимодействия в ОС Windows. Окно представляет собой прямоугольную (специальными методами можно задать иную форму) часть экрана, в которой приложение производит отображение выводимой информации и из которой получает вводимую информацию. Кроме того, окно является получателем сообщений.
При загрузке Windows всегда создается окно, занимающее весь экран – Desktop window. Каждое Windows-приложение, использующее стандартные интерфейсы Windows (Windows-based приложение), создает хотя бы одно окно, называемое главным окном приложения (возможно, невидимое). Многие приложения создают еще дополнительные окна. В каждый момент времени только одно окно в системе может получать вводимую информацию – т.н. активное окно. Пользователь может использовать клавиатуру, мышь или другое устройство ввода для взаимодействия с окном.
Приложения могут использовать различные типы окон:
– элементы управления (controls)
– диалоговые окна (dialog boxes)
– окна сообщений (message boxes)
Существует определенная взаимосвязь между окнами: родительское окно или окно-хозяин.
Окно может иметь родительское окно (parent window). В таком случае оно называется дочерним окном (child window) по отношению к родительскому. Дочернее окно никогда не выходит за границы родительского. При свертывании родительского окна свертываются все дочерние. При уничтожении родительского окна все дочерние уничтожаются. Дочернее окно не имеет меню.
Окно может иметь окно-хозяина. Это другой тип отношений между окнами. Окно всегда располагается поверх хозяина и сворачивается и уничтожается вместе с ним.
Для порождения окна (в том числе и главного окна приложения) используется функция CreateWindow или CreateWindowEx.
Основные виды Windows (3.х, 9x, NT, XP, CE)
Windows 3.x
Windows 3.x (3.1, 3.11) фирмы Microsoft (3.1 - 1987г.) представляет собой надстройку над MS DOS. Фактически, Windows «перехватывает» у DOS управление большинством ресурсов (кроме файловой системы).
В части управления процессами Windows обеспечивает кооперативную (невытесняющую) многозадачность. Виртуальная память процесса сегментирована. При работе на процессорах i386 и последующих, которые аппаратно поддерживают сегментно-страничную модель, страничная часть адресации используется для создания виртуального пространства
страниц, размер которого в 4 раза превышает размер реальной памяти, далее управление памятью ведется по сегментной модели в этом виртуальном пространстве страниц.
Программирование в Windows является событийно-управляемым. Программа представляет собой цикл, каждая итерация которого начинается с ожидания сообщения (каковым может быть, например, нажатие кнопки мыши), затем сообщение обрабатывается, и программа ожидает нового сообщения. Во время ожидания сообщения процесс может быть вытеснен.
Ядро Windows состоит из 3 основных модулей, из которых: Kernel – обеспечивает системные функции, User – объекты интерфейса пользователя, GDI – графические функции.
Основным нововведением Windows, обеспечившим ее популярность, является полноэкранный графический интерфейс пользователя.
Windows for Workgroups 3.11 расширена средствами совместного использования ресурсов локальной сети (файлы, принтеры).
Windows 9.x
Эта аббревиатура обозначает две наиболее популярные ОС фирмы Microsoft: Windows 95 (95 OSR2) и Windows 98 (98 SE, ME) во всех их реализациях.
Windows 95 разработана Microsoft, прежде всего, для предотвращения перехода пользователей Windows 3.x в среду OS/2. Windows 95 справилась с этой задачей, но не за счет своих объективных достоинств, а за счет крупномасштабной рекламной компании, начавшейся задолго до ее появления на рынке.
В отличие от Windows 3.x, Windows 95 является полнофункциональной ОС, код DOS в нее встроен только для поддержки приложений, выполняющихся на виртуальной машине DOS.
Программы, написанные для Windows 95, используют 32-разрядную адресацию.
Основу той части ОС, которая работает в пользовательском режиме, составляет системная виртуальная машина, в среде которой выполняются все приложения Win32, а также виртуальная машина Windows 3.x, в среде которой выполняются приложения Win16. Функции модулей Kernel, User, GDI – те же, что и в Windows 3.x, около 50% кода этих модулей просто перенесено из Windows 3.x.
В части многозадачности Windows 95 обеспечивает вытесняющую многозадачность (включая потоки) с динамически изменяемыми приоритетами. Планированием процессов занимается Диспетчер ВМ, работающий в режиме ядра. Однако, поскольку часть системного кода заимствована из Windows 3.x и является нереентерабельной, вытеснение процесса в момент, когда он выполняет системный вызов, не всегда возможно.
Процессу пользователя Windows 95 предоставляет плоское адресное пространство размером 4 Гбайт. Это реализуется за счет того, что каждому процессу выделяется только один сегмент, адрес представляет собой 32-разрядное смещение в сегменте. В верхней части виртуального адресного пространства располагаются объекты, общие для всех процессов, в том числе и системные модули. Системный вызов имеет вид вызова процедуры, находящейся в адресном пространстве процесса. Верхние части виртуальных адресных пространств всех процессов перекрываются, что создает потенциальную возможность для одного процесса «испортить» систему для всех. Значительная часть системных модулей реализована в виде библиотек динамической компоновки.
Для обеспечения взаимодействия между процессами Windows 95 представляет: общие области памяти (т.наз., файлы, отображаемые в память), семафоры, мьютексы (переменные взаимного исключения) и события (и то, и другое – разновидности семафоров), сообщения.
В первой версии использовалась модификация файловой системы FAT, в версии OSR FAT-32 была значительно модифицирована. Windows 95 обеспечивает инсталлируемые файловые системы – возможность одновременной загрузки и поддержки драйверов различных ФС.
Интерфейс Windows 95 графический, документо-ориентированный.
Основное отличие Windows 98 – в организации интерфейса. Используется три вида пользовательского интерфейса: Web-подобный (который может быть реализован через броузер Internet Explorer), классический и смешанный. При Web-подобном интерфейсе открываемые объекты (папки, файлы) выделяются одним лишь указанием мыши, а открываются однократным щелчком. Классический интерфейс – оставшийся от Windows 95. В нем объекты выделяются однократным щелчком мыши, а открываются двукратным щелчком. Смешанный пользовательский интерфейс обеспечивает любую комбинацию свойств Web-подобного и классического интерфейса.
В Windows 98 имеется множество других новаций и усовершенствований, суммарно это все-таки другая ОС, хотя и близкая к своей предшественнице.
Можно выделить расширенные возможности работы с файлами, улучшенные сетевые возможности, усовершенствованные и дополнительные средства мультимедиа, улучшенную поддержку устройств и технических средств, включая установку и обслуживание ОС.
Хотя Windows 9х с самого начала считались неким суррогатом, призванным обеспечить удержание фирмой позиций до выхода в свет принципиально новой ОС фирмы Microsoft (NT), эта система, по-видимому, будет сохраняться, и развиваться еще некоторое время для домашних и других ПК неответственного применения. Основным преимуществом Windows 9х является простота работы с ней. Основным минусом считается неустойчивость в работе, вызванная самим принципом построения ОС: приложения и модули ОС работают в одном адресном пространстве и легко уязвимы при сбоях приложений.
Windows NT
Windows NT явилась продолжением Microsoft проекта OS/2, предпринятым фирмой после того, как разошлись ее пути с IBM. С самого начала Windows NT планировалась как полностью 32-разрядная ОС с объектно-ориентированной структурой, предназначенная выполнять функции сервера. Windows NT доступна на большом числе аппаратных платформ CISC и RISC-процессоров, в том числе и в симметричных многопроцессорных архитектурах, но эффективно она работает только на платформе Intel-Pentium, где и получила широкое распространение.
Windows NT строится на базе микроядра. Нижний уровень составляет уровень аппаратных абстракций, который обеспечивает доступ к аппаратным средствам для разработчиков драйверов.
Ядро ОС обеспечивает переключение процессов, синхронизацию, обмен сообщениями, управление реальной памятью. Над ядром расположены модули исполнительной системы, также работающие в режиме ядра и являющиеся менеджерами ресурсов. В режиме процесса работают серверы, создающие среду для приложений. Основным является сервер Win32, остальные показанные на рисунке серверы в последних версиях не поддерживаются.
Windows NT является ОО системой, все системные ресурсы представляются как объекты. Важными составляющими ОС является подсистема безопасности, которая ведет базу данных безопасности, и менеджер безопасности, который проверяет права доступа для каждого объекта. Однако, в каждой последующей версии все большее число модулей (в том числе и драйверы независимых разработчиков) получают доступ в режим ядра, что повышает быстродействие, но снижает надежность работы ОС. Система обеспечивает вытесняющую многозадачность с динамическим изменением приоритетов потоков. Однако, задача планирования дисциплины распределения процессорного времени возлагается на процесс-сервер.
Windows NT предоставляет пользовательскому процессу виртуальное адресное пространство размером 2 Гбайт. Системные вызовы имеют вид обращения к процедурам, находящимся в верхней части виртуального адресного пространства. Однако на самом деле там находятся не сами системные модули, а лишь переходники, которые превращают вызов в сообщение, переправляемое при помощи модуля «Средства вызова локальных процедур» процессу-серверу, этот же переходник превращает ответное сообщение сервера в отклик на системный вызов. Таким образом, если процесс «испортит» верхнюю часть своего виртуального адресного пространства, он испортит только свои переходники, а не системные модули. Процесс-сервер работает в собственном 4-Гбайтном адресном пространстве, полностью изолированном от пространств пользовательских процессов.
Подобно OS/2 и Windows 95, Windows NT обеспечивает инсталлируемую ФС систему. Основная ФС – NTFS – обеспечивает хранение файлов в непрерывных экстентах дискового пространства и представление плана размещения файла в виде B+-дерева, а также мощные средства сохранения целостности ФС при помощи различных вариантов резервного копирования, включая технологию RAID-5.
Средства взаимодействия процессов идентичны в Windows 9х и Windows NT.
Очередная версия Windows NT – 5 получила название Windows 2000. Она выпускается в разных редакциях – для различных применений, включая Home Edition. Еще в середине 2001 года она считалась наиболее продвинутой ОС корпорации.
Общие черты Windows 9х и Windows NT
Простота использования
· Автоматическое определение оборудования во время инсталляции;