Windows Server Longhorn — новая серверная операционная система

Часть 3

Алексей Федоров

Процессы и потоки

Изменения в сетевом стеке

Boot Configuration Data

 

В предыдущих частях нашего обзора мы обсудили основные понятия, связанные с серверной операционной системой; роли, которые может выполнять Windows Server Longhorn; сервисы, а также дополнительные функции, доступные в этой операционной системе. Кроме того, мы рассмотрели вариант установки Windows Server с минимальным набором функциональности — Server Core и обсудили транзакционную поддержку на уровне ядра (через Kernel Transaction Manager) и построенные на ее основе расширения файловой системы и функций доступа к реестру, обеспечивающие работу с этими компонентами в рамках транзакций.

В этой части мы продолжим рассмотрение расширений, появившихся на уровне ядра операционной системы.

Процессы и потоки

С точки зрения операционной системы, приложение представляет собой один или более процессов. Процесс (process) — это исполняемая программа. Каждый процесс обеспечивает ресурсы, необходимые для выполнения программы. Процесс состоит из виртуального адресного пространства, исполняемого кода, ссылок (handles) на открытые системные объекты, контекста безопасности, уникального идентификатора процесса (process id), переменных среды, класса приоритетов, минимального и максимального значений выделяемых ресурсов (working set), а также как минимум одного потока для выполнения кода. При запуске каждому процессу выделяется один поток, называемый первичным. По мере необходимости процесс может создавать дополнительные потоки.

Поток (thread) — это единица, применяемая операционной системой для выделения времени процессора. Поток может выполнять любую часть кода процесса, в том числе части, выполняемые в другом потоке. Все потоки используют единое виртуальное адресное пространство и системные ресурсы. Помимо этого каждый поток поддерживает собственные обработчики исключений, приоритеты выполнения, локальные хранилища, уникальный идентификатор потока (thread id) и набор структур, применяемых системой для сохранения контекста при переключении потоков. Контекст потока содержит набор машинных регистров для потока, стек ядра, среду для потока, а также пользовательский стек, хранимый в адресном пространстве потока. В операционной системе Microsoft Windows используется так называемая преимущественная поддержка многозадачности (preemptive multitasking), с помощью которой создается эффект одновременного выполнения нескольких потоков в рамках нескольких процессов.

Нить (fiber) — это единица выполнения, выделяемая самим приложением. Нити выполняются в контексте потоков, которые управляют ими и выделяют соответствующие ресурсы. Каждый поток может порождать более одной нити.

Новинкой в клиентской операционной системе Microsoft Windows Vista и серверной операционной системе Microsoft Windows Server Longhorn является улучшенная реализация механизма пула потоков (thread pool), с помощью которого возможно создание коллекции рабочих потоков, способных эффективно обрабатывать асинхронные косвенные вызовы (asynchronous callbacks), получаемые приложениями. Пул потоков применяется для снижения числа прикладных потоков и более эффективного управления рабочими потоками. Приложения, использующие соответствующие программные интерфейсы (см. ниже), могут создавать очереди рабочих потоков, ассоциировать задачи со ссылками ожидания (waitable handles), заполнять очереди по таймеру, связывать очереди с процессами ввода-вывода и т.п. Приложения могут использовать пул потоков для реализации следующих сценариев:

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

В таблице показаны новые программные интерфейсы, поддерживающие потоки задач.

Все перечисленные функции реализованы в ядре операционной системы (Kernel32.dll), их прототипы описаны в файле Winbase.h, а для компиляции приложений, применяющих функции управления пулом потоков, потребуется библиотека Kernel32.lib.

Более подробно о новом пуле потоков см. следующие сетевые ресурсы:

Новые программные интерфейсы, поддерживающие потоки задач

Задача

Программные интерфейсы

Синхронизация

CloseThreadpoolWait, CreateThreadpoolWait, SetThreadpoolWait, WaitForThreadpoolWaitCallbacks

Выполнение

CloseThreadpoolWork, CreateThreadpoolWork, SubmitThreadpoolWork, TrySubmitThreadpoolCallback, WaitForThreadpoolWorkCallbacks

Таймер

CloseThreadpoolTimer, CreateThreadpoolTimer, IsThreadpoolTimerSet, SetThreadpoolTimer, WaitForThreadpoolTimerCallbacks

Ввод-вывод

CancelThreadpoolIo, CloseThreadpoolIo, CreateThreadpoolIo, StartThreadpoolIo, WaitForThreadpoolIoCallbacks

Очистка группы

CloseThreadpoolCleanupGroup, CloseThreadpoolCleanupGroupMembers, CreateThreadpoolCleanupGroup

Управление пулом

CloseThreadpool, CreateThreadpool, SetThreadpoolThreadMaximum, SetThreadpoolThreadMinimum

Управление средой

DestroyThreadpoolEnvironment, InitializeThreadpoolEnvironment, SetThreadpoolCallbackCleanupGroup, SetThreadpoolCallbackLibrary, SetThreadpoolCallbackPool, SetThreadpoolCallbackRunsLong

Управление функциями

CallbackMayRunLong

Очистка функций

DisassociateCurrentThreadFromCallback, FreeLibraryWhenCallbackReturns, LeaveCriticalSectionWhenCallbackReturns, ReleaseMutexWhenCallbackReturns, ReleaseSemaphoreWhenCallbackReturns, SetEventWhenCallbackReturns

Изменения в сетевом стеке

В клиентской операционной системе Microsoft Windows Vista и серверной операционной системе Microsoft Windows Server Longhorn появился полностью переписанный сетевой стек на уровне TCP/IP (так называемый Next Generation TCP/IP Stack). Основные изменения в сетевом стеке сводятся к следующим новинкам: слой Dual-IP для поддержки протоколов IPv4 и IPv6, улучшенная поддержка производительности и коррекции ошибок, поддержка аппаратных конфигураций и автонастройки, богатые функции расширяемости на уровне нового программного интерфейса.

Новый стек TCP/IP показан на рис. 1.

 

Рис. 1

Три основных программных интерфейса, применяемых приложениями, сервисами и другими системными компонентами для доступа к новому стеку TCP/IP, — это WSK (Winsock Kernel), используемый клиентскими приложениями; Windows Sockets, применяемый приложениями и сервисами (программный интерфейс Windows Sockets использует драйвер AFD (Ancillary Function Driver) для выполнения функций на уровне сокетов через TCP/IP), и TDI (Transport Driver Interface), применяемый NetBIOS over TCP/IP (NetBT) и другими «устаревшими» клиентами. Для трансляции запросов между TDI и новым стеком TCP/IP используется интерфейс TDX.

Новый стек TCP/IP поддерживает программный интерфейс Callout API, который является унифицированным способом для встраивания в стек и модификации данных на уровне пакетов. Данный программный интерфейс является частью Windows Filtering Platform (WFP), обеспечивающей доступ к обработке пакетов на сетевом и транспортном уровнях. Более подробно о Windows Filtering Platform см. «Windows Filtering Platform Architecture Overview» (http://msdn2.microsoft.com/en-us/library/aa366509.aspx). Новый стек также поддерживает отсылку и получение фреймов (frames) с помощью NDIS.

Архитектура драйвера новой версии стека TCP/IP, реализованного в файле tcpip.sys, состоит из следующих уровней:

  • транспортный уровень — содержит реализации протоколов TCP и UDP, а также механизм для отсылки базовых IP-пакетов, которым не требуется наличие TCP- или UDP-заголовков;
  • сетевой уровень — содержит реализации протоколов IPv4 и IPv6 в виде уровня Dual IP layer;
  • фреймовый уровень — содержит модули для «фрейминга» пакетов IPv4 и IPv6. Существуют модули для интерфейсов IEEE 802.3 (Ethernet), IEEE 802.11 и Point-to-Point Protocol (PPP). Помимо этого существуют модули и для логических интерфейсов, таких как Loopback Interface, а также для интерфейсов туннелирования на основе IPv4, которые часто используются в технологиях поддержки переключения с IPv4 на IPv6.

Более подробно об изменениях в сетевом стеке см. раздел «The Cable Guy» на сайте Microsoft Technet (www.microsoft.com/technet/):

  • Next Generation TCP/IP Stack in Windows Vista and Windows Server Longhorn (/community/columns/cableguy/cg0905.mspx);
  • Changes to IPv6 in Windows Vista and Windows Server Longhorn (/community/columns/cableguy/cg1005.mspx);
  • Performance Enhancements in the Next Generation TCP/IP Stack (/community/columns/cableguy/cg1105.mspx);
  • раздел «Next Generation TCP/IP and Networking Components» в документе «Changes in Functionality in Windows Server Code Name Longhorn.

Boot Configuration Data

В клиентской операционной системе Microsoft Windows Vista и серверной операционной системе Microsoft Windows Server Longhorn изменился порядок загрузки операционной системы по сравнению с предыдущими версиями Windows, использующими NT Kernel. Первоначально при включении компьютера загружается либо BIOS, либо EFI (Extensible Firmware Interface), а затем — специальный раздел загрузочного диска, именуемый MBR (Master Boot Record), который содержит «код» для загрузки так называемого загрузочного сектора соответствующего раздела диска. Этот загрузочный сектор загружает остальные блоки и Windows Boot Manager (Filename:Bootmgr) — специальный компонент операционной системы, который обращается к хранилищу конфигурационных данных времени загрузки — Boot Configuration Database (этот компонент пришел на смену файлу boot.ini, применявшемуся в предыдущих версиях операционной системы) и использует информацию из этого хранилища для загрузки операционной системы. Описанный процесс загрузки операционной системы показан на рис. 2.

 

Рис. 2

Компонент Windows Boot Manager считывает конфигурационные данные (Boot Configuration Data) и отображает меню выбора операционной системы, что практически эквивалентно функциональности, которая предоставлялась в предыдущих версиях операционной системы Windows NT компонентом NTLDR. Для обеспечения единого пользовательского интерфейса на системах, применяющих EFI, в которых есть свой менеджер загрузок, Windows Boot Manager для загрузки всех операционных систем на его основе представляется единственной опцией в меню загрузки EFI — по сути, на системах, использующих EFI, Windows Boot Manager является EFI-«приложением», хранимым в системном разделе EFI (EFI System Partition).

Компонент winload.exe является базовым загрузчиком операционной системы — он вызывается Windows Boot Manager для загрузки ядра операционной системы (ntoskrnl.exe) и ряда драйверов, имеющих класс boot.

Boot Configuration Data — это база данных для хранения конфигурационных данных времени загрузки. Как мы уже отмечали, она заменяет файл boot.ini, который применялся компонентом NTLDR. Конфигурационные данные хранятся в файле, имеющем структуру, схожую с реестром (она загружается в реестр в ветвь HKLM\BCD00000000), и располагаются либо в системном разделе EFI (для компьютеров, применяющих EFI), либо в папке \Boot\Bcd на системном томе (для компьютеров, использующих BIOS). Данные могут быть изменены либо с помощью специальной пакетной утилиты (\Windows\system32\bcdedit.exe), либо непосредственно через Windows Management Instrumentation (WMI). Две команды утилиты bcdedit.exe позволяют получить информацию о составе BDC. Команда bcdedit (являющаяся эквивалентом указания следующих опций командной строки: bcdedit /enum ACTIVE) возвращает данные обо всех элементах BDC в порядке их отображения (см. листинг 1).

Для получения данных с элементами, представленными в виде GUID (поскольку хранятся в реестре), используем команду bcdedit /enum /V. (см. листинг 2).

Конфигурационные данные содержат элементы меню, отображаемые Windows Boot Manager. Элементы меню могут включать:

  • опции загрузки Windows через вызов winload.exe;
  • опции продолжения работы при выходе из режима hibernate через вызов winresume.exe;
  • опции загрузки предыдущей версии Windows NT через вызов NTLDR;
  • опции для загрузки и выполнения «кода», содержащегося в Volume Boot Record.

Конфигурационные данные могут расширяться компаниями-разработчиками для включения диагностических средств, а также средств восстановления системы после сбоев. Одним из примеров использования новых возможностей загрузки является утилита для проверки работоспособности памяти — \Boot\Memtest.exe.

Более подробно о Boot Configuration Data можно узнать из следующих сетевых ресурсов:

С помощью бесплатной утилиты Vista Boot Pro (http://www.vistabootpro.org/index.php) можно управлять информацией, хранимой в Boot Configuration Database, более наглядно (по сравнению с пакетной утилитой bcdedit.exe).

В следующем номере мы продолжим знакомство с новинками в Windows Server Longhorn и начнем рассмотрение технологий, связанных с управлением инфраструктурой и приложениями, выполняемыми на ее основе.

Листинг 1

 

Windows Boot Manager

——————————

identifier              {bootmgr}

device                  partition=C:

description             Windows Boot Manager

locale                  en-US

inherit                 {globalsettings}

default                 {current}

resumeobject            {d7e21262-743b-11db-9800-9259248b0929}

displayorder            {current}

toolsdisplayorder       {memdiag}

timeout                 30

Windows Boot Loader

—————————-

identifier              {current}

device                  partition=C:

path                    \Windows\system32\winload.exe

description             Microsoft Windows Vista

locale                  en-US

inherit                 {bootloadersettings}

osdevice                partition=C:

systemroot              \Windows

resumeobject            {d7e21262-743b-11db-9800-9259248b0929}

nx                      OptIn

Листинг 2

 

Windows Boot Manager

——————————

identifier              {9dea862c-5cdd-4e70-acc1-f32b344d4795}

device                  partition=C:

description             Windows Boot Manager

locale                  en-US

inherit                 {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}

default                 {d7e21261-743b-11db-9800-9259248b0929}

resumeobject            {d7e21262-743b-11db-9800-9259248b0929}

displayorder            {d7e21261-743b-11db-9800-9259248b0929}

toolsdisplayorder       {b2721d73-1db4-4c62-bf78-c548a880142d}

timeout                 30

Windows Boot Loader

—————————-

identifier              {d7e21261-743b-11db-9800-9259248b0929}

device                  partition=C:

path                    \Windows\system32\winload.exe

description             Microsoft Windows Vista

locale                  en-US

inherit                 {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}

osdevice                partition=C:

systemroot              \Windows

resumeobject            {d7e21262-743b-11db-9800-9259248b0929}

nx                      OptIn

В начало В начало

КомпьютерПресс 6'2007


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует