В состав ядра ос входят комплекс настроек bios

Обновлено: 05.07.2024

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

Большинство ОС состоит из следующих основных модулей: базовая система ввода-вывода (BIOS – Basic Input Output System); загрузчик операционной системы (Boot Record); ядро ОС; драйверы устройств; командный процессор; внешние команды (файлы).

Базовая система ввода-вывода (BIOS) – это набор микропрограмм, реализующих основные низкоуровневые (элементарные) операции ввода-вывода. Они хранятся в ПЗУ компьютера и записываются туда при изготовлении материнской платы. Данная система, по сути, «встроена» в компьютер и является одновременно его аппаратной частью и частью операционной системы.

Далее BIOS осуществляет вызов блока начальной загрузки операционной системы, находящейся на диске (эта операция выполняется сразу по окончании тестирования). Загрузив в ОЗУ этот блок, BIOS передает ему управление, а он в свою очередь загружает другие модули ОС.

Еще одна важная функция BIOS – обслуживание прерываний. При возникновении определенных событий (нажатие клавиши на клавиатуре, щелчок мыши, ошибка в программе и т.д.) вызывается одна из стандартных подпрограмм BIOS по обработке возникшей ситуации.

Загрузчик операционной системы – это короткая программа, находящаяся в первом секторе любого загрузочного диска (дискеты или диска с операционной системой). Функция этой программы заключается в считывании в память основных дисковых файлов ОС и передаче им дальнейшего управления ЭВМ.

Ядро ОС реализует основные высокоуровневые услуги, загружается в ОЗУ и остается в ней постоянно. В ядре ОС выделяют несколько подсистем, каждая из которых отвечает за выполнение той или иной задачи:

Модуль расширения BIOS придает гибкость операционной системе, позволяя добавлять драйверы, обслуживающие дополнительные устройства.

Драйверы требуются в тех случаях, когда обмен информацией с устройствами должен происходить иначе, чем определено в BIOS.

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

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

Важно. Эта статья написана не для опытных пользователей, которые и так в курсе как все работает, а для тех кто только начинает разбираться в принципах работы операционных систем. Хотя в общем и целом все описанное ниже верно, все же возможны упрощения для простоты понимания.

Уважаемый читатель, чтобы хорошо усвоить данный материал (если ты ставишь перед собой такую цель) пожалуйста просмотри, чтобы быстренько вспомнить, другие статьи из этой серии, а именно: абстракции и интерфейсы и система изнутри часть 1. Если же вы впервые на данном канале, то прежде чем прочитать данную статью, мы настоятельно рекомендуем прочесть те две, названия которых указанны выше.

Итак как вы уже знаете компьютер это аппарано-программный комплекс. К программному комплексу относится набор программ.

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

Ядро операционной системы это ее основа, которая состоит из очень маленьких, но очень важных программ. В чем же их важность?

А вот в чем. Эти программы являются стражами и защитниками критически важных ресурсов системы. Что это за ресурсы? А вот они:

Давайте теперь каждый из этих ресурсов коротко рассмотрим и определим в чем заключается критическая важность каждого из них.

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

Почему это важный ресурс? Представьте, что все программы будут делать запросы к процессору и ни одна из них не будет закрываться, что тогда произойдёт? Если нам будут поручать задания больше чем мы можем выполнить, что случится с нами? Мы не будем с ними со всеми справляться, а значит выполняя задания полученные первыми, мы будем пренебрегать другими наиболее важными.

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

В другом случае одна программа из-за некачественного кода может отнимать слишком много времени у процессора на обработку своих данных, настолько много, что другие программы просто не смогут обрабатываться, в том числе программы от операционной системы. И это тоже приведёт к зависанию и сбою операционной системы. Это еще одна причина почему процессорное время это критически важный ресурс. Такой метод атаки в своё время был очень популярен у хакеров, цель которых было порушить работу операционной системы. Сейчас же более выгодным стало с их точки зрения похищение и продажа персональных данных пользователей, а также похищение финансовой информации: логинов и паролей от онлайн банков.

В данном случае мы поговорим об оперативном запоминающем устройстве ( далее ОЗУ ), оно же "оперативка", оно же RAM.

Что это и для чего оно нужно? Во-первых, это более быстрая чем постоянно запоминающее устройство ( или ПЗУ, а также ROM, к нему относятся жесткие диски, флешки и тому подобное ) и поэтому более дорогая память в производстве. Во-вторых, так уж сложилось, что эта память энергозависима. То есть при отключении питания все данные оттуда пропадают.

Почему ОЗУ критически важный ресурс? Дело в том, что так как ОЗУ более быстрая память, то она работает с уже запущенными программами, чтобы увеличить скорость их отклика. Но если внутри нее будет запущено программ больше чем она сможет обработать, то и как в случае с процессором, программы ОС перестанут обрабатываться и тогда система зависнет. Но даже если этого не произойдёт, то в любом случае отклик пользовательских программ существенно сократится и они будут работать оооооочень медленно.

. И это еще не все. Так как программы выполняются в ОЗУ, то туда переносятся и данные этих программ, в том числе, те которые важны для их выполнения. И если бы не было защитных механизмов защищающих данные одной программы от данных других, то программы могли повредить друг другу (или одна программа могла получить доступ к другим )! К счастью такие механизмы существуют и реализованы они в ядре ОС.

Что это? Если сказать просто, это внешнее устройства с помощью, которых человек дает команды и получает видимый результат. К этому относится манипулятор "мышь", клавиатура.

Почему это критически важный ресурс? Ну тут в общем-то все очевидно. Если кто-то чужой захватит устройство ввода, то именно он будет отдавать команды вашему компьютеру. А если захватить устройство выводы, то будет видеть, то же что и вы глядя на свой монитор. Думается понятно к чему может привести захват устройства ввода-вывода вместе. Защита устройств ввода-вывода также реализована на уровне ядра. Но как показывает практика она не достаточна. Поэтому все же на сегодняшний день без качественных дополнительных мер защиты не обойтись.

На сегодня это все. Следующая статья из этой серии будет посвящена графическому интерфейсу и драйверам.

Операционная система - ОС (англ. operating system, OS) -- комплекс взаимосвязанных программ, предназначенных для:

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

Логическая структура ОС

операционная система в многоуровневой структуре компьютера

операционная система в многоуровневой структуре компьютера

  • Исполнение запросов программ
  • Загрузка программ в оперативную память и их выполнение
  • Стандартизованный доступ к периферийным устройствам
  • Управление оперативной памятью
  • Управление доступом к данным на различных носителях
  • Обеспечение пользовательского интерфейса
  • Сохранение информации об ошибках системы
  • Параллельное или псевдопараллельное выполнение задач (многозадачность)
  • Эффективное распределение ресурсов вычислительной системы между процессами
  • Разграничение доступа различных процессов к ресурсам
  • Организация надёжных вычислений основанная на разграничении доступа к ресурсам
  • Взаимодействие между процессами: обмен данными, взаимная синхронизация
  • Защита самой системы, а также пользовательских данных и программ от действий пользователей или приложений
  • Многопользовательский режим работы и разграничение прав доступа

Современные универсальные ОС

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

В некоторых приложениях операционные системы излишни

  • встроенные микрокомпьютеры
  • простые игровые приставки
  • бытовые приборы
  • автомобили
  • сотовые телефоны

Состав операционной системы

  • планировщик
  • драйверы устройств
  • файловая система
  • сетевая подсистема
  • Статические библиотеки (*.lib - Windows, *.a - Linux)
  • Динамические библиотеки (*.dll - Windows, *.so - Linux)

Оболочка с утилитами

  • Оболочка - интерпретатор команд ОС, обеспечивающий интерфейс для взаимодействия пользователя с функциями системы
  • Утилита - вспомогательная компьютерная программа в составе общего программного обеспечения

Режимы работы процессора

Непривилегированный ("пользовательский") режим

  • Большинство программ, как системных так и прикладных, получают доступ к оборудованию (и, при необходимости, к другим ресурсам ядра, а также ресурсам иных программ) только посредством системных вызовов

Ядро операционной системы

Ядро - центральная часть операционной системы

  • управляющая выполнением процессов
  • ресурсами вычислительной системы
  • предоставляющая процессам координированный доступ к этим ресурсам
  • процессорное время
  • память
  • устройства ввода-вывода
  • доступ к файловой системе
  • сетевое взаимодействие

Объекты ядра ОС

Типы объектов - 1

  • Процессы - совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие
  • Файлы - блок информации на внешнем запоминающем устройстве компьютера, имеющий определённое логическое представление, соответствующие ему операции чтения-записи и, как правило, фиксированное имя, позволяющее получить доступ к этому файлу и отличить его от других файлов
  • События - объект, хранящий в себе 1 бит информации "просигнализирован или нет", над которым определены операции "просигнализировать", "сбросить в непросигнализированное состояние" и "ожидать"
  • Потоки - объекты, позволяющие разделить процесс, порождённый в операционной системе, на несколько частей, выполняющихся "параллельно", то есть без предписанного порядка во времени.

Типы объектов - 2

  • Семафоры - объект, позволяющий войти в заданный участок кода не более чем n потокам
  • Мьютексы - (взаимоисключения) - это объект синхронизации, который устанавливается в особое сигнальное состояние, когда не занят каким-либо потоком
  • Каналы - средства для осуществления взаимодействия между процессами
  • Файлы, проецируемые в память - это такой способ работы с файлами, при котором файлу ставится в соответствие определённый участок памяти
  • Предшественники ОС
  • Пакетный режим
  • Разделение времени и многозадачность
  • Разделение полномочий
  • Реальный масштаб времени
  • Файловые системы

Предшественники ОС (конец 1940-х годов)

Пакетный режим (1950-е годы)

  • загрузки программы с внешних носителей данных в оперативную память до завершения предыдущей программы

Разделение времени и многозадачность

  • наличие очереди программ на исполнение
  • наличие дисплея
  • наличие клавиатурного ввода

Результат - многопользовательские системы

  • один центральный процессор
  • один блок оперативной памяти
  • множество терминалов
  • ввод данных - режим диалога
  • вычисления - пакетный режим
  • изменения программы другой программой
  • изменения самой системы прикладной программой
  • "реальный" режим работы процессора - (программе доступно всё адресное пространство компьютера)
  • "защищённый" режим (программе доступен диапазон, выделенный при запуске программы на исполнение)

Реальный масштаб времени

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

Причины возникновения - замена носителей

  • с последовательным доступом (перфокарт)
  • с произвольным доступом (на жестких дисках)
  • Файловая система - порядок, определяющий способ организации, хранения и именования данных на носителях информации в компьютерах
  • формат содержимого
  • способ физического хранения информации
  • размер имени файла
  • максимальный возможный размер файла
  • набор атрибутов файла
  • по назначению
  • по уровню специализации
  • по размеру
  • по совместимости

Классификация производителей компьютеров

  • Персональные компьютеры
    • настольные - Windows, Linux, Mac OS
    • переносные - Windows, Mac OS, Linux
    • наладонные - Linux, Mac OS, Windows

    DOS - Дисковая операционная система

    • однозадачная операционная система
    • 8 / 16 / 32 - битная операционная система
    • работает в реальном режиме
    • используются функции, предоставляемые ОС
    • исплоьзуются функции, предоставляемые BIOS
    • работает с утройствами напрямую
    • имеет консольную систему ввода/вывода
    • поддерживает три стандартных потока: stdin, stdout и stderr

    Основные варианты DOS

    Name Firm Year Proc Bit Lic SRC
    MSDOS Microsoft 1981 x386 16 CL CS
    PCDOS IBM 1981 x386 16 CL CS
    DR DOS Digital Res. 1983 x386 16 CL CS
    OpenDOS Caldera 1997 x386 16/32 OL OS
    FreeDOS GNU 1994 x386 16/32 GP OS
    PTS-DOS Физтех-софт 1991 x386 32 CL CS
    ROM-DOS Datalight 1989 x386 16 CL CS
    AppleDOS Apple Computer 1978 MP6502 16 CL CS
    Atari DOS Atari 1985 Atari400 8/16 CL CS
    TR-DOS Technology Res. 1984 ZX 8 CL CS

    Основные части DOS

    BIOS (Basic Input/Output System)

    Находится в ПЗУ

    • рассматривается как часть аппаратных средств ПК
    • рассматривается как часть программног ообеспечания, входящую в состав ОС
    • Универальные услуги ввода-вывода
    • Тестирование функционирования компьютера
    • Проверка работы памяти и устройств компьютера при его включении
    • Вызов загрузчика операционной системы
    • системное ПО, обеспечивающее загрузку ОС непосредственно после включения компьютера
    • обеспечивает средства для диалога с пользователем
    • проводит инициализацию аппаратуры компьютера
    • загружает ядро ОС в ОЗУ
    • формирует параметры, передавемые ядру ОС
    • передает управление ядру ОС

    IO.SYS - системный файл

    • драйверы устройств
    • код первичной настройки DOS

    MSDOS.SYS - системный файл

    • часть кода ядра ОС, реализующую интерфейсы к системе
    • Break = ON
    • Files = 32
    • Buffers = 16
    • Device = C:\MOUSE\mouse.sys
    • Device = C:\RUS\keyrus.sys
    • @echo off
    • PATH C:\DOS;C:\NC;C:\AVIRUS
    • SET TMP = C:\TMP
    • C:\NC\nc.exe

    Основные внутренние команды DOS

    • b: - переход на дисковод b:
    • dir - вывода оглавления каталога
    • cd имя каталога - смена текущего каталога
    • cd.. - переход из подкаталога в каталог
    • md имя каталога - создание каталога
    • rd имя каталога - удаление пустого каталога
    • type имя файла - вывод содержимого текстового файла на экран
    • cls - очистка экрана монитора
    • copy имя файла1 имя файла2 - копирование одного файла в другой файл
    • ren имя файла новое имя файла - переименование файла
    • del имя файла - удаление файла
    • Создание текстового файла: copy con: имя файла, Enter, ввести построчно текст, в конце каждой строки Enter, затем в конце Ctrl+Z и Enter.
    • ver - вывод версии DOS
    • date - ввод текущей даты
    • time - ввод текущего времени

    Основные внешние команды DOS

    Внешние команды DOS выполняют вспомогательные программы (утилиты), расположенные в каталоге DOS на диске С:

    Windows – одна из наиболее многогранных и гибких ОС, она работает на совершенно разных архитектурах и доступна в разных вариантах. На сегодня она поддерживает архитектуры x86, x64, ARM и ARM64. Windows в своё время поддерживала Itanium, PowerPC, DEC Alpha и MIPS. Кроме того, Windows поддерживает целый набор SKU, работающих в различных условиях; от дата-центров, ноутбуков, Xbox и телефонов до встраиваемых версий для интернета вещей, например, в банкоматах.

    Самый удивительный аспект состоит в том, что ядро Windows практически не меняется в зависимости от всех этих архитектур и SKU. Ядро динамически масштабируется в зависимости от архитектуры и процессора, на котором оно работает, так, чтобы пользоваться всеми возможностями оборудования. Конечно, в ядре присутствует определённое количество кода, связанного с конкретной архитектурой, однако его там минимальное количество, что позволяет Windows запускаться на разнообразных архитектурах.

    В этой статье я расскажу об эволюции ключевых частей ядра Windows, которые позволяют ему прозрачно масштабироваться от чипа NVidia Tegra низкого потребления, работающего на Surface RT 2012 года, до гигантских монстров, работающих в дата-центрах Azure.

    Менеджер задач Windows, работающий на пререлизной машине класса Windows DataCenter, с 896 ядрами, поддерживающими 1792 логических процессора и 2 Тб памяти

    Эволюция единого ядра

    Перед тем, как обсудить детали ядра Windows, сделаем небольшое отступление в сторону рефакторинга. Рефакторинг играет ключевую роль в увеличении случаев повторного использования компонентов ОС на различных SKU и платформах (к примеру, клиент, сервер и телефон). Базовая идея рефакторинга – позволить повторно использовать одни и тем же DLL на разных SKU, поддерживая небольшие модификации, сделанные специально под нужный SKU, не переименовывая DLL и не ломая работу приложений.

    Базовая технология рефакторинга Windows – мало документированная технология под названием "наборы API". Наборы API – это механизм, позволяющий ОС разъединять DLL и место их применения. К примеру, набор API позволяет приложениям для win32 продолжать пользоваться kernel32.dll, притом, что реализация всех API прописана в другой DLL. Эти DLL с реализацией также могут отличаться у разных SKU. Посмотреть наборы API в деле можно, запустив обход зависимостей на традиционной Windows DLL, например, kernel32.dll.

    Закончив это отступление по поводу строения Windows, позволяющего системе максимизировать повторное и совместное использование кода, перейдём к техническим глубинам запуска ядра по планировщику, являющегося ключом к масштабированию ОС.

    Компоненты ядра

    Windows NT – это, по сути, микроядро, в том смысле, что у него есть своё core Kernel (KE) с ограниченным набором функций, использующее исполняемый уровень (Executive layer, Ex) для выполнения всех политик высокого уровня. EX всё ещё является режимом ядра, так что это не совсем микроядро. Ядро отвечает за диспетчеризацию потоков, синхронизацию между процессорами, обработку исключений аппаратного уровня и реализацию низкоуровневых функций, зависящих от железа. Слой EX содержит различные подсистемы, обеспечивающие набор функциональности, который обычно считается ядром – IO, Object Manager, Memory Manager, Process Subsystem, и т.д.

    Чтобы лучше представить себе размер компонентов, вот примерное разбиение по количеству строк кода в нескольких ключевых каталогах дерева исходников ядра (включая комментарии). В таблицу не вошло ещё много всего, относящегося к ядру.

    Подсистемы ядра Строк кода
    Memory Manager 501, 000
    Registry 211,000
    Power 238,000
    Executive 157,000
    Security 135,000
    Kernel 339,000
    Process sub-system 116,000

    Более подробная информация об архитектуре Windows содержится в серии книг “Windows Internals”.

    Планировщик

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

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

    У планировщика Windows изначально была одна очередь готовности, из которой он выбирал следующий, наивысший по приоритету поток для запуска. Однако с началом поддержки всё большего количества процессоров, единственная очередь превратилась в узкое место, и примерно в районе выхода Windows Server 2003 планировщик поменял работу и организовал по одной очереди готовности на процессор. При переходе на поддержку нескольких запросов на один процессор единую глобальную блокировку, защищающую все очереди, делать не стали, и разрешили планировщику принимать решения на основе локальных оптимумов. Это означает, что в любой момент в системе работает один поток с наивысшим приоритетом, но не обязательно означает, что N самых приоритетных потоков в списке (где N – число процессоров) работают в системе. Такой подход оправдывал себя, пока Windows не начала переходить на CPU с низким энергопотреблением, например, на ноутбуки и планшеты. Когда на таких системах поток с наивысшим приоритетам не работал (например, поток переднего плана интерфейса пользователя), это приводило к заметным глюкам интерфейса. Поэтому в Windows 8.1 планировщик перевели на гибридную модель, с очередями для каждого процессора для потоков, связанных с этим процессором, и разделяемой очередью готовых процессов для всех процессоров. Это не сказалось на быстродействии заметным образом благодаря другим изменениям в архитектуре планировщика, например, рефакторингу блокировки базы данных диспетчера.

    В Windows 7 ввели такую вещь, как динамический планировщик со справедливыми долями (Dynamic Fair Share Scheduler, DFSS); это в первую очередь касалось терминальных серверов. Эта особенность пыталась решить проблему, связанную с тем, что одна терминальная сессия с высокой загрузкой CPU могла повлиять на потоки в других терминальных сессиях. Поскольку планировщик не учитывал сессии и просто использовал приоритет для распределения потоков, пользователи в разных сессиях могли повлиять на работу пользователей в других сессиях, задушивая их потоки. Также это давало несправедливое преимущество сессиям (и пользователям) с большим количеством потоков, поскольку у сессии с большим количеством потоков было больше возможностей получить процессорное время. Была сделана попытка добавить в планировщик правило, по которому каждую сессию рассматривали на равных с другими по количеству процессорного времени. Подобная функциональность есть и в ОС Linux с их абсолютно честным планировщиком (Completely Fair Scheduler). В Windows 8 эту концепцию обобщили в виде группы планировщика и добавили в планировщик, в результате чего каждая сессия попадала в независимую группу. Кроме приоритетов для потоков, планировщик использует группы планировщика как индекс второго уровня, принимая решение по поводу того, какой поток запускать следующим. В терминальном сервере все группы планировщика имеют одинаковый вес, поэтому все сессии получают одинаковое количество процессорного времени вне зависимости от количества или приоритетов потоков внутри групп планировщика. Кроме того, такие группы также используют для более точного контроля над процессами. В Windows 8 рабочие объекты (Job) были дополнены так, чтобы поддерживать управление процессорным временем. При помощи специального API можно решать, какую часть процессорного времени может использовать процесс, должно это быть мягкое или жёсткое ограничение, и получать уведомления, когда процесс достигает этих ограничений. Это похоже на управление ресурсами в cgroups на Linux.

    Начиная с Windows 7, в Windows Server появилась поддержка более 64 логических процессоров на одном компьютере. Чтобы добавить поддержку такому большому количеству процессоров, в системе ввели новую категорию, «процессорная группа». Группа – неизменный набор логических процессоров количеством не более 64 штук, которые рассматриваются планировщиком как вычислительная единица. Ядро при загрузке определяет, какой процессор к какой группе отнести, и у машин с количеством процессорных ядер менее 64 этот подход практически невозможно заметить. Один процесс может разделяться на несколько групп (например, экземпляр SQL-сервера), единственный поток в один момент времени может выполняться только в рамках одной группы.

    Но на машинах, где число ядер CPU превышает 64, Windows начала демонстрировать новые узкие места, не дававшие таким требовательным приложениям, как SQL-сервер, масштабироваться линейно с ростом количества ядер процессора. Поэтому, даже при добавлении новых ядер и памяти, замеры скорости не показывали её существенного увеличения. Одной из главных проблем, связанных с этим, был спор по поводу блокировки базы диспетчера. Блокировка базы диспетчера защищала доступ к объектам, работу которых необходимо было запланировать. Среди этих объектов – потоки, таймеры, порты ввода/вывода, другие объекты ядра, подверженные ожиданию (события, семафоры, мьютексы). Под давлением необходимости разрешения таких проблем, в Windows 7 была проделана работа по устранению блокировки базы диспетчера и замене её на более точные подстройки, например, пообъектную блокировку. Это позволило таким замерам производительности, как SQL TPC-C, продемонстрировать рост скорости на 290% по сравнению с предыдущей схемой на некоторых конфигурациях. Это был один из крупнейших взлётов производительности в истории Windows, случившихся благодаря изменению единственной особенности.

    Windows 10 принесло другую инновацию, внедрив наборы процессоров (CPU Sets). CPU Sets позволяют процессу разделять систему так, что процесс может распределиться на несколько групп процессоров, не позволяя другим процессам пользоваться ими. Ядро Windows даже не даёт прерываниям устройств пользоваться процессорами, входящими в ваш набор. Это гарантирует, что даже устройства не смогут исполнять свой код на процессорах, выданных группе вашего приложения. Это похоже на низкотехнологичную виртуальную машину. Понятно, что это мощная возможность, поэтому в неё встроено множество мер безопасности, чтобы разработчик приложения не допустил больших ошибок, работая с API. Функциональность наборов CPU используется в игровом режиме (Game Mode).

    Наконец, мы приходим к поддержке ARM64, появившейся у Windows 10. Архитектура ARM поддерживает архитектуру big.LITTLE, гетерогенную по своей природе – «большое» ядро работает быстро и потребляет много энергии, а «малое» ядро работает медленно и потребляет меньше. Идея в том, что малозначительные задачи можно выполнять на малом ядре, экономя таким образом батарею. Для поддержки архитектуры big.LITTLE и увеличения времени работы от батареи при работе Windows 10 на ARM, в планировщик добавили поддержку гетерогенной планировки, учитывающую пожелания приложения, работающего с архитектурой big.LITTLE.

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

    Работа от чужого имени [Work on Behalf]: в Windows довольно много работы на переднем плане осуществляется другими сервисами, работающими в фоне. К примеру, при поиске в Outlook сам поиск проводится фоновым сервисом Indexer. Если мы просто запустим все сервисы на малом ядре, пострадает качество и скорость работы приложений на переднем плане. Чтобы при таких сценариях работы она не замедлялась на архитектурах big.LITTLE, Windows отслеживает вызовы приложения, поступающие к другим процессам, чтобы выполнять работу от их имени. В таком случае мы выдаём приоритет переднего плана потоку, относящемуся к сервису, и заставляем его выполняться на большом ядре.

    На этом позвольте закончить первую статью о ядре Windows, дающую обзор работы планировщика. Статьи со сходными техническими подробностями о внутренней работе ОС последуют позже.

    Читайте также: