Что пользователям следует знать о ядре системы windows

Linux в Windows

Корпорация Microsoft сообщила о разработке собственной модификации полноценного ядра Linux, который она интегрирует в состав ОС Windows 10. За все время существования OC семейства Windows это первый подобный случай – Microsoft создала прецедент, о чем сообщила в своем официальном блоге.

Сама Windows 10 по-прежнему будет базироваться на собственном ядре, тогда как ядро Linux станет частью WSL 2.0 – подсистемы Windows Subsystem for Linux второго поколения. Точные сроки интеграции Linux Kernel в Windows 10 софтверный гигант не раскрывает, но в тестовых сборках оконной ОС, доступных для участников программы Windows Insider, его появление ожидается уже в июне 2019 г.

Технические особенности

Подсистема Windows Subsystem for Linux второго поколения базируется на ядре Linux Kernel версии 4.19 с долгосрочной поддержкой (LTS – Long Term Support). Эту же версию Microsoft использует в облачных сервисах Azure, а самая актуальная версия ядра по состоянию на 8 мая 2019 г. – это версия 5.1 (без LTS), вышедшая 5 мая 2019 г.

По заявлениям Microsoft, ядро останется полностью открытым, а информацию обо всех изменениях, которые уже внесены в него и которые будут добавлены в будущем, софтверный гигант предоставит сообществу девелоперов Linux. Все необходимые данные Microsoft разместит на сервисе GitHub, приобретенном им в 2018 г. По мере выхода исправлений для Linux 4.19 Microsoft будет оперативно внедрять их в собственную версию ядра, а сразу после релиза следующей версии Linux Kernel с долгосрочной поддержкой она будет интегрирована в состав WSL 2.0.

Глава Microsoft рассказывает о возможностях WSL 2.0

Несмотря на переход к использованию полноценного Linux-ядра, WSL 2.0 по-прежнему не включает бинарные файлы пользовательского пространства. Данное решение дает пользователям возможность самостоятельно выбирать необходимый им дистрибутив, причем загружать его можно будет из любых источников, а не только из Microsoft Store.

Как включить все ядра на компьютере — миф или реальность?

Сегодня существуют компьютеры, вычислительной мощностью которых уже мало кого удивишь. 4-х или 6-ти ядерные ПК и ноутбуки не удивляют людей, но находятся и новички в этой области, которым все интересно и хочется узнать, как можно больше информации. Сегодня мы разберем интересный вопрос: как включить все ядра на компьютере с Windows 10 для увеличения его производительности.

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

Руководство к ЦП

Если у вас есть документы к компьютеру, то сведения о ядрах можно посмотреть там, в разделе о ЦП. Тоже самое можно сделать и в интернете, вбив модель своего процессора, и посмотреть все необходимые характеристики.

Сведения о ЦП можно посмотреть, если перейти в соответствующее меню. Для этого нажимаем правой кнопкой мыши по меню Пуск, выбираем «Система», смотрим на блок «Система». Но там показывается только модель процессора, остальное придется искать где-то еще.

Средства Windows 10

Откроем диспетчер устройств. Это можно сделать, если ввести в поле поиска «диспетчер устройств».

Находим вкладку «Процессоры» и раскрываем ее. Сколько там пунктов находится, столько и ядер на вашем процессоре.

Специальные утилиты

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

CPU-Z

Полезная и бесплатная программа CPU-Z отображает множество характеристик компьютера, а точнее, его компонентов. Она легка и не требовательна.

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

AIDA64

Эту программу я упоминал уже не раз в своих статьях. Она содержит полный комплект информации о всех компонентах компьютера.

Скачайте программу, запустите, потом переходите во вкладку «Системная плата», далее «ЦП». Блок «Multi CPU» отображает нам количество ядер.

В той же самой программе можно перейти во вкладку «Компьютер», потом «Суммарная информация» в блоке «Системная плата» нажимаем на названии процессора, где строка «Типа ЦП».

Сколько ядер используется процессором

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

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

Как включить все ядра компьютера или ноутбука

Никак. Ядра на всех современных компьютерах всегда работают без ограничений. Зачем разработчикам ограничивать работу процессора и памяти, особенно при запуске Windows.

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

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

Включить все ядра с помощью Windows

Здесь все просто, следуем вот этой инструкции:

  • Нажмите Win+R и введите в окне msconfig
  • Перейдите во вкладку «Загрузка», потом перейдите в «Дополнительные параметры».
  • Ставим галочку на «Число процессоров» и «Максимум памяти», остальные галочки снимаем.
  • В пункте «Максимум памяти» указываем максимальное значение.

После того, как все сделаете, сохраните изменения и перезагрузите компьютер.

Включить все ядра с помощью BIOS

Тут все немного сложнее. В BIOS стоит лезть только в случае нестабильной работы компьютера. Если глюков и тормозов не замечается, то все нормально и ядра обычно включены автоматически.

  • Если решили попробовать включить ядра через BIOS, то вам нужно перейти в раздел Advanced Clock Calibration и установите значение «All Cores», либо «Auto».
  • Сложность тут заключается в том, что в разных версия материнских плат и ноутбуках разделы в BIOS называются по-разному, сказать куда точно заходить не могу.
  • Таким образом, мы разобрали, как посмотреть ядра процессора, как задействовать все ядра для сокращения времени загрузки компьютера и бесполезность этого действа.))

Задаем IDT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

structIDT_entry{

unsignedshortintoffset_lowerbits;

unsignedshortintselector;

unsignedcharzero;

unsignedchartype_attr;

unsignedshortintoffset_higherbits;

};

structIDT_entry IDTIDT_SIZE;

voididt_init(void)

{

unsignedlongkeyboard_address;

unsignedlongidt_address;

unsignedlongidt_ptr2;

keyboard_address=(unsignedlong)keyboard_handler;

IDT0x21.offset_lowerbits=keyboard_address& 0xffff;

IDT0x21.selector=0x08;/* KERNEL_CODE_SEGMENT_OFFSET */

IDT0x21.zero=;

IDT0x21.type_attr=0x8e;/* INTERRUPT_GATE */

IDT0x21.offset_higherbits=(keyboard_address& 0xffff0000) >> 16;

write_port(0x20,0x11);

write_port(0xA0,0x11);

write_port(0x21,0x20);

write_port(0xA1,0x28);

write_port(0x21,0x00);

write_port(0xA1,0x00);

write_port(0x21,0x01);

write_port(0xA1,0x01);

write_port(0x21,0xff);

write_port(0xA1,0xff);

idt_address=(unsignedlong)IDT;

idt_ptr=(sizeof(structIDT_entry)*IDT_SIZE)+((idt_address& 0xffff) << 16);

idt_ptr1=idt_address>>16;

load_idt(idt_ptr);

}

KeServiceDescriptorTable – ключ ко всей системе

Ну, или почти ко всей системе. Первое, что сделает порядочный антивирус и файрвол, чтобы надавать по рукам мегакулхацкерам – установит свои перехватчики на KeServiceDescriptorTable – в ней содержатся адреса системных сервисов, таких как, например NtCreateFile, NtCreateProcess, NtCreateThread и т.д. Для чего это делается, я думаю, понятно – чтобы иметь возможность отслеживать вызовы потенциально опасных для стабильности ОС системных сервисов (работы с виртуальной памятью, реестром, привилегиями и тому подобными штуками). Как правило, такие функции перехватываются всеми аверами подряд, поэтому можно не сомневаться – если на машине стоит хоть что-нибудь антивирусное, будь уверен – в KeServiceDescriptorTable найдется пара-тройка, если не десяток перехватов системных сервисов. Их количество варьируется от одного (F-Secure, например, перехватывает только NtLoadDriver) до «до хрена и больше» (в случае с COMODO Internet Security или Outpost). Все это, естественно, не радует глаз начинающего системного прогера. К примеру, Kaspersky AV вообще грузит (грузил?) свою SSDT, благодаря чему все системные вызовы так или иначе проходят через его адресное пространство.

Не сильно от KeServiceDescriptorTable отличается теневая таблица KeServiceDescriptorTableShadow. Ее второй элемент содержит таблицу win32k.sys, драйвера, на котором в свою очередь держится вся графическая подсистема Windows. Win32k.sys содержит два типа сервисов: сервисы NtUser* и NtGdi*, первые отвечают за оконную подсистему, вторые за графику. Несмотря на неприглядное название и недокументированность, использование сервисов Win32k довольно популярно в андеграундной хакерской среде: посмотри на те сервисы, которые перехватывают аверы в KeServiceDescriptorTableShadow — NtUserFindWindowEx, NtUserQueryWindow, NtUserGetForegroundWindow – все они отвечают за работу с windows-окнами.

Для начала получим указатель на KeServiceDescriptorTable. Чтобы это сделать, просто добавь в свой код такую строку: extern PVOID KeServiceDescriptorTable. Получить адрес KeServiceDescriptorTableShadow немного сложнее, она не экспортируется, код для ее получения ты можешь найти на диске.

Итак, что же делать? Как убрать установленные хуки? Самый дешевый и сердитый способ – просто восстановить SSDT и выполнить свой код, а там – хоть трава не расти. Сделать это, несмотря на сложное название, довольно просто. Сначала мы через вызовы ZwOpenFile/ZwCreateSection/ZwMapViewOfSection найдем и промаппим в свою виртуальную память образ ядра ntoskernl.exe (ntkrnlpa.exe для многоядерных систем). Далее находим в полученной проекции ядра указатель на KeServiceDescriptorTable, после чего в цикле восстанавливаем адреса оригинальных обработчиков.

Находим адрес KiServiceTable

Минусы такого способа, я думаю, очевидны – практически все аверы и проактивки следят за состоянием своих хуков, установленных в SSDT и, обнаружив их отсутствие, тут же их восстановят. К тому же нельзя игнорировать тот факт, что все порядочные аверы перехватывают NtCreateSection и NtMapViewOfSection, без которых при проецировании ядра не обойтись. Что делать в этом случае, ты узнаешь ближе к концу статьи.

Код, реализующий восстановление SSDT и ShadowSSDT, ты можешь найти на диске.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector