Автор работы: Пользователь скрыл имя, 08 Февраля 2013 в 20:48, курсовая работа
Windows XP (кодовое название при разработке – Whistler; внутренняя версия – Windows NT 5.1) – операционная система (ОС) семейства Windows NT корпорации Microsoft. Она была выпущена 25 октября 2001 года и является развитием Windows 2000 Professional. Название XP происходит от англ. eXPerience (опыт).
В отличие от предыдущей системы Windows 2000, которая поставлялась как в серверном, так и в клиентском вариантах, Windows XP является исключительно клиентской системой. Её серверным аналогом являетсяWindows Server 2003.
Введение 4
Общая структура операционной системы Windows XP 6
Ядро 15
Процессы 22
Потоки 26
Уровни приоритета 29
Выводы 32
Часть 2. Задача о спящем парикмахере 34
Список использованной литературы 38
Общая схема создания процесса в Windows показана на рисунке 3. Прежде чем открыть исполняемый образ для выполнения, CreateProcess делает следующее.
При вызове CreateProcess класс приоритета указывается в параметре СrеаtionFlags, и, вызывая CreateProcess, вы можете задать сразу несколько классов приоритета. Windows выбирает самый низкий из них.
Когда для нового процесса не указывается класс приоритета, по умолчанию принимается Normal, если только класс приоритета процесса-создателя не равен Idle или Below Normal. В последнем случае новый процесс получает тот же класс приоритета, что и у родительского процесса.
Если для нового процесса указан класс приоритета Real-time, а создатель не имеет привилегии Increase Scheduling Priority, устанавливается класс приоритета High.
Иначе говоря, функция CreateProcess завершается успешно, даже если у того, кто ее вызвал, недостаточно привилегий для создания процессов с классом приоритета Realtime, просто класс приоритета нового процесса будет ниже Real-time.
Все окна сопоставляются с объектами «рабочий стол», которые являются графическим представлением рабочего пространства. Если при вызове CreateProcess не указан конкретный объект «рабочий стол», новый процесс сопоставляется с текущим объектом «рабочий стол» процесса-создателя.
Рисунок 3. Основные этапы создания процесса
Этап 1: открытие образа, подлежащего выполнению
Как показано на рисунке 4, на первом этапе CreateProcess должна найти нужный Windows-образ, который будет выполнять файл, указанный вызвавшим процессом, и создать объект «раздел» для его последующего проецирования на адресное пространство нового процесса. Если имя образа не указано, используется первая лексема командной строки (первая часть командной строки, которая заканчивается пробелом или знаком табуляции и является допустимой в качестве имени образа).
Рисунк 4. Первый этап создания процесса
Этап 2: создание объекта «процесс»
К началу второго этапа функция CreateProcess уже открыла допустимый исполняемый файл Windows и создала объект «раздел» для его проецирования на адресное пространство нового процесса. После этого она создает объект «процесс», чтобы запустить образ вызовом внутренней функции NtCreateProcess.
Этап 3: создание первичного потока, его стека и контекста
К началу третьего этапа объект «процесс» исполнительной системы полностью инициализирован. Однако у него еще нет ни одного потока, поэтому он не может ничего делать. Прежде чем создать поток, нужно создать стек и контекст, в котором он будет выполняться. Эта операция и является целью данного этапа. Размер стека первичного потока берется из образа другого способа задать его размер нет.
Далее создается первичный поток вызовом NtCreateThread. Параметр потока – это адрес РЕВ (данный параметр нельзя задать при вызове CreateProcess – только при вызове CreateThread). Этот параметр используется кодом инициализации, выполняемым в контексте нового потока. Однако поток по-прежнему ничего не делает – он создается в приостановленном состоянии и возобновляется лишь по завершении инициализации процесса (см. этап 5). NtCreateThread вызывает PspCreateThread (функцию, которая используется и при создании системных потоков).
Этап 4: уведомление подсистемы Windows о новом процессе
Если заданы соответствующие правила, для нового процесса создастся маркер с ограниченными правами доступа. К этому моменту все необходимые объекты исполнительной системы созданы, и Kernel32.dll посылает подсистеме Windows сообщение, чтобы она подготовилась к выполнению нового процесса и потока.
Сообщение включает следующую информацию:
Этап 5: запуск первичного потока
К началу этого этапа окружение процесса уже определено, его потокам выделены ресурсы, у процесса есть поток, а подсистеме Windows известен факт существования нового процесса. Поэтому для завершения инициализации нового процесса возобновляется выполнение его первичного потока, если только не указан флаг CREATE_SUSPENDED.
Этап 6: инициализация в контексте нового процесса
Новый поток начинает свою жизнь с выполнения стартовой процедуры потока режима ядра, KiThreadStartup, которая понижает уровень IRQL потока с «DPC/dispatch» до «АРС», а затем вызывает системную стартовую процедуру потока, PspUserThreadStartup. Параметром этой процедуры является пользовательский стартовый адрес потока.
Потоки
Отличие потока и процесса
Как говорилось ранее процесс состоит хотя бы из одного потока. В Windows XP каждому процессу соответствует адресное пространство и одиночный управляющий поток. Фактически это и определяет процесс.
С одной стороны, процесс можно рассматривать как способ объединения родственных ресурсов в одну группу. У процесса есть адресное пространство, содержащее текст программы и данные, а также другие ресурсы. Ресурсами являются открытые файлы, дочерние процессы, необработанные аварийные сообщения, обобработчики сигналов, учетная информация и многое другое. Гораздо проще управлять ресурсами, объединив их в форме процесса.
С другой стороны, процесс можно рассматривать как поток исполняемых кокоманд или просто поток. У потока есть счетчик команд, отслеживающий порядок выполнения действий. У него есть регистры, в которых хранятся текущие переменные. У него есть стек, содержащий протокол выполнения процесса, где на каждую процедуру, вызванную, но еще не вернувшуюся, отведен отдельный фрейм. Хотя поток должен исполняться внутри процесса, следует различать концепции потока и процесса. Процессы используются для группирования ресурсов, а потоки являются объектами, поочередно исполняющимися на центральном процессоре.
Концепция потоков добавляет к модели процесса возможность одновременного выполнения в одной и той же среде процесса нескольких программ, в достаточной степени независимых. Несколько потоков, работающих параллельно в одном процессе, аналогичны нескольким процессам, идущим параллельно на одном компьютере. В первом случае потоки разделяют адресное пространство, открытые файлы и другие ресурсы. Во втором случае процессы совместно пользуются физической памятью, дисками, принтерами и другими ресурсами. Потоки обладают некоторыми свойствами процессов, поэтому их иногда называют упрощенными процессами.
На рисунке 5, представлены три обычных процесса, у каждого из которых есть собственное адресное пространство и одиночный поток управления. На рисунке 5 б представлен один процесс с тремя потоками управления. В обоих случаях мы имеем три потока, но на рисунке 5 а каждый из них имеет собственное адресное пространство, а на рисeyrt 5 б потоки разделяют единое адресное пространство.
Рисунок 5. Три процесса с одиночными потоками управления(а); один процесс с тремя потоками управления (б)
Любой поток состоит из двух компонентов:
Главное отличие процессов от потоков, состоит в том, что процессы изолированы друг от друга, так используют разные адресные пространства, а потоки, могут использовать одно и то же пространство (внутри процесса) при этом, выполняя действия не мешаяя друг другу.
Рождение потока
Жизненный цикл потока начинается при его создании программой. Запрос на его создание в конечном счете поступает исполнительной системе Windows, где диспетчер процессов выделяет память для объекта «поток» и вызывает ядро для инициализации блока потока ядра. Ниже перечислены основные этапы создания потока Windows-функцией CreateThread (которая находится в Kernel32.dll).
Уровни приоритета
Как было сказано ранее в Windows предусмотрено 32 уровня приоритета – от 0 до 31 рисунке 6. Эти значения группируются так:
Рисунок 6. Уровни приоритета потоков
Уровни приоритета потока назначаются с учетом двух разных точек зрений Windows API и ядра Windows. Windows API сначала упорядочивает процессы по классам приоритета, назначенным при их создании [Real-time (реального времени), High (высокий), Above Normal (выше обычного), Normal (обычный), Below Normal (ниже обычного) и Idle (простаивающий)], а затем – по относительному приоритету индивидуальных потоков в рамках этих процессов [Time-critical (критичный по времени), Highest (наивысший), Above-normal (выше обычного), Normal (обычный), Below-normal (ниже обычного), Lowest (наименьший) и Idle (простаивающий)].
Базовый приоритет каждого потока в Windows API устанавливается, исходя из класса приоритета его процесса и относительного приоритета самого потока. Связь между приоритетами Windows API и внутренними приоритетами ядра Windows (в числовой форме) показана на рисунке 7.
Если у процесса только одно значение приоритета (базовое), то у каждого потока их два: текущее и базовое. Решения, связанные с планированием, принимаются на основе текущего приоритета. В определенных обстоятельствах система может на короткое время повышать приоритеты потоков в динамическом диапазоне (1-15). Windows никогда не изменяет приоритеты потоков в диапазоне реального времени (16-31), поэтому у таких потоков базовый приоритет идентичен текущему.
Рисунок 7. Взаимосвязь приоритетов в ядре и Windows API
Начальный базовый приоритет потока наследуется от базового приоритета процесса, а тот наследует его от родительского процесса. Это поведение можно изменить при вызове Windows-функции CreateProcess или команды START. Приоритет процесса можно изменить и после его создания, используя функцию SetPriorityClass или различные утилиты, предоставляющие доступ к этой функции через UI, например диспетчер задач и Process Explorer. В частности, можете понизить приоритет процесса, интенсивно использующего время CPU, чтобы он не мешал обычным операциям в системе. Смена приоритета процесса влечет за собой смену приоритетов всех его потоков, но их относительные приоритеты остаются прежними. Но изменение приоритетов индивидуальных потоков внутри процесса обычно не имеет смысла, потому что вы не знаете, чем именно занимается каждый из них (если только сами не пишете программу или не располагаете исходным кодом); так что изменение относительных приоритетов потоков может привести к неадекватному поведению этого приложения.
Обычно базовый приоритет процесса (а значит, и базовый приоритет первичного потока) по умолчанию равен значению из середины диапазонов приоритетов процессов (24, 13, 10, 8, 6 или 4). Однако базовый приоритет некоторых системных процессов (например, диспетчера сеансов, контроллера сервисов и сервера локальной аутентификации) несколько превышает значение по умолчанию для класса Normal (8). Более высокий базовый приоритет по умолчанию обеспечивает запуск потоков этих процессов с приоритетом выше 8. Чтобы изменить свой начальный базовый приоритет, такие системные процессы используют внутреннюю функцию NtSetInformationProcess.
Выводы
Подводя итоги мы узнали что Windows XP имеет модульную структуру (рис. 2.20), в которой код операционной системы и драйверы выполняются в привилегированном режиме процессора (режиме ядра), обеспечивающем полный доступ ко всей аппаратной части компьютера, а пользовательские приложения выполняются в непривилегированном режиме процессора – пользовательском режиме без прямого доступа к оборудованию компьютера.
Узнали что режим ядра содержит все привилегированные процессы, которые выполняются на уровне 0 архитектуры Intel х86. Ядро Windows XP состоит из нескольких системных компонентов, каждый из которых отвечает за определенный набор задач
Ядро системы выполняет следующие основные функции: