7. Вывод информации в окно. Механизм перерисовки окна. Понятие области обновления окна. Операции с областью обновления окна



страница2/21
Дата28.11.2016
Размер2.21 Mb.
Просмотров6139
Скачиваний1
1   2   3   4   5   6   7   8   9   ...   21

Модель архитектуры ОС Windows.

У вспомогательных системных процессов, у процессов служб, у пользовательских приложений и у подсистем среды окружения, — у всех есть свое собственное закрытое адресное пространство.

Четырем основным процессам пользовательского режима можно дать следующие описания:

1. Фиксированные (или реализованные на аппаратном уровне) вспомогательные системные процессы, такие как процесс входа в систему и администратор сеансов — Session Manager, которые не входят в службы Windows (они не запускаются диспетчером управления службами).

2. Служебные процессы, реализующие такие службы Windows, как Диспетчер задач (Task Scheduler) и спулер печати (Print Spooler). Как правило, от служб требуется, чтобы они работали независимо от входов пользователей в систему.

3. Пользовательские приложения, которые могут относиться к одному из следующих типов: для 32- или 64-разрядной версии Windows, для 16-разрядной версии Windows 3.1, для 16-разрядной версии MS-DOS или для 32- или 64-разрядной версии POSIX. Следует учесть, что 16-разрядные приложения могут запускаться только на 32-разрядной версии Windows.

4. Серверные процессы подсистемы окружения, которые реализуют часть поддержки среды операционной системы или специализированную часть, представляемую пользователю и программисту. Изначально Windows NT поставляется тремя подсистемами среды: Windows, POSIX и OS/2. Но подсистемы POSIX и OS/2 последний раз поставлялись с Windows 2000. Выпуски клиентской версии Windows Ultimate и Enterprise, а также все серверные версии включают поддержку для усовершенствованной подсистемы POSIX, которая называетсяподсистемой для приложений на основе Unix (Unix-based Applications, SUA).

При выполнении под управлением Windows пользовательские приложения не вызывают имеющиеся в операционной системе Windows службы напрямую, а проходят через одну или несколько подсистем динамически подключаемых библиотек (dynamic-link libraries, DLL).



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

В Windows входят следующие компоненты, работающие в режиме ядра:

1. Исполняющая система Windows содержит основные службы операционной системы, такие как управление памятью, управление процессами и потоками, безопасность, ввод-вывод, сеть и связь между процессами.

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

3. К драйверам устройств относятся как аппаратные драйверы устройств, которые переводят вызовы функций ввода-вывода в запросы ввода-вывода конкретного аппаратного устройства, так и неаппаратные драйверы устройств, такие как драйверы файловой системы и сети.

4. Уровень аппаратных абстракций (hardware abstraction layer, HAL), являющийся уровнем кода, который изолирует ядро, драйверы устройств и остальную исполняющую систему Windows от аппаратных различий конкретных платформ (таких как различия между материнскими платами).

5. Система организации многооконного интерфейса и графики, реализующая функции графического пользовательского интерфейса (graphical user interface, GUI), более известные как имеющиеся в Windows USER- и GDI-функции, предназначенные для работы с окнами, элементами управления пользовательского интерфейса и графикой.


2. Понятие пользовательского режима и режима ядра операционной системы Windows. Модель виртуальной памяти процесса в пользовательском режиме и в режиме ядра операционной системы Windows. Архитектура приложения в пользовательском режиме работы и в режиме ядра ОС Windows. Основные модули ОС Windows.

Понятие пользовательского режима и режима ядра операционной системы Windows. Модель виртуальной памяти процесса в пользовательском режиме и в режиме ядра операционной системы Windows.

Чтобы защитить жизненно важные системные данные от доступа и (или) внесения изменений со стороны пользовательских приложений, в Windows используются два процессорных режима доступа (даже если процессор, на котором работает Windows, поддерживает более двух режимов): пользовательский режим и режим ядра. Код пользовательского приложения запускается в пользовательском режиме, а код операционной системы (например, системные службы и драйверы устройств) запускается в режиме ядра. Режим ядра — такой режим работы процессора, в котором предоставляется доступ ко всей системной памяти и ко всем инструкциям центрального процессора. Предоставляя программному обеспечению операционной системы более высокий уровень привилегий, нежели прикладному программному обеспечению, процессор гарантирует, что приложения с неправильным поведением не смогут в целом нарушить стабильность работы системы. Хотя у каждого Windows-процесса есть свое собственное закрытое адресное пространство, код операционной системы и код драйвера устройства, используют одно и то же общее виртуальное адресное пространство. Каждая страница в виртуальной памяти имеет пометку, показывающую, в каком режиме доступа должен быть процессор для чтения и (или) записи страницы. Доступ к страницам в системном пространстве может быть осуществлен только из режима ядра, тогда как доступ ко всем страницам в пользовательском адресном пространстве может быть осуществлен из пользовательского режима. Станицы, предназначенные только для чтения (например, те страницы, которые содержат статические данные), недоступны для записи из любого режима. Кроме того, при работе на процессорах, поддерживающих защиту той памяти, которая не содержит исполняемого кода (no-execute memory protection), Windows помечает страницы, содержащие данные, как неисполняемые, предотвращая тем самым неумышленное или злонамеренное выполнение кода из областей данных.

32-разрядные версии Windows не защищают закрытую системную память чтения-записи, используемую компонентами операционной системы, запущенными в режиме ядра. Иными словами, в режиме ядра код операционной системы и драйвера устройства имеют полный доступ к системному пространству памяти и могут обойти систему защиты Windows, получив доступ к объектам. Поскольку основная часть кода операционной системы Windows работает в режиме ядра, очень важно, чтобы компоненты, работающие в этом режиме, были тщательно проработаны и протестированы, чтобы не нарушать безопасность системы или не становиться причиной нестабильной работы системы. Отсутствие защиты также подчеркивает необходимость проявлять особую осторожность при загрузке драйвера устройства стороннего производителя, потому что программное обеспечение, работающее в режиме ядра, имеет полный доступ ко всем данным операционной системы. Этот недостаток стал одной из причин введения в Windows механизма подписи драйверов, который выводит предупреждение пользователю при попытке добавления автоматически настраиваемого (Plug and Play) драйвера, не имеющего подписи (или, при определенной настройке, блокирует добавление такого драйвера). Помимо этого верификатор драйверов — Driver Verifier — помогает создателям драйверов выискивать просчеты (например, переполнение буферов или допущение утечек памяти), способные повлиять на безопасность или стабильность работы системы.

Пользовательские приложения осуществляют переключение из пользовательского режима в режим ядра. Переход из режима пользователя в режим ядра осуществляется за счет использования специальной инструкции процессора, которая заставляет процессор переключиться в режим ядра и войти в код диспетчеризации системных служб, вызывающий соответствующую внутреннюю функцию в Ntoskrnl.exe или в Win32k.sys. Перед тем как вернуть управление пользовательскому потоку, процессор переключается в прежний, пользовательский режим работы.

Таким образом, пользовательский поток вполне может выполняться часть времени в пользовательском режиме, а другую часть времени — в режиме ядра. Фактически, из-за того что основная масса графики и оконная система также работают в режиме ядра, приложения, интенсивно использующие графику, проводят большую часть своего времени в режиме ядра, нежели в пользовательском режиме. Более сложные приложения могут использовать такие новые технологии, как Direct2D и создание составных изображений (compositing), которые проводят основной объем вычислений в пользовательском режиме и отправляют ядру только исходные данные поверхностей, сокращая время, затрачиваемое на переходы между пользовательскими режимами и режимами ядра.

Виртуальная память

В Windows реализована система виртуальной памяти, которая образует плоское (линейное) адресное пространство. Она создает каждому процессу иллюзию того, что у него есть достаточно большое и закрытое от других процессов адресное пространство. Виртуальная память дает логическое представление, которое не обязательно соответствует структуре физической памяти. В период выполнения диспетчер памяти, используя аппаратную поддержку, транслирует, или проецирует (maps), виртуальные адреса на физические, по которым реально хранятся данные. Управляя проектированием и защитой страниц памяти, операционная система гарантирует, что ни один процесс не помешает другому и не сможет повредить данные самой операционной системы.

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

Размер виртуального адресного пространства зависит от конкретной аппаратной платформы. На 32-разрядных системах теоретический максимум для общего виртуального адресного пространства составляет 4 Гб. По умолчанию Windows выделяет нижнюю половину этого пространства (в диапазоне адресов от x00000000 к x7FFFFFFF) процессам, а вторую половину (в диапазоне адресов от x80000000 к xFFFFFFFF) использует в своих целях



Виртуальная память процесса:

От 2 ГБ до 2 ТБ. Кратна 64 КБ – гранулярность памяти пользовательского режима. Информацию о гранулярности можно получить с помощью GetSystemInfo().

Часть виртуальной памяти процесса, которая находится резидентно в физической памяти, называется рабочим набором – Working Set. Диапазон рабочего набора устанавливается функцией SetProcessWorkingSetSize(). Стандартный минимальный рабочий набор – 50 страниц по 4 КБ (200 КБ), стандартный максимальный рабочий набор – 345 страниц по 4 КБ (1380 КБ).


  1. n Управление памятью в пользовательском режиме

    1. Страничная виртуальная память:

    2. Выделение: VirtualAlloc(), VirtualAllocEx(), VirtualAllocExNuma(), VirtualFree(), VirtualFreeEx(). Гранулярность в user mode – 64 КБ.

    3. Защита страниц: VirtualProtect(), VirtualProtectEx().

    4. Фиксация страниц в физической памяти: VirtualLock(), VirtualUnlock().

    5. Информация: VirtualQuery(), VirtualQueryEx().

  2. Куча (свалка) – Heap:

    1. Создание: HeapCreate(), HeapDestroy().

    2. Выделение: HeapAlloc(), HeapReAlloc(), HeapSize(), HeapFree(). Гранулярность – 8 байтов на x86, 16 байтов на x64.

    3. Информация: HeapValidate(), HeapWalk(), HeapQueryInformation(), HeapSetInformation().

    4. Кучи процесса: GetProcessHeap() – стандартная куча равная 1 MB, GetProcessHeaps() – все кучи процесса.

  3. Отображение файлов в память – File Mapping:

    1. Объект ядра, описывающий отображение фрагмента файла в диапазон виртуальных адресов, называется разделом (Section Object).

  4. Управление памятью в режиме ядра

    1. Пулы памяти – Memory Pools

    2. Списки предыстории – Look-aside Lists

    3. Представление объектов ядра в памяти

    4. Фиксация данных в физической памяти

    5. Таблицы описания памяти – Memory Descriptor Lists


Архитектура приложения в пользовательском режиме работы и в режиме ядра ОС Windows. Основные модули ОС Windows.
Пользовательские приложения не вызывают напрямую системные службы Windows. Вместо этого ими используется одна или несколько DLL-библиотек подсистемы. Эти библиотеки экспортируют документированный интерфейс, который может быть использован программами, связанными с данной подсистемой. Например, API-функции Windows реализованы в DLL-библиотеках подсистемы Windows, таких, как Kernel32.dll, Advapi32.dll, User32.dll и Gdi32.dll.

Ntdll.dll является специальной библиотекой системной поддержки, предназначенной, главным образом, для использования DLL-библиотек подсистем. В ней содержатся функции двух типов:

1. функции-заглушки, обеспечивающие переходы от диспетчера системных

служб к системным службам исполняющей системы Windows;

Код внутри функции содержит зависящую от конкретной архитектуры инструкцию, осуществляющую переход в режим ядра для вызова

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

2. вспомогательные внутренние функции, используемые подсистемами, DLL-библиотеками подсистем и другими исходными образами.






3. Системный реестр операционной системы Windows. Структура и главные разделы. Точки автозапуска программ. Средства редактирования реестра Windows. Функции работы с реестром из приложения.
Реестр Windows— иерархически построенная база данных параметров и настроек, состоящая из ульев.В Windows элементы реестра хранятся в виде раздельных структур. Реестр подразделяется на составные части, которые разработчики этой операционной системы назвали ульями (hives) по аналогии с ячеистой структурой пчелиного улья. Улей представляет собой совокупность вложенных ключей и параметров, берущую начало в вершине иерархии реестра. Отличие ульев от других групп ключей состоит в том, что они являются постоянными компонентами реестра. Ульи не создаются динамически при загрузке операционной системы и не удаляются при ее остановке.

На втором уровне располагаются разделы или ключи реестра (Registry Keys), на третьем – подразделы (Subkeys) и на четвертом и далее – параметры (Values).

Реестр содержит данные, к которым Windows постоянно обращается во время загрузки, работы и её завершения, а именно:

· профили всех пользователей, то есть их настройки;

· конфигурация оборудования, установленного в операционной системе.

· данные об установленных программах и типах документов, создаваемых каждой программой;

· свойства папок и значков программ;

· данные об используемых портах.

Корневой раздел

Аббревиатура

Ссылка

Описание

HKEY_CURRENT_USER

HKCU

Подраздел в разделе HKEY_USERS, соответствующий текущему, вошедшему в систему пользователю

Хранит данные, связанные с текущим пользователем,

вошедшим в систему.



HKEY_USERS

HKU

Не является ссылкой

Хранит информацию обо всех учетных записях, имеющихся на машине

HKEY_CLASSES_

ROOT


HKCR

Не является прямой ссылкой, а представляет собой объединенное представление о разделе HKLM\SOFTWARE\Classes и о разделе HKEY_USERS\\SOFTWARE\Classes

Хранит файловые связи и информацию о регистрации

объектов, относящихся к модели компонентных объектов — Component Object Model (COM)



HKEY_LOCAL_

MACHINE


HKLM

Не является ссылкой

Хранит информацию, связанную с системой

HKEY_PERFORMANCE_DATA

HKPD

Не является ссылкой

Хранит информацию о производительности

HKEY_CURRENT_CONFIG

HKCC

HKLM\SYSTEM\

CurrentControlSet\

Hardware Profiles\Current


Хранит определенную информацию о текущем профиле

оборудования


Корневой раздел HKCU содержит данные, относящиеся к персональным настройкам и программной конфигурации локально вошедшего в систему пользователя. Он указывает на пользовательский профиль текущего вошедшего в систему пользователя, находящийся на жестком диске в файле \Users\<имя_пользователя>\Ntuser.dat

Раздел HKU содержит подраздел для каждого загруженного профиля пользователя и использует базу данных классов, зарегистрированных в системе. Он также содержит подраздел HKU\.DEFAULT, связанный с профилем системы. Место, в котором система хранит профили, определяется параметром реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\ProfilesDirectory, значение которого по умолчанию установлено в %SystemDrive%\Users. В разделе ProfileList также хранится список профилей, имеющихся в системе. Информация для каждого профиля размещена в подразделе, имя которого отображает идентификатор безопасности security identifier (SID), — той учетной записи, которой соответствует профиль.

Раздел HKEY_CLASSES_ROOT состоит из трех типов информации:

1) ассоциации с расширениями файлов;

2) регистрации COM-классов;

3) виртуализированный корневой раздел реестра системы для управления учетными записями пользователей — User Account Control (UAC)

Данные, хранящиеся в разделе HKEY_CLASSES_ROOT, поступают из двух источников:

1) из данных о регистрации классов для отдельного пользователя, находящихся в разделе HKCU\SOFTWARE\Classes (который отображается на файл на жестком диске \Users\<имя_пользователя>\AppData\Local\Microsoft\Windows\Usrclass.dat);

2) из данных о регистрации классов в масштабе всей системы, находящихся в разделе HKLM\SOFTWARE\Classes.

Причина отделения регистрационных данных, относящихся к каждому пользователю, от регистрационных данных, распространяемых на всю систему, объясняется тем, что эти настройки могут содержаться в перемещаемых профилях. Тем самым также закрывается дыра в системе безопасности: непривилегированный пользователь не может изменить или удалить разделы в общесистемной версии HKEY_CLASSES_ROOT и не может повлиять на функционирование приложений в системе.
HKLM является корневым разделом, в котором содержатся общесистемные подразделы конфигурации: BCD00000000, COMPONENTS (загружаемый в динамическом режиме по мере необходимости), HARDWARE, SAM, SECURITY, SOFTWARE и SYSTEM.

Подраздел HKLM\BCD00000000 содержит информацию из базы данных загрузочной конфигурации — Boot Configuration Database (BCD), — загружаемую в качестве куста реестра.


Подраздел HKEY_CURRENT_CONFIG является всего лишь ссылкой на текущий профиль оборудования, сохраненный в разделе HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current. Профили оборудования в Windows больше не поддерживаются, но раздел по-прежнему существует для поддержки старых версий.
HKEY_PErForMANcE_DATA

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

Можно получить непосредственный доступ к информации счетчиков производительности в реестре, открыв специальный раздел HKEY_PERFORMANCE_DATA и запросив находящиеся в нем параметры. Просматривая реестр в редакторе реестра, вы этот раздел не найдете, он доступен только программным способом, через имеющиеся в Windows функции реестра, например через RegQueryValueEx.

Информация о производительности на самом деле в реестре не хранится, функции реестра используют этот раздел для поиска информации у поставщиков данных о производительности.


Внутреннее устройство реестра
Кусты

На диске реестр не является обычным большим файлом, а представляет собой набор отдельных файлов, которые называются кустами. Каждый куст содержит дерево реестра, у которого есть раздел, служащий ему корнем или отправной точкой дерева. Подразделы и их параметры находятся ниже корня. Можно подумать, что корневые разделы, отображаемые в редакторе реестра, соответствуют корневым разделам в кустах, но так бывает не всегда. В табл. 4.5 перечислены кусты реестра и имена их файлов при хранении на диске. Путевые имена всех кустов, за исключением тех, которые используются для профилей пользователей, кодируются в диспетчере конфигурации. По мере того как диспетчер конфигурации загружает кусты, включая профили системы, он записывает путь к каждому кусту в параметрах подраздела HKLM\SYSTEM\CurrentControlSet \Control\Hivelist, удаляя путь при выгрузке куста. Он создает корневые разделы, связывает эти кусты вместе, чтобы построить структуру реестра, с которой вы знакомы и которая показывается редактором реестра.

Вы заметите, что некоторые из этих кустов, перечисленные в табл. 4.5, могут изменяться и не имеют связанных с ними файлов. Система создает эти кусты и управляет ими целиком в памяти, поэтому такие кусты являются временными.

Система создает непостоянные кусты при каждой своей загрузке. В качестве примера непостоянного куста можно привести HKLM\HARDWARE, в котором хранится информация о физических устройствах и выделенных этим устройствам ресурсах. Выделение ресурсов и определение установленного оборудования проводятся при каждой загрузке системы, поэтому хранить эти данные на диске было бы нелогично.
Ограничения размера куста

В некоторых случаях размеры куста ограничиваются (напр. для куста HKLM\SYSTEM). Windows поступает таким образом, потому что Winload считывает весь куст HKLM\SYSTEM в физическую память практически сразу же после запуска процесса загрузки, когда разбиение на страницы виртуальной памяти еще не включено. Программа Winload также загружает в физическую память Ntoskrnl и драйверы устройств загрузки, поэтому она должна ограничивать физическую память, выделяемую HKLM\SYSTEM. На 32-разрядных системах Winload позволяет кусту быть размером до 400 Мбайт или размером в половину объема физической памяти системы, в зависимости от того, какой из размеров меньше. На системах x64 нижняя граница составляет 1,5 Гбайт. На системах Itanium она составляет 32 Мбайт.



Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   ...   21


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал