Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Монолитная, послойная и клиент-серверная моделиСтр 1 из 4Следующая ⇒
Введение Как изучать операционные системы (ОС)? Сначала нужно разобраться, зачем нужны ОС, как они устроены изнутри, как их проектировать и разрабатывать. Одних теоретических знаний недостаточно. Можно считать, что вы по настоящему разобрались с ОС, только если вам удается применить полученные теоретические знания на практике. Разработчики программного обеспечения (ПО) должны уметь создавать эффективные приложения с использованием сервисов, предоставленных непосредственно ОС. Мы будем изучать, как ОС Windows и UNIX спроектированы и реализованы, а на лабораторных работах писать эффективные программы, которые напрямую, используют возможности этих ОС. Для Windows будем использовать Win32 API, а для UNIX системные вызовы. Лекции содержат в основном теоретический материал, а в описаниях к лабораторным работам приводятся необходимые Win32 API функции и системные вызовов Unix. Задания приводятся 3-х уровней сложности. Вся информация, которая нужна для выполнения заданий первого уровня, есть в лекциях и описаниях лабораторных работ. Кроме того, для многих заданий этого уровня приводятся “скелеты кода”. Следующие уровни сложности потребуют от вас самостоятельных решений и изучения MSDN. Написано много книг посвященных ОС, но они дорогие и толстые, кроме того, одной книги будет недостаточно. Рассмотрим основные типы существующих изданий, их достоинства и недостатки: · Теоретические основы построения ОС. Они не позволяют научиться на практике, применять полученные знания. · Основы системного администрирования. В этих книгах обычно описывается только процесс администрирования и подразумевается, что необходимыми теоретическими знаниями читатель уже обладает. · Разработка эффективных приложений. Теоретические основы построения ОС изложены очень коротко. Данный учебник это попытка совместить теорию и практику и осуществить быстрый старт. А дальше вы должны идти самостоятельно, уже осмысленно используя MSDN. Очень хочется, чтобы вам было интересно, и энтузиазм вас не покидал. основные понятия и определения Любая вычислительная система состоит из аппаратного обеспечения (hardware) и программного обеспечения (software). Программное обеспечение (ПО), в свою очередь, делят на прикладное и системное. Прикладное ПО - это прикладные программы. Системное ПО - это программы, способствующие функционированию и разработке прикладных программ. Операционная система ( ОС ) – это основной компонент системного ПО. Операционная система – это программа, обеспечивающая среду выполнения для других программ и облегчающая им доступ к устройствам (процессоры, диски и т.д.). Она очень удобна, но не абсолютно необходима. На заре компьютерной эпохи загружали программу в память с перфоленты, задавали вручную стартовый адрес, и с него начиналось выполнение. Современные ОС предоставляют пользователям два вида услуг. Во-первых, они упрощают использование аппаратных средств. Создаваемая ими виртуальная машина заметно отличается от реальной. ОС изолируют пользователей от непонятной им части аппаратной части компьютеров. Во-вторых, ОС обеспечивает распределение вычислительных ресурсов между пользователями. Один из самых важных ресурсов – процессор (процессорное время). В многозадачной (multitasking) ОС выполняемая работа подразделяется на процессы ( processes ), каждому из которых предоставляется память, системные ресурсы и, по крайней мере, один поток управления ( thread of execution ). Процесс ( process ) – логическая единица работы в ОС. Процесс включает в себя виртуальное адресное пространство, исполняемую программу, один или несколько потоков управления, а также системные ресурсы, которые ОС выделяет потокам процесса ОС. Поток исполнения ( thread of execution ) – исполняемая сущность внутри процесса. Поток состоит из указателя текущей команды, пользовательского стека, стека ядра и набора значений регистров. Все потоки процесса имеют доступ к его адресному пространству и другим ресурсам. ОС выполняет один поток в течение кванта времени, потом переключается на другой. Многозадачность очень полезна даже в однопользовательской системе, так как несколько задач будут выполняться одновременно. Кроме того, ОС распределяет память и управляет доступом к файлам и устройствам. ОС различаются по способам, которыми они представляют виртуальную машину пользователям и распределяют между ними ресурсы. Мы будем рассматривать, как все это происходит в Windows и UNIX. Архитектура ОС Объектная модель В ОС, как и в случае других больших программ, трудно найти одну главную программу, которая управляет всей ОС. Если это можно сделать, то систему разрабатывают сверху вниз. При использовании объектно-ориентированной методологии, сначала рассматривают данные, с которыми должна работать программа для выполнения своей задачи. Для ОС такими данными являются системные ресурсы – файлы, процессы, блоки памяти и т.д. Основная цель любой разработки – это создание программного обеспечения, которое легко изменять. Это особенно важно, так как по статистике 70% цены программных продуктов приходится на сопровождение. Сопровождение включает добавление новых возможностей, модификацию форматов данных и исправление ошибок. Использование объектно-ориентированного подхода, позволяет скрыть физическое представление данных внутри объектов. Объект ( object ) – это структура данных, физический формат которой скрыт в определении типа. Он имеет набор атрибутов (attributes) и с ним работает группа сервисов (services). ОС использует объекты для представления системных ресурсов. Каждый системный ресурс, который могут совместно использовать несколько процессов, реализован как объект и обрабатывается объектными сервисами. Например, если произошли изменения в аппаратуре, то необходимо изменить только объект, представляющий данный аппаратный ресурс, и его сервисы. Код, который использует объект, модифицировать не нужно. Кроме того, использование объектов дает ряд дополнительных преимуществ: · Доступ ОС к ресурсам и работа с ними унифицирована. Каждый ресурс – это объект, поэтому контроль использования ресурсов сводится к отслеживанию создания и использования объектов. Создание, удаление и ссылка на любой объект осуществляется одинаково с помощью описателей (handles) объектов. · Упрощается защита – для всех объектов она осуществляется одинаково. При попытке доступа к объекту подсистема защиты проверяет допустимость операции независимо от типа объекта. · Объекты предоставляют унифицированную парадигму для совместного использования ресурсов несколькими процессами. Для работы с объектами любого типа используются описатели объектов. Два процесса совместно используют объект тогда, когда каждый из них открыл его описатель. ОС отслеживает число открытых описателей для данного объекта, чтобы определить, действительно ли он используется или его можно удалить. Классификация ОС По числу одновременно работающих пользователей ОС можно разделить на два класса: · Однопользовательские (MS-DOS, Windows 3.x); · Многопользовательские (Windows NT, UNIX). По числу одновременно выполняемых задач ОС можно разделить на два класса: · Многозадачные (Unix, OS/2, Windows); · Однозадачные (например, MS-DOS). Многозадачность – это техника, применяемая ОС для использования одного процессора нескольким потоками управления. Если у компьютера имеется более одного процессора, то необходимо перейти к модели мультипроцессорной обработки (multiprocessing). Многозадачная ОС создает иллюзию одновременного выполнения нескольких потоков. А в ОС с мультипроцессорной обработкой в действительности выполняются несколько потоков одновременно (по одному потоку на процессор). ОС с мультипроцессорной обработкой делятся на две категории: · С асимметричной мультипроцессорной обработкой (asymmetric multiprocessing, ASMP). Код ОС выполняется на одном процессоре, а на других процессорах выполняются пользовательские задачи (см. Рис. 5 Асимметричная мультипроцессорная обработка). · С симметричной мультипроцессорной обработкой (symmetric multiprocessing, SMP). Код ОС будет выполняться на любом свободном процессоре или на всех процессорах одновременно (см. Рис. 6 Симметричная мультипроцессорная обработка).
Рис. 5 Асимметричная мультипроцессорная обработка
Рис. 6 Симметричная мультипроцессорная обработка Часть 1 Windows Введение В мире ОС прогресс достигается медленно. Разработка ОС занимает несколько лет. Созданная ОС, бесполезна, пока не появятся приложения, позволяющие эффективно использовать ее возможности. Кроме того, нужно научиться использовать саму ОС. Получается, что мы работаем с “пожилыми” ОС (как минимум 10-ти летней давности). Аппаратные технологии развиваются намного быстрее. Появляются компьютеры с более мощными процессорами, большим объемом памяти, с несколькими процессорами и т.д. А разработчики пытаются усовершенствовать старые ОС, чтобы те могли использовать новые возможности аппаратных средств. Гораздо лучше создать ОС, которая будет поддерживать новые аппаратные разработки. Требования рынка Сформулируем основные требования (requirements), предъявляемые рынком к ОС: · Переносимость. Новшества в аппаратном обеспечении возникают быстро и часто непредсказуемо. Написание ОС на переносимом языке позволило бы быстро переходить от одной архитектуры к другой. · Мультипроцессорная обработка и масштабируемость. Компьютеры с несколькими процессорами регулярно появляются на рынке, но лишь немногие из существующих ОС могут в полной мере использовать их возможности. Создание ОС как масштабируемой многопроцессорной ОС позволило бы запускать одно и то же приложение, как на однопроцессорных, так и на многопроцессорных машинах. Несколько приложений выполнялись бы одновременно с максимальной скоростью, а приложения, требующие большого объема вычислений, могли бы повысить свою производительность, распределив работу между несколькими процессорами. · Распределенные вычисления. В 80-е годы персональные компьютеры стали широко доступны. Там где раньше использовали большую ЭВМ и терминалы, стали использовать персональные компьютеры, объединенные в сеть. Это позволило им совместно использовать аппаратные и вычислительные ресурсы (файл-сервер, сервер печати, сервер вычислений). Функции поддержки сети необходимо встроить непосредственно в саму ОС. · Совместимость с POSIX. Во второй половине 80-х годов POSIX был определен в качестве стандарта, которому должно удовлетворять программное обеспечение, поставляемое по правительственным контрактам в США. POSIX (portable operating system interface based on UNIX) - это набор международных стандартов для интерфейсов ОС UNIX-типа. Соблюдение стандартов позволяет легко переносить приложения с одной системы на другую. Чтобы удовлетворять требованиям к поставкам по заказам правительства, NT должна была обеспечить среду исполнения приложений POSIX. · Защита от несанкционированного доступа. Кроме совместимости с POSIX, правительство США устанавливает правила защиты для приложений, используемых в правительственных учреждениях. Система должна пройти правительственную сертификацию. Правила защиты включают обязательные требования, такие как защита ресурсов пользователя от других пользователей и возможность установления квот на системные ресурсы для предотвращения захвата одним пользователем всех системных ресурсов. Система защиты ОС должна иметь уровень С2, определенный министерством обороны США как обеспечивающий селективное назначение прав доступа владельцем, включение возможностей аудита для учета субъектов и инициируемых ими действий. Владелец системного ресурса может определять, кто имеет доступ к ресурсу, а ОС в состоянии определить, когда и кем осуществлена попытка доступа к ресурсу. Свойства ОС Свойства, которыми должна обладать современная ОС: · Расширяемость. Код должен быть написан так, чтобы его удобно было дополнять и модифицировать при изменении требований рынка. · Переносимость. Код должен легко переноситься с одного процессора на другой. · Надежность и безопасность. Система должна защищать себя как от внутренних сбоев, так и от внешнего вторжения. Она должна всегда вести себя предсказуемо, и у приложений не должно быть возможности повредить ОС или нарушить ее функционирование. · Совместимость. Пользовательский интерфейс и API должны быть совместимы с существующими системами. · Производительность. Система должна быть максимально быстрой и обеспечивать минимальное время отклика на каждой аппаратной платформе. Далее рассмотрим, как разработчики Windows NT создали ОС, удовлетворяющую этим свойствам. Расширяемость Можно рассмотреть два аспекта расширяемости. Первый относится к конфигурации операционной системы. Машина с Windows можно сконфигурировать как рабочую станцию или как сервер. При любой конфигурации используется тот же основной исходный код, но во время компиляции включаются различные компоненты. Это позволяет оптимизировать систему при использовании на рабочей станции или на сервере, не создавая две различные ОС. Второй более значительный аспект расширяемости это послойно-модульная структура ОС (см. Рис. 7 Структура Windows). Фундаментальные механизмы реализованы в ядре (kernel ). Это низкоуровневые, четко определенные и хорошо предсказуемые примитивы. Ядро реализует системные механизмы и не участвует в принятии решений, связанных с определением системной политики. Дополнительные механизмы затем реализуются на этой базе для задания определенной политики. Такой подход обеспечивает безопасность и надежность. Исполнительная система (executive system) спроектирована как уровень абстрагирования от ядра. Она обеспечивает специфические механизмы/политики для управления объектами и памятью, процессами, файлами и устройствами. Вместе ядро и исполнительная система реализуют основные функции ОС, которые снова расширяются посредством подсистем. (subsystems).
Рис. 7 Структура Windows Хотя ядро и исполнительная система спроектированы и реализованы как отдельные слои модули, они включаются в один выполняемый модуль NTOSKRNL.EXE. К нему также при необходимости подключаются динамически подключаемые библиотеки (DLLs). Следующий уровень абстрагирования – это уровень подсистем, которые обеспечивают переносимость приложений. Подсистема это программный модуль, который использует сервисы (механизмы), реализованные в ядре и исполнительной системе для реализации более абстрактных сервисов, в особенности сервисов, предоставляемых конкретной ОС. Например, NT 4.0 включает подсистему POSIX, которая выполняется на базе ядра и исполнительной системы и делает NT подобной POSIX. Подсистемы называют подсистемами окружения (environment subsystems) или защищенными подсистемами (protected subsystems). Другие подсистемы предоставляют специализированные сервисы, например подсистема безопасности Local Security Authority Server (LSASS.EXE). Все подсистемы и все использующие их пользовательские приложения выполняются в пользовательском режиме. Подсистемы это ключевой компонент, позволяющий поддерживать различные модели вычислений (например, MS-DOS или Win16). Приложения, написанные для MS-DOS, используют подсистему MS-DOS. Эта подсистема предоставляет такой же API, как и MS-DOS, давая возможность программам MS-DOS выполняться в NT. Переносимость Переносимость – система должна работать на разных аппаратных архитектурах и обладать способностью к достаточно легкому переносу на новые аппаратные архитектуры, если на рынке возникнет потребность в этом. Переносимость обеспечивает использование всей ОС целиком на машине с другим процессором или конфигурацией при минимальных изменениях исходного текста. Часто ОС делят на переносимые и непереносимые, хотя “перенести” можно любую программу, вопрос только в том насколько это сложно сделать. Чтобы написать переносимую программу нужно следовать определенным правилам: · Код должен быть написан на языке, доступном на всех машинах, на которые планируется переносить программу. Поэтому код следует писать на стандартизованном языке высокого уровня. Язык ассемблера по своей природе не переносим. · Следует учесть, в какую среду планируется переносить программное обеспечение. Например, программу, написанную для 32-разрядной адресации, не удастся перенести на машину с 16-разрядными адресами – только ценой огромных усилий. · Нужно минимизировать, а там где только возможно вообще удалить код, работающий непосредственно с аппаратурой (прямое манипулирование регистрами, другими аппаратными структурами, использование конкретной аппаратной конфигурации или емкости). · Там где аппаратно-зависимого кода не избежать, его необходимо изолировать в небольшом количестве модулей. Два последних правила тесно связаны друг с другом. Например, можно скрыть аппаратно-зависимую структуру в абстрактном типе данных. А другие модули будут работать с этим типом данных посредством процедур. Тогда при переносе программы необходимо изменить только этот тип данных и связанные с ним процедуры. Чтобы упростить переносимость NT были использованы следующие подходы: Переносимый язык С. Система написана в основном на языке С (стандарт ANSI). Этот язык стандартизован и для него широко доступны компиляторы. Небольшие части системы написаны на С++ (графические компоненты, фрагменты сетевого пользовательского интерфейса). Язык ассемблера использовали только для тех частей ОС, которые должны работать непосредственно с оборудованием, и для компонентов требующих максимальной скорости выполнения. Однако непереносимый код был тщательно изолирован внутри использующих его компонент. Изоляция от процессора. Некоторые низкоуровневые фрагменты ОС должны работать с зависимыми от процессора структурами данных. Такой код поместили в небольшие модули, которые можно заменить аналогичными модулями для других процессоров. Изоляция от платформы. Платформенно-зависимый код инкапсулирован внутри динамически подключаемой библиотеки, называемой слоем абстрагирования от оборудования (hardware abstraction layer, HAL). Платформенно-зависимыми называются свойства, которые могут отличаться на компьютерах с одним и тем же типом процессора от разных производителей ( кэш, контроллеры прерываний ). Переносимость во многих аспектах перекрывается с расширяемостью. Подсистемы обеспечивают расширяемость, позволяя выполнять различные приложения, но также они являются и основой для переносимости. Приложения, написанные для других ОС за счет подсистем можно легко перенести под NT. Кроме подсистемы для MS-DOS, подсистемы Win16 и POSIX основной подсистемой является подсистема Win32. В общем случае разработчики программного обеспечения могут разработать нужную подсистему, удовлетворяющую их требованиям к сервисам ОС, используя интерфейс исполнительной системы/ядра. Подсистема Win32 играет особую роль, так как реализует расширение исполнительной системы, необходимое другим подсистемам. Каждая из подсистем использует подсистему Win32, поэтому ее присутствие обязательно. HAL, ядро и исполнительная система функционируют в режиме ядра и экспортируют API, который используют создатели подсистем. Создатели подсистем окружения выбирают целевой API (Win16, POSIX или OS/2 API) и строят подсистему, реализующий этот API, используя все сервисы, предоставляемые в режиме ядра. API Microsoft – это Win32 API, который предоставляется подсистемой Win32. Прикладные программисты используют интерфейс Win32 API, а не интерфейс NTOSKRNL.EXE. Надежность и безопасность Надежность – система должна быть защищенной как от внутренних сбоев, так и от внешних деструктивных действий. У приложений не должно быть возможности нарушить работу ОС или других приложений. Надежная ОС должна давать предсказуемый отклик на ошибочные состояния, даже если они вызваны сбоями аппаратуры. Кроме того, надежная ОС должна активно защищать себя и своих пользователей от случайного или умышленного вреда, наносимого пользовательскими программами. Структурная обработка исключений (structured exception handling) – это метод перехвата ошибочных состояний и унифицированной их обработки. Он используется для защиты Windows NT от программных или аппаратных ошибок. Когда возникает ненормальное событие, ОС возбуждает исключение и автоматически вызывается код обработки исключения, гарантируя, что пользовательским программам и самой системе не будет нанесен вред. Повышению устойчивости способствуют и другие свойства: Внутренняя модель системы клиент/сервер. Ядро и исполнительная система работают в режиме ядра (kernel mode), а пользовательские приложения (и подсистемы) – в пользовательском режиме (user mode). Приложения используют метод передачи сообщений для взаимодействия со службами нижнего уровня. Это существенно повышает надежность системы, но несколько снижает производительность из-за дополнительных затрат на передачу сообщений. Многозадачность с вытеснением (preemptive multi tasking). Это гарантирует адекватное распределение процессора на протяжении работы системы, предотвращает монопольный захват процессора приложением и остановку системы, когда приложение работает нестабильно. Модульная структура исполнительной системы. Отдельные модули взаимодействуют друг с другом только через тщательно разработанные программные интерфейсы. Какой-либо модуль можно заменить другим, реализующим те же самые интерфейсы. Защита от несанкционированного доступа. Уровень защиты С2 правительства США, предоставляющий различные механизмы защиты: регистрация пользователей в системе, квоты на ресурсы и защита объектов. Файловая система NT (NTFS). NTFS способна к восстановлению после всех типов дисковых ошибок, включая ошибки в критически важных секторах диска. Для обеспечения восстанавливаемости используется избыточное хранение данных и обработка транзакций. Транзакция – это некая совокупность операций, которая должна выполниться от начала до конца. Если одна или несколько операций из этой совокупности ( транзакции ) не выполнились, то система возвращается в исходную точку. Это позволяет отменить незавершенную или неправильную операцию, возникающую в случае аппаратного или программного сбоя. Виртуальная память (virtual memory). Каждому приложению предоставляется личное адресное пространство. При обращении по виртуальным адресам диспетчер памяти транслирует (отображает) их в физические адреса. ОС предотвращает чтение или изменение одним пользователем памяти, занимаемой другим пользователем (если только эта память явно не объявлена совместно используемой). Совместимость Рассмотрим сначала совместимость по программным интерфейсам. Под такой совместимостью понимают способность ОС выполнять программы, написанные для другой ОС или предыдущих версий той же самой системы. При этом рассматривают два вида совместимости: двоичную совместимость и совместимость на уровне исходных текстов. Если исполняемый файл можно запустить в другой ОС, то достигнута двоичная совместимость. Совместимость на уровне исходных текстов требует предварительной перекомпиляции программы. Если новый процессор использует тот же набор команд и ту же адресацию, что и старый, то будет достигнута двоичная совместимость. Если это не так, то можно добиться двоичной совместимости при помощи программы эмулятора, преобразующего один набор машинных команд в другой. При отсутствии эмулятора все переносимые приложения необходимо заново скомпилировать, скомпоновать и вероятно отладить. При помощи защищенных подсистем (подсистем окружения) NT предоставляет среду для выполнения приложений, использующих API отличающийся от ее собственного API Win32. Windows NT обеспечивает двоичную совместимость для приложений MS-DOS, 16-разрядной Windows и OS/2. Кроме того, NT обеспечивает совместимость на уровне исходных текстов для приложений POSIX. Мы рассмотрели совместимость по программным интерфейсам. Рассмотрим совместимость на уровне файловых систем. NT поддерживает ряд существующих файловых систем: · Файловую систему MS-DOS (FAT); · Высокопроизводительную файловую систему OS/2 (HPFS); · Файловую систему для CD-дисков (CDFS); · Свою новую восстанавливаемую файловую систему (NTFS). Производительность Производительность постоянно имелась в виду при разработке всех компонентов системы. Производилось тестирование и моделирование быстродействия компонентов, критичных для производительности. Критические участки вычислений тщательно оптимизировались для достижения максимальной скорости обработки. Учитывая, что защищенные подсистемы часто взаимодействуют друг с другом и с пользовательскими приложениями. Чтобы это взаимодействие не снижало производительности в состав ОС был включен высокоскоростной механизм передачи сообщений – локальный вызов процедур (local procedure call, LPC). Архитектура Windows Ядро (Kernel) Ядро (kernel) – компонент исполнительной системы, управляющий процессором. Выполняет планирование и переключение потоков, обработку прерываний и исключений и мультипроцессорную синхронизацию, а также реализует примитивные объекты, используемые исполнительной системой для создания объектов пользовательского режима. Ядро является основой вычислительной модели и обеспечивает поддержку многозадачности. Оно не определяет определенную политику/стратегию для управления процессами, памятью, файлами и устройствами. Ядро обеспечивает определенный уровень поддержки и его можно рассматривать как набор предлагаемых строительных компонент, который вы можете использовать. Клиенты ядра могут комбинировать эти компоненты для построения более сложных компонент, которые уже будут определять политику/стратегию. Ядро предоставляет объекты и потоки (абстракции вычислений) на основе HAL и аппаратного обеспечения. Приложения, которое является клиентом ядра, использует эти абстракции для взаимодействия с аппаратурой. Для реализации объектов и потоков ядро управляет аппаратными прерываниями и исключениями, выполняет планирование и мультипроцессорную синхронизацию. Объекты (Objects) Ядро содержит набор встроенных типов объектов (классы в объектно-ориентированном программировании). Некоторые типы объектов ядра используются самим ядром. Эти объекты позволяют сохранять и управлять состоянием ядра. Другие объекты используются исполнительной системой, подсистемами и кодом приложений как основа вычислительной модели. Объекты ядра должны быть быстродействующими. Они существуют в режиме ядра в соответствующем контексте, здесь отсутствует проверка безопасности по сравнению с “нормальными” объектами для которых такая проверка производится. При этом необходимо учитывать, что объектами ядра нельзя управлять из программ пользовательского режима, а только используя вызовы функций. Существует две группы объектов ядра: управляющие объекты (control objects) диспетчерские объекты (dispatcher objects). Потоки (Threads) Как уже упоминалось при обсуждении объектов, поток это абстракция вычислений. В Windows объект процесс определяет адресное пространство, в котором один или более потоков могут выполняться. Каждый объект поток представляет отдельную выполняемую сущность внутри процесса. В UNIX может быть только дин поток, выполняемый в каждом адресном пространстве, т.е. существует только один путь выполнения в адресном пространстве процесса. В других современных ОС (Mach, Chorus и NT) можно создать более одного потока (пути выполнения кода) в адресном пространстве процесса. Потоки называют легковесными процессами. Они существуют в адресном пространстве процесса и совместно используют ресурсы (см. Рис. 8 Процессы и потоки).
Рис. 8 Процессы и потоки Планирование потоков В Windows используется приоритетный, с вытеснением и квантованием времени планировщик. Процессор выделяется потоку на квант времени, вычисляемый как несколько тиков системных часов. Планировщик поддерживает 32 уровня приоритета и соответственно столько же различных очередей планировщика. Как и во всех многоуровневых планировщиках, пока существуют потоки в очереди самого высокого приоритета, потоки только из этой очереди будут назначаться на процессор. Если в этой очереди нет больше потоков, тогда планировщик будет обслуживать очередь второго по величине приоритета и т.д. Значения приоритетов группируются так (см. Рис. 9 Уровни приоритета): · шестнадцать уровней реального времени (16-31 Real-time level) · пятнадцать варьируемых (динамических) уровней (1-15 Variable-level) · один системный уровень (0 System-level), зарезервирован для потока обнуления страниц (zero page thread).
Рис. 9 Уровни приоритета Подсистемы (Subsystems) Серверы Windows называются защищенными подсистемами (protected subsystems ), так как каждый из них – это отдельный процесс, память которого защищена от других процессов системой виртуальной памяти. Термин “сервер” подразумевает, что каждая защищенная подсистема обеспечивает API, который могут использовать программы. Когда приложение (или другой сервер) вызывает некоторую процедуру API, серверу, реализующему данную процедуру, посылается сообщение при помощи средства локального вызова процедур (local procedure call, LPC) – оптимизированный механизм исполнительной системы для локальной передачи сообщений. Сервер посылает ответное сообщение вызывающей программе. В Windows имеется два типа защищенных подсистем: подсистемы среды ( environment subsystems ) и неотъемлемые подсистемы ( integral subsystems ). Подсистема среды это сервер пользовательского режима, реализующий API некоторой ОС. Когда приложение вызывает функцию API, этот вызов доставляется посредством LPC подсистеме среды. Та исполняет вызов и возвращает результаты прикладному процессу, посылая другой LPC. Самая важная подсистема среды в Windows это подсистема Win32, которая предоставляет прикладным программам Win32 API, кроме того, она реализует графический интерфейс пользователя и управляет всем вводом/выводом приложений. Неотъемлемая подсистема – это подсистема защиты. Win32 API Это основной интерфейс программирования в семействе ОС Microsoft Windows, включая Windows 2000, Windows 95, Windows 98, Windows Millennium Edition и Windows CE. Под Win32 API мы будем понимать базовый набор функций, предназначенных для поддержки процессов, потоков, управления памятью, защиты, ввода-вывода, операций с окнами, графики и др. (см. Microsoft Developer Network, MSDN). Теория Практически все современные компьютеры используют архитектуру фон Неймана. Идея заключается в том, что вычисления будут выполнены, если программа будет находиться в оперативной памяти, а устройство управления будет извлекать и декодировать инструкции из памяти. Устройство управления далее взаимодействует с другими аппаратными компонентами для выполнения инструкции. На этом уровне вычислений не существует понятий пользователей, процессов или разделяемых ресурсов, а просто устройство управления выполняет одну за другой инструкции из памяти. Многозадачная ОС создает виртуальную машину – абстракцию. В этом случае несколько программ должны одновременно находиться в оперативной памяти, а устройство управления периодически переключается с выполнения инструкций одной программы на выполнения инструкций другой. На аппаратном уровне это не имеет значения, что выполняются инструкции разных программ. Для устройства управления такое переключение это просто выполнение инструкции перехода. Однако с точки зрения пользователей это означает, что компьютер выполняет одну программу некоторое время, а потом переключается на выполнение другой (процессор это разделяемый ресурс). ОС реализует этот мультипрограммный подход, давая программистам возможность загружать программы в память, обеспечивая их выполнение, приостанавливая выполнение и т.д. Построение такого программного окружения это результат определенной стратегии, которая называется software abstractions. Так ядро создает абстракции объектов потоков на базе архитектуры фон Неймана. Исполнительная система использует абстракции ядра для создания модели процесса, в котором может исполняться поток. Поток не может выполнять программу, которая не находится в адресном пространстве его процесса, а потоки других процессов не могут выполняться в его адресном пространстве. В этом упражнение вы познакомитесь с процессами и потоками. Task Manager (TASKMGR.EXE) Для запуска щелкнуть правой кнопкой мыши на панели задач (в той области, которая не занята кнопками приложений), а затем выбрать в появившемся контекстном меню элемент Task Manager. Появится окно Windows NT Task Manager. По умолчанию, в окне Task Manager открыта вкладка Applications. Имеются еще вкладки Processes и Performance. Вкладка Processes(Процессы) На этой вкладке приведен перечень всех процессов, выполняемых в системе. Это более длинный и подробный список, нежели приведенный на вкладке Applications. Здесь указывается имя процесса, идентификатор процесса, процессорное время (в процентах от общего времени) и объем памяти, используемый каждым процессом. Используя эту информацию, вы можете выявить “пожирателей” памяти. Task Manager помогает справиться со случайными проблемами, вызванными одним или несколькими невидимыми – и зависшими – экземплярами приложения (часто Microsoft Internet Explorer). Если пользователь жалуется, что программа не запускается, сколько бы он не щелкал на элементе или пиктограмме меню Start, проверьте информацию в Task Manager/Processes и поищите соответствующий exe-файл. Если найдете, остановите программу и все копии кнопкой End Process, и пользователь наверняка сможет работать дальше. Чему нужно научиться У вас должно появиться интуитивное представление о том, что такое процессы и потоки. Задание 1. Проверьте, что все приложения закрыты 2. Запустите cmd.exe (“Start/Programs/Command prompt”) 3. Наберите команду hostname, чтобы узнать имя вашего компьютера 4. Наберите winmsd.exe (Windows NT Diagnostics) или “Start/Programs/Administrative Tools/ Windows NT Diagnostics”. · Определите версию системы · Какой тип CPU используется · Сколько физической памяти · Сколько памяти используется ядром · Сколько сервисов запущено 5. Закройте winmsd.exe. 6. Запустите pview.exe · Сколько процессов запущено · Запущен ли процесс Idle · Сколько времени процесс Idle проводит в режиме ядра, а сколько в пользовательском режиме · Какой класс приоритета у процесса Idle · Какой приоритет у потока процесса Idle · Какой динамический приоритет у потока процесса Idle · Найдите в списке процесс pview · Какой класс приоритета у процесса pview · Сколько потоков запущено в процессе pview · Какой приоритет у потоков процесса pview · Какой динамический приоритет у каждого потока процесса pview · Есть ли процессы в которых запущено больше чем два потока 7. Запустите Task Manager · Какие приложения запущены |
Последнее изменение этой страницы: 2017-03-17; Просмотров: 635; Нарушение авторского права страницы