Отправляет email-рассылки с помощью сервиса Sendsay

Внутренее устройство Windows

  Все выпуски  

Внутренее устройство Windows


Симметричная многопроцессорная обработка

Многозадачность (Multitasking) - махенизм операционной системы,позволяющий использовать один процессор для выполнения нескольких потоков.Однако истинно одновременное выполнение,например,двух потоков возможно,только если на компьютере установлено два процессора.При многозадачности система лишь создает видимость одновременного выполнения множества потоков,тогда как многопроцессорная система действительно выполняет сразу несколько потоков - по одному на каждом процессоре.
 Как уже говорилось в начале,одной из ключевых целей разработки Windows была поддержка многопроцессорных компьютерных систем.Windows является операционной системой,поддерживающей симметричную многопроцессорную обработку (symmetric multiprocessing,SMP).В этой модели нет главного процессора;операционная система,как и пользовательские потоки,может выполнятся на любом процессоре.Кроме того,все процессоры используют одну используют одну и туже память.При асимметречной многопроцессорной обработке (asymmetric multiprocessing,ASMP) система,напротив,выбирает один из процессоров для выполнения кода ядра операционной системы,а другие процессоры выполняют только пользовательский код.
 Windows XP и Windows Server 2003 поддерживают два новых типа многопроцессорных систем: логические процессоры (hyperthreading) и NUMA (Non-Uniform Memory Architecture).
 Логические процессоры - это технология,созданная Intel;благодаря ей на одном физическом процессоре может быть несколько логических.Каждый логический процессор имеет свое состояние,но исполняющее ядро (execution engine) и набортный кэш (onboard cache) являются общими.Это позволяет одному из логических процессоров продолжать работу,пока другой логический процессор занят (например,обработкой прерывания,которая не дает потокам выполнятся на этом логическом процессоре).Алгоритмы планирования в Windows XP были оптимизированы под компьютеры с такими процессорами.
 В NUMA системах процессоры группируются в блоки,назывемые узлами (nodes).В каждом узле имеются свои процессоры и память,и он соединяется с остальными узлами специальной шиной.Windows в NUMA-системе по-прежнему работает как SMP-система,в которой все процессоры имеют доступ ко всей памяти,- просто доступ к памяти,локальной для узла,осуществляется быстрее,чем к памяти в других узлах.Система стремится повысить производительность,выделяя потокам время на процессорах,которые находятся в том же узле,что и используемая память.Она также пытается выделять память в пределах узла,но при необходимости выделяет намять и из других узлов.
 Хотя Windows изначально разрабатывалась для поддержки до 32 процессоров,многопроцессорной модели не свойственны никакие внутренние особенности,которые ограничивали бы число используемых процессоров до 32.Просто это число легко представить битовой маской с помощью машинного 32-разрядного типа данных.И действительно,64-разрядные версии Windows поддерживают до 64 процессоров,потому что размер слова на 64-разрядных процессорах равер 64 битам.
 Реальное число поддерживаемых процессоров зависит от конкретного выпуска Windows.Это число хранится в параметре реестра HKLM\SYSTEM\CurrentControlSet\Control\Session\Manager\LicensedProcessors.(Учтите,что модификация этого параметра считается нарушением условий лицензионного соглашения на программное обеспечение,да и для увеличения числа поддерживаемых процессоров требуется нечто большее,чем простое изменение данного параметра.)
 Для большей производительности ядро и HAL имеют одно- и многопроцессорную версии.В случае Windows 2000 это относится к шести ключевым системным файлам,а в 32-разрядных Windows XP и Windows Server 2003 - только к трем.В 64-разрядных системах Windows ядра PAE нет,поэтому одно- и многопроцессорные системы отличаются лишь ядром и HAL.
 Соответствующие файлы выбираются и копируются в локальный каталог \Windows\System32 на этапе установки.Чтобы определить,какие файлы были скопированы,см. файл \Windows\Repair\Setup.log,где перечисляются все файлы,копировавшиеся на локальный системный диск,и каталоги на дистрибутивном носителе,откуда они были взяты.
 
 Имя файла                           Имя однопроцессорной               Имя многопроцессорной
 на системном диске           версии на дистрибутивном         версии на дстрибутивном
 носителе                             носителе
------------------------------------------------------------------------------------------------------------------
 
Ntoskrnl.exe                          Ntoskrnl.exe                                    Ntkrnlmp.exe

Ntkrnlpa.exe (ядро PAE       Ntkrnlpa.exe в \Windows\               Ntkrpamp.exe в \Windows\
только 32-разрядные          <arch>\Driver.cab                          <arch>\Driver.cab
системы)
 
Hal.dll                                  Зависит от типа системы              Зависит от типа системы
------------------------------------------------------------------------------------------------------------------
 
 Только Windows 2000
 
Win32.sys                          \I386\UNIPROC\Win32k.sys              Win32k.sys в \I386\Driver.cab

Ntdll.dll                              \I386\UNIPROC\Ntdll.dll                     \I386\Ntdll.dll

Kernel32.dll                       \I386\UNIPROC\Kernel32.dll              \i386\Kernel32.dll
------------------------------------------------------------------------------------------------------------------ 

ПРИМЕЧАНИЕ
В папке \I386\UNIPROC в дистрибутиве Windows 2000 находится файл Winsrv.dll.Хотя он помещен в папку UNIPROC,название которой указывает на однопроцессорную версию,на самом деле для одно- и многопроцессорных систем существует только одна версия этого образа.

Специальные версии этих ключевых системных файлов для однопроцессорных систем созданы для максимального повышения производительности.Синхронизация работы нескольких процессоров - задача принципиально более сложная,и благодаря однопроцессорным версиям системных файлов устроняются издержки этой синхронизации,которая в однопроцессорных системах (а они составляют подавляющее большинство систем под управлением Windows) не нужна.
 Интересно,что однопроцессорная и многопроцессорная версии Ntoskrnl создаются за счет условной компиляции одного и того же исходного кода,а однопроцессорные версии Ntdll.dll и Kernel32.dll для Windows 2000 требуют замены машинных х86-команд LOCK и UNLOCK,используемых для синхронизации множества потоков,командой NOP (которая ничего не делает).
 Остальные системные файлы Windows (включая все утилиты,библиотеки и драйверы устройств) одинаковы как в многопроцессорных,так и однопроцессорных системах.При разработке нового нового программного обеспечения - Windows-приложения или драйвера устройства - вы должны учитывать этот подход и тестировать свое программное обеспечение как в одно-,так и в многопроцессорных системах.
 

В избранное