image

Меня зовут Андрей Артемьев, я работаю в Microsoft над ядром ОС Windows 10, ранее я работал над Windows 10x (WCOS), XBox, Windows Phone и Microsoft Edge. Я хочу популярно в образовательных целях рассказать о том как работает компьютер на примере клавиатурного ввода и Windows 10. Данный цикл статей рассчитан в первую очередь на студентов технических специальностей. Мы рассмотрим какой путь проходит информация о нажатой клавише от клавиатуры до отображения в Notepad.exe. В виду обширности и междисциплинарности темы в статьях могут быть неточности, о которых сообщайте в комментариях. Какая-то информация может быть устаревшей в виду скорости с которой развивается Windows.

Насколько глубоко мы погрузимся в тему?


Давайте для начала в общих чертах поговорим об уровнях на которых можно рассматривать компьютер. Каждый уровень основывается на предыдущем. Начнём с самого верха.

Уровень прикладных программ. Здесь находятся все пользовательские приложения, это браузер, Microsoft Office, блокнот, а также веб-сервер IIS, SQL Server, различное middleware вроде Java и .Net и все скриптовые языки, будь то Ruby, PHP или Bat-файлы.

Уровень операционной системы. ОС можно рассматривать как:

  • Менеджер ресурсов — память, жёсткие диски, принтеры, экран, клавиатура ограниченные ресурсы которые совместно используются запущенными на компьютере программами.
  • Виртуальная машина — файл это наглядный пример виртуального объекта. Он представляет абстракцию данных на диске, API для работы с ним и так же добавляет концепцию прав доступа. Вместо файла могла быть концепция контейнера данных и совершенно другого API. Таких виртуальных объектов в ОС много.
  • Платформа — ОС предоставляет программные модели и примитивы для построения программ. К примеру Windows Drivers Framework позволяет быстро разрабатывать драйвера, окна в Windows используются для построения сложных пользовательских интерфейсов. Dll — предоставляет модель расширения функционала программы через плагины, а так же механизм для реализации читалки экрана через ловушки клавиатуры (см. LowLevelKeyboard hook).
Операционная система разбита на слои и компоненты. В общем виде архитектура Windows 10 выглядит так. О ней мы поговорим подробно чуть позже.

image

Уровень архитектуры компьютера. Он представлен материнской платой, которая имеет определённый форм-фактор, встроенные функции закодированные в микроконтроллерах называемых чип-сетом и порты, через которые можно расширять функционал компьютера подключив графическую карту, сетевую карту, дополнительную оперативную память (RAM), жёсткие диски, клавиатуру и пр. Порты влияют на скорость работы и возможности компьютера, что и будет определять его назначение будь то сервер для обработки тысяч запросов в секунду, планшет для пользования Интернетом или игровой ПК с несколькими видеокартами. ОС абстрагирует особенности материнской платы.

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

image


Материнскую плату можно рассматривать как колонию микроконтроллеров которые общаются между собой через шины и через них циркулируют данные от подключенных устройств к процессору и обратно. Чип-сет — это своего рода нервная система компьютера. Все чипы на материнской плате были изначально созданы чтобы работать друг с другом. Некоторые из них могут иметь особые функции, к примеру таймер или хранение настроек BIOS. Пожалуй самый важный из них тот что имеет встроенную программу (прошивку, BIOS, UEFI) которая начинает выполняться как только появляется электричество. Она находит жёсткий диск с загрузчиком Windows и передаёт тому управление который в свою очередь запускает исполняемый файл ОС, который можно назвать Windows10.exe, на самом деле NtOsKrnl.exe. BIOS знает что искать благодаря соглашению между производителями железа и операционных систем.

Вокруг материнской платы можно собрать мобильный телефон, игровую приставку, серверную станцию или умное устройство. На картинке ниже распространённые форм-факторы материнских плат.

image

Уровень микроархитектуры представлен процессором (CPU), это сердце материнки и весь чип-сет нужен для обслуживания CPU. Процессор это компьютер в компьютере, более мощный и продвинутый микроконтроллер которому не нужна прошивка, потому как поток команд подаётся на лету, когда планировщик потоков поменял контекст процессора. Функционал процессора делится на подсистемы, к примеру компонент занимающийся математическими и логическими операциями, математический сопроцессор, кэш. Какие-то из них раньше были отдельным чипом на материнской плате, но сейчас их сделали частью ЦПУ, например контроллер прерывания и микроконтроллер под названием “Северный мост” что увеличило скорость работы.

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

image image

Архитектура процессора это по сути документ который описывает какой функциональностью он должен обладать для того чтобы соответствовать к примеру архитектуре x86, x64 или ARM применяемой на мобильных устройствах. В этом документе описано какие должны поддерживаться команды, назначения регистров и логика работы. Создатели процессоров Intel, AMD, Эльбрус могут реализовывать эту функциональность как угодно и добавлять к ней новые возможности в виде команд, регистров, флагов, прерываний и если ОС знает о них то может использовать. В терминах ООП архитектура ЦПУ — это интерфейс, а микроархитектура — его реализация.

Логические схемы. Цветные прямоугольники с блок-схемы CPU состоят из логических схем, которые производят свои операции на последовательностях нулей и единиц. Процессор видит все данные и команды в виде битов (0 и 1), по формуле любое десятичное число можно представить в виде последовательности 0 и 1, а вот что значит конкретное число зависит от контекста. Это может быть код, цифра, буква. Арифметическое и логическое устройство (ALU) умеет производить сложение двух чисел через побитовые операции. Побитовые алгоритмы сложения, вычитания, умножения и деления давно известны, разработчикам логической схемы их только надо эффективно реализовать.

image

Цифровые схемы работают с данными на уровне нулей и единиц, а аналоговые полагаются на эксплуатирование законов физики. Они выполняют простейшие манипуляции над битами, такие как сдвиги, AND, OR, XOR. Через эти примитивы реализуются более сложные операции. На картинке ниже представлен аналоговый оператор AND реализованный через транзисторы. На выходе схемы ненулевое напряжение будет только если оно есть на обоих входных контактах (Вх1 и Вх2), иначе ноль вольт. Точно так же работает оператор && в C#. Цифровые схемы в конечном счёте основаны на аналоговых. Физически логические элементы в логических схемах могут быть реализованы не только электронными но и механическими, гидравлическими, оптическими и другими способами.

image

Уровень радиоэлементов. Физически аналоговые схемы полагаются на радиоэлементы, которые собственно и эксплуатируют законы физики. Преимущественно это полупроводники, т.е. в определённых условиях они могут проводить электричество, а могут и нет. Диод проводит ток только в одном направлении, если его выпаять, развернуть на 180 и впаять обратно, то ток через него проходить не будет. Транзистор пропускает ток только если есть напряжение на управляющей ножке. Человечество научилось делать транзисторы микроскопическими и потому их можно размещать на маленькой плате миллионами. На картинках ниже полупроводниковые радиоэлементы и обычный транзистор рядом с нано транзистором под электронным микроскопом.
image

image
Уровень законов физики. И наконец самый нижний уровень — это уровень законов физики которые заключены в полупроводниковые радиоэлементы.

image

Мы будем много говорить про уровень ОС и чуть меньше про архитектуру компьютера, микроархитектуру, аналоговые схемы и радиоэлементы. К последней части у вас должно быть понимание как это всё работает вместе.

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


Когда мы проходили в универе программирование на ассемблере у многих студентов был ступор от таких умных слов как “режимы ядра и пользователя”, под которыми на самом деле скрывается хорошо всем известная ролевая система аутентификации, на всех сайтах есть как минимум “Админ” имеющий доступ ко всем страницам и “Пользователь” имеющий ограниченный доступ. Точно так же роль “Ядро” имеет доступ ко всем возможностям CPU, а роль “Пользователь” может вызывать не все команды процессора и не со всеми аргументами. Поверх этой ролевой модели по принципу клиент-серверной архитектуры построена операционная система, где сервер это ядро, которое и реализовывает функционал ОС, а клиент — это пользовательские программы. В мире Web клиент и сервер разделены физически — это два разных компьютера общающихся по сети. В ОС клиент и сервер живут на одной машине и на одном железе. У сервера есть некий API который позволяет клиентам изменять его состояние, к примеру Twitter API позволяет создавать посты, логиниться и загружать ленту твитов в мобильный клиент. У Windows есть Win API, только более громоздкий в виду более широкого круга задач, на сегодняшний день у винды примерно 330 000 API плюс API для UWP apps. Если концепции Твитера более менее всем понятны — пост, пользователь, фид — то концепции ОС могут потребовать некоторого углубления в её внутренности. Поэтому API Windows могут быть трудно понятными без понимания внутреннего устройства ОС.

На самом деле под ядром понимают три разные вещи. Ядро как весь код ОС. Ядро как подсистема которая отвечает за механизмы ОС, такие как планировщик потоков, переключение контекста, обработка прерываний, свап виртуальный памяти на физическую (Kernel) и ядро подсистемы для поддержки других ОС — CSRSS.exe (Windows), PSXSS.exe (POSIX), OS2SS.exe (OS/2) или WSL (Windows SubSystem for Linux). В данном контексте понимается первый смысл — весь код ОС.

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

  • Executive — здесь логика работы ОС. В этом слое проверяется что могут и не могут делать процессы. Здесь хранится инфа о родительском процессе, параметры старта процесса (Process Environment Block), привязанный аккаунт пользователя, имя exe файла процесса.
  • Kernel — здесь реализованы механизмы ОС, такие как планировщик потоков. Здесь хранится сколько времени процесс проводит в режиме пользователя и ядра, к каким процессорам привязаны его потоки, базовый приоритет потоков процесса.
  • Windowing subsystem — инфа о GDI объектах которые используются для рисования в окне. Это такие примитивы как кисти, pen и пр.
  • DirectX — всё что имеет отношение к DirectX: шейдеры, поверхности, DX-объекты, счётчики производительности GPU, настройки памяти графической памяти.
  • Подсистема Windows которая представлена процессом CSRSS.exe (Client Server Runtime SubSystem). Windows ранее поддерживал ОС POSIX (процесс PSXSS.exe) и OS/2 (OS2SS.exe). В те времена возникла идея сделать и Windows такой же подсистемой, но эта было медленно и поэтому скоро часть CSRSS.exe перенесли в win32k.sys, который сейчас разбит на несколько файлов — win32k.sys, win32kbase.sys и win32kfull.sys. Здесь хранится информация о Process Group Data, Shutdown level, Session Data и пр.

Поддержка POSIX и OS/2 скорее была формальной, потому как для переноса программы с этих ОС нужно было найти исходный код и перекомпилировать его специальным образом чтобы получился exe-файл в котором все вызовы к API ОС перенаправлялись в PSXdll.dll (NETAPI.DLL и DOSCALLS.DLL для OS/2 и User32.dll для Windows приложений), которая была тонкой обёрткой над API Windows. Состояние некоторых API хранилось в процессе подсистемы PSXSS.exe (OS2SS.exe). Поскольку не все API можно сопоставить 1 к 1, то работала такая программа нестабильно. В Windows 10 была добавлена поддержка Linux и она работает совсем по-другому. Подсистема Linux хостится в режиме ядра и разница между Windows Subsystem for Linux и Linux примерно как между разными билдами. Специально для WSL был введён новый тип процессов — PICO-process.

Что такое компонент? Это логически сгруппированный функционал. Компонентом можно назвать ООП-класс, dll, папку, набор функций с общим префиксом, пространство имён, слой в архитектуре.

Более подробно о разделении на клиент-сервер


Разделение на клиент и сервер реализовано при помощи встроенной функциональности CPU, разделения памяти и программных проверок.

Производители оборудования сотрудничают с разработчиками ОС, поэтому в процессоре есть механизмы созданные с учётом потребностей создателей операционных систем. Во всех современных процессорах реализован механизм ролей пользователя, где под пользователем понимается исполняемый в данный момент код. В веб приложениях роль залогиненого пользователя хранится в какой-то переменной и помимо понятного названия Admin или User имеет Id этой роли который чаще и используется при авторизации, потому как сравнивать числа быстрее и проще чем строки. В процессоре роль текущего пользователя хранится в поле которое называется “кольцо безопасности” (Security Ring), а не “CurrentUser.Role.Id”. В большинстве процессоров это поле принимает четыре значения от 0 до 3. Windows использует 0 для роли которая называется “Режим Ядра”, потому как это самый привилегированный режим и самое большое значение для роли “Режим Пользователя”, потому как это самая ограниченная роль. Остальные роли не используются потому как различие между 0 и 1, 2 и 3 незначительное. Эти роли ограничивают страницы памяти которые могут быть адресованы, нельзя вызывать некоторые инструкции или же нельзя их вызывать с определёнными аргументами. Так же есть ограничения на использование технологии I/O Ports для обмена данными с устройствами такими как клавиатура, но она уже лет 10 не используется. Переключение в режим ядра происходит через команду syscall, которая по индексу находит в массиве указателей на APIs Windows функцию которую надо вызвать. Указатель на этот массив сохраняется в специальном регистре процессора во время загрузки ОС.

Я специально назвал регистр ЦПУ полем. Когда вы пишете программу на C#, то можете добавлять сколько угодно полей в свой класс и давать им понятные названия. У процессоров и микроконтроллеров поля называются регистрами. Когда вы проектируете железку то нужно уже на этом этапе понять сколько регистров (полей) надо, какого размера они должны быть и какой функционал на них возложить, чтобы этого хватало на все случаи жизни для всех мыслимых и немыслимых ситуаций. Представьте, что вам надо написать программу на C#-подобном языке программирования у которого в классе 16 предопределённых полей и вы не можете использовать локальные переменные. Т.е. одно и то же поле может использоваться для хранения залогиненного пользователя, отсортированного массива, временных данных или результата выполнения метода. Имена таких полей должны быть максимально общими, вместо tempData, funcResult будут странные имена EAX, AH, AL, DX и пр. Если бы вы писали на C# эмулятор процессора на архитектуре x86, то код мог бы выглядеть примерно так (DIV — divide, команда целочисленного деления):

image

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

Прерывания могут генерироваться не только процессором но и внешними устройствами (клавиатура, мышь) или программным кодом. Планировщик потоков устанавливает таймер который с интервалами равными одному кванту (по умолчанию около 15мс, в Windows Server больше) генерирует прерывание чтобы по внутреннему алгоритму назначить другой поток на исполнение. Пошаговое исполнение программы в Visual Studio так же полагается на механизм прерываний — у процессора устанавливается флаг, который после каждой команды вызывает прерывание которое обрабатывает Windows Debugging Engine и уведомляет через API Visual Studio.

Разделение памятью реализовано благодаря виртуальной памяти. Ранее я говорил что ОС это менеджер ресурсов и виртуальная машина. Даже если у вас 1Гб RAM 32х битный Windows будет работать так как если бы у вас было 4Гб оперативки, т.е. реально у вас 1Гб, а виртуально 4Гб. Современные компьютеры основаны на теоретической модели машины Тьюринга или же архитектуре фон Неймана (с некоторыми изменениями). Согласно этим моделям память в компьютере это лента состоящая из ячеек размером один байт. Эти ячейки сгруппированы в страницы как правило по 4096 байт (4Кб), потому как:

  • С т. зр. CPU нет разницы между кодом и данными, что приводит к трудновыявляемым ошибкам и возможностям для взлома. Если регионы памяти пометить атрибутами по которым можно сказать, что здесь находится код, а здесь данные только для чтения, а сюда можно писать, то это решит указанные проблемы. Так же можно пометить страницы доступные только в режиме ядра.
  • Поддержка виртуальной памяти процессором, который умеет копировать страницу виртуальной памяти в физическую. Физическая память RAM так же представлена в виде страниц по 4Кб. Кэш процессора считывает память из RAM страницами, потому как часто программа читает расположенные рядом данные.
  • Кажется что процесс владеет всей доступной ему памятью, хотя реально его запросы на выделение динамической памяти (оператор new в С++) ОС удовлетворяет только когда процесс попытается прочитать/записать её. Exe-файл полностью не загружается в память, а отображается с диска и когда нужно исполнить код или считать данные они загружаются в память c диска. Эти механизмы основаны страницах.
  • Имитация эксклюзивного пользования RAM каждым процессом. Когда планировщик потоков назначает поток на выполнение он загружает в регистры процессора информацию о мапинге виртуальных страниц процесса в физические страницы и когда код потока пытается прочитать/записать какой-то адрес процессор правильно его транслирует. Помимо процессов на эмуляцию эксклюзивности пользования RAM полагаются сессии, которые содержат код и данные специфичные для отдельного пользователя, к примеру глобальная очередь сообщений. В Windows 10 есть контекст потока, процесса и сессии.

Windows 10 использует ячейки вначале ленты для пользовательского пространства, а в конце — для самого себя (пространство режима ядра), в котором и хранятся объекты описывающие состояние системы.
image image
64 битный адрес позволяет адресовать 16 экзабайт, это 18,446,744,073,709,551,616 ячеек памяти. Современные процессоры пока что не поддерживают так много RAM и поэтому используют только младшие 48 бит адреса, остальные 16 заполняются старшим разрядом. Поэтому Win x64 попросту не использует часть адресов, которые помечены на рисунке выше чёрным. Но это не значит, что 64х битный Windows “видит” 256 Tb оперативки. Максимум 8TB виртуальной памяти на архитектуре IA64 и 7TB на x64. Предел физической памяти поддерживаемой Windows 10 — 2TB, потому как с большим количеством Винда не тестировалась. Объём поддерживаемой RAM в Windows 10 определяется во многом редакцией ОС, чем дороже тем больше.

Почему ячейки памяти пронумерованы шестнадцатиричными (HEX) числами, а не десятичными или двоичными? Адрес ячейки это не просто порядковый номер, в нём закодировано три числа по которым эту ячейку можно отобразить на физическую память. Первые два это индексы по которым находится конкретная страница виртуальной памяти, а третье число — смещение от начала страницы. CPU и ОС здесь работают в связке — ОС предоставляет структуру данных по которой CPU находит страницу виртуальной памяти и копирует её в физическую. По HEX номеру можно сразу увидеть как выровнен в памяти адрес. Формат двоичного числа слишком громоздкий, 32 бита (или 64) трудны для восприятия. Десятичный формат — показывает слишком мало информации, тогда как HEX удобный компромисс между десятичной и двоичной системами, средами людей и машин.

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

Из чего состоит Windows?


Абстракция или же разбиение на компоненты есть во всех сферах программирования и интуитивно понятно что Windows тоже делится на какие-то компоненты. Под компонентом понимается какая-то единица функциональности — ООП класс, файл, dll, папка. Компоненты на диаграмме ниже могут быть как индивидуальными *.sys, *.dll файлами, так и просто набором API сгруппированным логически через добавление префикса к имени функции, старая часть системы написана на C, а он не поддерживает классы. Новые части пишутся нередко на C++. В укрупнённом виде Винда выглядит так:

image

Давайте быстренько пробежимся по её компонентам снизу вверх:

  • Hyper-V Hypervisor — слой виртуализации благодаря которому в Windows можно создать виртуальную машину. Иногда говорят, что Hyper-V это минус первый уровень привилегий, однако реализован он в одном уровне привилегий и адресном пространстве что и ядро ОС, за счёт использования слоёной архитектуры ОС ничего не знает о нём.
  • HAL.dll — Hardware Abtraction Layer — изначально задумывался как абстракция над железом — чипсет, материнская плата, процессор — для того чтобы можно было перенести Windows на новую платформу реализовав новый HAL.dll, который будет выбран и скопирован во время установки. По сути это драйвер к устройствам материнской платы, к примеру таймерам, контроллеру прерываний. Сейчас его роль снижена, потому как многие драйвера материнки и чип-сета реализованы в ACPI.sys.

    Что такое Advanced Configuration and Power Interface? До 1996 года когда вы выключали компьютер через UI, ОС сохраняла состояние системы и потом показывала сообщение что можно отключать питание нажав кнопку на корпусе.
    image

    В 1996м году появился стандарт ACPI, который реализовывался производителями материнской платы и позволял софту управлять питанием всей машины, т.е. Самостоятельно отключать питание на компьютере либо пробуждать его ото сна. ACPI так же позволяет контролировать питание отдельных компонентов, таких как CD drive, т.к. большую часть времени он не работает.

  • Device Drivers — говорит само за себя. Драйвер это код скомпилированный в файл с расширением *.sys, он может содержать как код который работает со внешним устройством, так и к примеру код антивируса который сканирует процессы и системную память. Process Explorer от SysInternals так же полагается на драйвер для получения информации о процессах.
  • KernelKernel Mode Execution Environment, содержит обработчики прерываний, работа с таймерами, планировщик потоков, объекты синхронизации и пр. Здесь реализованы все механизмы ОС.
  • Executive — Реализовывает логику работы ОС, можно сказать что это уровень бизнес-логики ОС.
  • Windowing & Graphics — Система окон и DirectX для отрисовки всего что видно на экране.
  • NtDll.dll — Эта библиотека выделена большим зелёным прямоугольником потому что загружается в память только один раз и потом отображается в память всех остальных процессов. В этой dll находится загрузчик программ, который отвечает за инициализацию запущенного процесса (в т.ч. загрузку dll) и потоков в нём. Nt понимается как Native, в том же смысле что и Native American. Т.е. это API ядра ОС, которое отделено от режима пользователя. Все функции экспортируемые из этой dll имеют префикс Nt (NtDestroyMenu). Некоторые Win API реализованы в режиме пользователя и они являются частью User32.dll. Как правило пользовательские приложения не используют напрямую функции из NtDll.dll, они обращаются к Nt* функциям через ещё один уровень абстракции (level of indirection) — subsystem dll такую как User32.dll или PSXdll.dll и DOSCALLS.DLL доступных в более старых версиях Windows. NtDll.dll предназначена в первую очередь для системных процессов (Session Management Sub System.exe, WindowsInititialize.exe и пр.), которые запускаются ещё во время загрузки ОС.
  • SubSystem dlls — о них я уже сказал в предыдущем пункте. Все Windows приложения обращаются к ОС через User32.dll. Какие-то API реализованы в режиме пользователя и к примеру могут обращаться к системным процессам, другие же вызывают Nt* функции из NtDll.dll, к примеру CreateFile в конечном счёте вызывает NtCreateFile).
  • Environment Subsystems — CSRSS.exe, подсистема Windows. Ранее тут были ОС POSIX (процесс PSXSS.exe) и OS/2 (OS2SS.exe). Windows Subsystem for Linux реализована совершенно по-другому.
  • System Processes — это процессы которые выполняют различные системные фунции, к примеру LSASS.exe (Local Security Authority SubSystem) который отвечает за аутентификацию пользователей и другие.
  • Service Processes — Раньше сервисы Windows (например Plug and Play Manager) работали в своих процессах и были *.exe файлами. Со временем появился процесс SvcHost.exe который может хостить сразу несколько компонентов, реализованных в виде *.dll-файлов. Поэтому почти все системные компоненты и переехали в SvcHost’ы.
  • User Processes — пользовательские процессы. Те самые которые мы используем каждый день — браузеры, игры, офисные программы и пр. Они полагаются на описанную в предыдущих пунктах инфраструктуру.

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

Комментарии (350)


  1. DmitriyTitov
    09.01.2020 17:46
    +2

    Меня зовут Андрей Артемьев, я работаю в Microsoft над ядром ОС Windows 10, ранее я работал над Windows 10x (WCOS), XBox, Windows Phone и Microsoft Edge.

    Вопрос не по сути статьи, но всё же: вы работаете в российском отделении Майкрософт?
    Мой вопрос вот в чём: ведётся ли в России в Майкрософт реальная разработка продуктов или же местное отделение занимается только продажами и сопровождением?


    1. artmv32 Автор
      09.01.2020 17:56
      +5

      Я работаю в Редмонде, США. Я могу ошибаться, но насколько знаю ведётся, но не в таких количествах как в штаб-квартире. Подробности лучше узнать у тех кто там сейчас работает.


    1. maxbl4
      10.01.2020 15:08

      Ведётся, например я работаю в Москве и занимаюсь проектом Azure Notification Hubs.


  1. mihmig
    09.01.2020 17:47
    +4

    Андрей, а скажите — сколько (примерно) процентов мощности компьютера тратится на бесполезную для пользователя работу (сбор и отправка телеметрии и т.п.).
    И насколько возросла эта величина при переходе Windows 7 -> Windows 10?


    1. artmv32 Автор
      09.01.2020 19:38
      +3

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

      1. Нажмите WinKey+F
      2. Опишите как воспроизвести проблему, по английски желательно
      3. На 4м шаге (Add More Details) нажмите «Recreate my problem» — и воспроизведите проблему.
      4. Теперь Submit. К нам в систему придёт уведомление вместе с диагностической информацией.


      1. zirix
        10.01.2020 14:47
        +1

        потому как в будущих обновлениях он получит более стабильную и быструю ОС.

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

        Телеметрия должна быть отключаемая. А еще лучше делать отдельные тестовые сборки с телеметрией и удалить ее из обычных.


        1. emusic
          10.01.2020 16:03
          +1

          потому как в будущих обновлениях он получит более стабильную и быструю ОС.

          Заплатив за это своей приватностью и безопасностью.

          Так ведь и не получит же. Каждая следующая ОС и медленнее, и нестабильнее.


          1. stilic
            11.01.2020 10:43

            потому как в будущих обновлениях он получит более стабильную и быструю ОС.

            Так ведь и не получит же. Каждая следующая ОС и медленнее, и нестабильнее.


            После WinXP была существенная регрессия в WinVista и небольшая регрессия в Win8.0
            С тех пор наблюдаю только рост стабильности. По всем WinVista -> Win7 -> Win8.1 -> Win10


            1. emusic
              11.01.2020 11:39

              По поводу «роста стабильности» — сравните количество жалоб на проблемы после очередного обновления Win10 с количеством жалоб после обновления XP/Win7.

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


              1. stilic
                11.01.2020 11:49

                По поводу «роста стабильности» — сравните количество жалоб на проблемы после очередного обновления Win10 с количеством жалоб после обновления XP/Win7.


                Жалоб где? В интернете?
                В связи со значительно большим охватом аудитории интеретом в 2002 (WinXP вышла) и в 2015 (год выпуска Win10)?

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


                Не всегда.

                Еще на довольно старом железе был удивлен более высокой скоростью работы WinXP по сравнению Win95. Хотя на большем количестве железа — было наоборот.

                Ну а конкретно сейчас WinVista -> Win7 -> Win10 — скорость однозначно выше.
                На том же железе.
                В том числе и для свежеустановленного.
                Проверено неоднократно.

                или столкнулись со специфической конфигурацией железа/софта, в которой старая система была сильно неоптимальной.

                Послушайте, этим можно любые домыслы оправдать.
                Железо самое обычное, типовое.
                И — разное. На разном желез проверено.


                1. emusic
                  11.01.2020 12:29

                  Жалобы на XP продолжались до конца первой декады, пока для нее более-менее регулярно выходили обновления.

                  Каким образом Вы измеряли скорость работы системы? Очень интересно, как можно получить ускорение при объективном увеличении и объема модулей, и количества выполняемых операций, и количества слоев абстракции. А в Win10 добавился еще и гипервизор.

                  Почему у меня результаты всегда и везде строго обратные?


                  1. stilic
                    11.01.2020 12:35

                    Почему у меня результаты всегда и везде строго обратные?

                    Если железо изначально недостаточное — то почему бы и нет.
                    Я всегда любил хорошее железо.


                    1. emusic
                      11.01.2020 12:46

                      Что такое «хорошее железо»? Если значимые для производительности функции железа поддерживаются обеими версиями системы, за счет чего более тяжелая и сложная система может работать быстрее?

                      В Вашем случае, скорее всего, имело место отсутствие полноценной поддержки прежними выпусками системы каких-то аппаратных свойств железа. Такое сравнение очевидно некорректно.


                      1. stilic
                        11.01.2020 12:55

                        Если значимые для производительности функции железа поддерживаются обеими версиями системы, за счет чего более тяжелая и сложная система может работать быстрее?


                        За счет оптимизации.
                        Например, не секрет, что процедура загрузки ОС Windows существенно переработана.


                        1. emusic
                          11.01.2020 13:27

                          Она переработана в основном в плане зависимостей, чтобы GUI и возможность регистрации пользователя становились доступными раньше. Загрузка и инициализация к этому моменту не завершаются — они продолжаются заметное время после входа в систему. Чудес не бывает. :)


                          1. stilic
                            11.01.2020 13:28

                            Она переработана в основном в плане зависимостей, чтобы GUI и возможность регистрации пользователя становились доступными раньше. Загрузка и инициализация к этому моменту не завершаются — они продолжаются заметное время после входа в систему. Чудес не бывает. :)


                            Ну то есть вы и сами заметили где именно произведено улушчение комфорта для нас с вами?


                            1. emusic
                              11.01.2020 13:35

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


                              1. stilic
                                11.01.2020 13:59

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


                                А я вообще не выключаю.
                                В новых версиях великолепно работает просыпание.


                                1. emusic
                                  11.01.2020 14:46

                                  Я тоже не выключаю. Но мы говорили не о своих собственных предпочтениях, а об объективных свойствах систем.


                                  1. stilic
                                    11.01.2020 14:56

                                    Я тоже не выключаю. Но мы говорили не о своих собственных предпочтениях, а об объективных свойствах систем.


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

                                    Я совсем не ожидаю, что из Винды выкинут весь старый код и перепишут все с нуля.


                                    1. emusic
                                      11.01.2020 15:26

                                      Лично я пока говорил исключительно о скорости работы (в данном случае — загрузки). Вы плавно перевели стрелки на удобство для пользователя. Удобнее стало только в том, что непрерывное время ожидания полной готовности системы разбилось на интервалы, между которыми стало возможно что-то делать. Чуда не произошло — общее время загрузки закономерно растет от версии к версии.


                                1. 0xd34df00d
                                  11.01.2020 19:54

                                  Ну так себе. У меня игровая машина с windows иногда почему-то сама просыпается.


                                  1. mihmig
                                    13.01.2020 08:59
                                    +1

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


                                    1. Pro-invader
                                      13.01.2020 10:33

                                      Я не уверен, всегда ли это получается, но я находил причину просыпания из гибернации ноута HP. Виновником было что-то связанное со звуком Realtek. Только не помню в подробностях, но способ нашел путем гугления. И был журнал, в котором видно, что в такое-то время Realtek пробудил ноут.


                  1. stilic
                    11.01.2020 12:36

                    Очень интересно, как можно получить ускорение при объективном увеличении и объема модулей, и количества выполняемых операций, и количества слоев абстракции. А в Win10 добавился еще и гипервизор.

                    Так же как и в любом другом ПО — переписав узкие места.
                    Самое большое торможение, как правило, в довольно небольшом количестве мест кода.


                    1. emusic
                      11.01.2020 12:48

                      Узкие места, как правило, влияют лишь на отдельные параметры производительности. Какие именно глобальные узкие места были в 2k, XP, 7 или 8, и в каких версиях они были переписаны?


                      1. stilic
                        11.01.2020 12:57

                        Какие именно глобальные узкие места были в 2k, XP, 7 или 8, и в каких версиях они были переписаны?

                        Это вопрос к разработчику — он как раз автор статьи, может, знает.

                        Я наблюдаю только следствия.
                        И где именно запятую в коде поставили разработчики MS знать не могу.


                      1. Serjone
                        11.01.2020 12:58

                        Узкое место вин10 — проводник. Попробуйте походить по папкам в вин 10 и вин хр. в ХР папки открываются моментально, в 10 есть задержка.
                        И это место становится всё уже и уже.
                        То же с поиском. Двадцать лет прошло, а поиск всё ещё работает тупым перебором файлов на диске. Есть какая-то индексация, которая почему-то не работает, или мне ни разу не удалось её нормально запустить.


                        1. stilic
                          11.01.2020 13:29

                          Узкое место вин10 — проводник. Попробуйте походить по папкам в вин 10 и вин хр.


                          Я писал только про улучшения по скорости WinVista -> Win7 -> Win8.1 -> Win10.

                          WinXP заведомо исключил, ибо она существенно попроще по интерфейсу.


                        1. emusic
                          11.01.2020 13:30

                          В Win10 полно узких мест. Например, откройте страницу установленных приложений (Apps and Features) и начните в поле поиска набирать что-нибудь, начинающееся на «w» или «v». По динамике перестройки списка видно, какое чудовищное количество операций при этом выполняется.


                          1. sborisov
                            13.01.2020 11:26

                            Я помню в свойствах VPN соединения нельзя было отключить в 10ке «Default gateway», когда она только вышла и весь трафик шёл через VPN. Какими-то хитрыми правками реестра кажется отключалось, но чинить это вроде бы микрософт не собирался… и объявил это фичей.
                            Хотя может быть передумал уже


                  1. stilic
                    11.01.2020 12:37

                    А в Win10 добавился еще и гипервизор.

                    Зачем его запускать, если он не нужен?


                    1. emusic
                      11.01.2020 12:48

                      Внутриядерный гипервизор (Patch Guard, Device Guard и т.п.) не спрашивает, когда ему запускаться. :)


                      1. stilic
                        11.01.2020 13:00

                        Внутриядерный гипервизор (Patch Guard, Device Guard и т.п.) не спрашивает, когда ему запускаться. :)


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

                        А уж тем более при аппаратной поддержке, которая давно имеется.


                        1. emusic
                          13.01.2020 11:35

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


              1. artmv32 Автор
                11.01.2020 21:22

                Количество пользователей Windows сильно выросло. Сейчас 1.5 миллиарда устройств на разных Windows. Аудитория пользователей становится всё более массовой и специально для массового технически не подготовленного пользователя сделали Windows Light, он же Windows 10x. С ростом пользователей растёт и количество уникальных конфигураций машин и количество жалоб.


        1. drWhy
          10.01.2020 16:37

          Телеметрия должна быть отключаемая. А еще лучше делать отдельные тестовые сборки с телеметрией и удалить ее из обычных.
          Действительно, существует же debug версия Windows.


    1. artmv32 Автор
      09.01.2020 19:53
      +1

      Ну или мне можете в личку написать о том как происходит проблема.


    1. chelsea2
      10.01.2020 10:58

      Телеметрию, виндовс дефендер и прочий паразитный софт можно отключить через «Пуск->Edit group policy».


      1. artmv32 Автор
        10.01.2020 11:15

        Что лучше ставить вместо дефендера?


        1. Katasonov
          10.01.2020 11:59

          У меня новый макбук. На нем стоит Windows 10. Пока не застопил телеметрии и дефендеры вентилятор жужал как бешеный. Сейчас тишина и спокойная работа. В моем случае, например, единственный выход который нашел — ничего не ставить.


          1. artmv32 Автор
            10.01.2020 12:13

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

            Если будете испытывать такую проблему то будем признательны если нажмёте Win+F, заполните описание проблемы и нажмёте кнопочку воспроизвести проблему, а после воспроизведение — submit.


            1. Katasonov
              10.01.2020 12:59
              +1

              Мне как разработчику антивирус создает больше проблем, чем приносит пользы. Много раз было так, что я тратил кучу времени на поиск непонятной проблемы в работе софта, а оказывалось, что это Антивирус после запуска блокировал DLL, после чего программа тупа висела и ничего не делала, что там делал Антивирус одному ему известно. То же самое с Windows Defender. Свою новую прогу запустил на ноуте жены под Win10: ничего не происходит. Запускаю еще раз, еще раз… ничего не происходит… через 5 минут появилось окно. Оказалось, что какой-то Windows «Defender» в это время отправлял файл программы куда-то на проверку. Программа тупа была в подвешенном состоянии. Таких проблем в последнее время наблюдаю все больше и больше. Про свой Макбук я уже написал. Пока не поотключал все сервисы связанные с безопасностью, вентилятор жужал как пылесос.


              1. artmv32 Автор
                10.01.2020 13:07

                А что программа делала если не секрет?


                1. Katasonov
                  10.01.2020 13:24

                  Программа по сути движок Хрома с оберткой под .net (CEF Chromium), в котором загружалась страница с определенного IP адресса и отображалась.


                  1. sborisov
                    13.01.2020 11:33

                    Компиляцию C++ программ в Visual Studio — defender замедляет сильно.
                    При сборке большого проекта (очень много файлов было), если он был включен — у меня сборка занимала минут 30, без него 10.
                    i5, Haswell, Ram 32Gb, SSD evo860
                    Может быть архитектура процессора была не нова, и на более современных эффект его влияния был бы меньше.


                    1. Serjone
                      13.01.2020 13:08

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


                1. rrust
                  13.01.2020 12:29

                  кстати, когда качаешь большой аддон к танкам от protanki, то комп может зависнуть на очень долго. Файл-то большой, пока Defender весь его проверит, пока отправит сэмпл, а при этом часть винды тупо висит в залипшем состоянии.


              1. Massacre
                10.01.2020 23:25
                +1

                Вообще, если такое поведение антивируса (отправлять в облако на проверку) — дефолтное, и никаких подтверждений от пользователя не спрашивается, то это ещё большая дыра в безопасности, чем вся телеметрия вместе взятая…


                1. sborisov
                  13.01.2020 11:34

                  С Касперским такая же неприятность вышла — когда к ним файл АНБ попал.


              1. stilic
                11.01.2020 10:47

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

                А пробовали включать каталоги с программой в исключения?


                1. Serjone
                  11.01.2020 13:08

                  А пробовали найти где добавляются исключения?
                  -Все параметры
                  -Обновление и безопасность
                  -Безопасность виндовс
                  -Защита от вирусов и угроз
                  (в этом месте для чего-то открывается новое окно настроек
                  -Управление настройками
                  -крутим глубоко вниз
                  -добавление или удаление исключений
                  -добавить исключение.


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


                  1. stilic
                    11.01.2020 13:11

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

                    ОС Windows единая для всех типов пользователей.
                    А большинство пользователей — уровней «домохозяйки». От них убрали, и это совершенно правильно, подальше, чтобы те сами себе не навредили.

                    Для IT-шника не есть проблема поднастроить ОС под себя. Он же специалист?

                    Некоторое ПО умеет само добавлять исключения в Defender.
                    Например, ПО семейства JetBrains IDE.

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

                    А еще есть Group Policy


              1. emusic
                11.01.2020 11:44

                По поводу «блокировал DLL» вспомнилось, что в десятках (не помню, сразу или по мере развития) за каким-то чертом отключили сообщение об аварийном завершении приложения. Если что-то вдруг внезапно и тихо закрылось, без логов не поймешь, кто виноват.

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


          1. stilic
            11.01.2020 10:46

            У меня новый макбук. На нем стоит Windows 10.

            Нечестивец, грешник.


            1. Katasonov
              13.01.2020 11:27

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


        1. Massacre
          10.01.2020 23:22

          Сторонний фаервол типа Comodo (вообще, можно любой фаервол приложений, т.е. с возможностью блокировки доступа отдельным процессам) и никаких антивирусов, браузер должен защищаться через блокировщики контента, а непроверенный софт можно просто не ставить…


        1. chelsea2
          13.01.2020 10:28
          +1

          >> Что лучше ставить вместо дефендера?
          Чем меньше в системе сомнительного софта, тем безопаснее и стабильнее работает система, так что лучше ничего не ставить вместо дефендера.
          Если приходится дело иметь с виндой, то лучше держать ее в виртуалке/облаке и не хранить в ней приватную информацию, пароли, ключи.


      1. vis_inet
        10.01.2020 11:15

        Действительно, полностью можно отключить?
        Подскажите, где можно про это прочитать?


        1. mihmig
          10.01.2020 11:29
          -1

          Я использую утилиту DoNotSpy10, но не уверен, что она полностью выключает телеметрию.


          1. AlexanderS
            10.01.2020 13:19

            Она же просто за вас включает и выключает стандартные настройки Windows. Просто не надо самому лазить по бесчисленным менюшкам. Насколько мне известно, больше она ничего не делает.


          1. arthuriantech
            10.01.2020 16:23

            На моей Windows 10 LTSC программа DoNotSpy не устранила регулярные вылазки системы в сеть. Особенно в играх раздражало, когда на ровном месте пинг взлетает до 300 и ты не понимаешь, что происходит. Пришлось вручную отключать "Службу оптимизации доставки" и еще несколько служб.


    1. emusic
      10.01.2020 13:51
      +2

      Телеметрия и подобные вещи отъедают исчезающе малую долю производительности. На порядки больше уходит из-за неоптимальной многослойности взаимодействия верхних уровней кода с нижними. Посмотрите в Process Monitor, сколько одинаковых, повторяющихся запросов к одним и тем же ресурсам делается при самых простейших операциях, начиная с подготовки PE-файла к загрузке в память. В Resource Monitor посмотрите, сколько будет считано с диска и записано на него при запуске, например, Computer Management Console и подобных средств (просто для запуска, не доходя до конкретных операций).


      1. drWhy
        10.01.2020 16:58

        Почему для открытия меню Windows читает один файл сто тысяч раз
        Кстати, очень помогло удаление папки \Users\%username%\AppData\Roaming\Microsoft\Windows\Recent и создание вместо неё файла с таким же именем с аттрибутом readonly.

        Или, скажем, стандартное приложение «Фотографии», весящее 350 МБ, открывающееся 15 секунд (а мне же просто фотку глянуть!) и по функциональности, как бы помягче, далеко от IrfanView весом в 23 МБ.


        1. vis_inet
          10.01.2020 18:13
          +1

          Я бы сказал, что не

          далеко от IrfanView
          , а просто пропась между ними


          1. Serjone
            10.01.2020 18:28

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


            1. ilialin
              11.01.2020 06:53

              Paint.NET клевый на замену обычному паинту.


              1. Serjone
                11.01.2020 13:10

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


  1. sidorovmax
    09.01.2020 18:04
    +4

    Резистор и конденсатор раньше не относились к полупроводниковым устройствам.
    image


    1. serega374
      09.01.2020 18:48

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


    1. artmv32 Автор
      09.01.2020 19:45

      Может немного не в тему, но конденсаторы используются в платах RAM для представления нулей и единиц, где конденсатор заряжен = 1 и разряжен = 0. Из их последовательностей и формируются байты.


      1. sidorovmax
        09.01.2020 20:32

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


      1. Winnie_The_Pooh
        10.01.2020 10:59

        В электронике принято проводить линию раздела по активным элементам: т.е. полупроводниковые элементы это такие, в которых управление потоками энергии выполняется полупроводниковыми элементами. Конденсаторы и резисторы не входят в группу«активные элементы» независимо от их устройства и к группе «полупроводниковые элементы» не относятся.


        1. amartology
          11.01.2020 00:34

          К «полупроводниковым приборам» не относятся. А к «элементам полупроводниковых микросхем» — вполне.


    1. COKPOWEHEU
      10.01.2020 15:44
      +1

      Да и сейчас не относятся. Даже если входят в состав интегральной схемы и сделаны из кремния. Для их функционирования не используется специфика полупроводников: либо проводник (с каким-то удельным сопротивлением), либо изолятор (с каким-то током утечки и пробивным напряжением). А вовсе не ширина запрещенной зоны, легирование, pn-переходы и т.п.


  1. 2morrowMan
    09.01.2020 18:15
    +1

    Несколько вопросов не по теме, но по Вин 10 с надеждой получить ответ отличный от догадок:

    1) Вин 10, два аккаунта пользователей — А (главный с паролем) и Б (без пароля).
    1.1) Пользователь аккаунта Б выключает компютер.
    Вопрос: как пользователю А включить свой компьютер, чтобы сразу же не попасть в аккаунт Б?

    1.2) Пользователь А выключает компьютер.
    Пользователь Б включает компьютер и логинится в аккаунт Б.
    Вопрос: каким хреном под аккаунтом А запускаются приложения из автостарта, без захода в этот аккаунт?

    2) Почему иногда при включении своего компьютера, винда выдает какое-то говно-окно, с полностью не нужной инфой, блокирую доступ к аккаунту, пока я не разберусь с говном в окне? В настройках снят флажок с «Показывать новинки винды».

    3) Почему в Вин10 присутствуют баги еще с ХР(как минимум в оболочке)?

    4) Что по мнению Майкрософт должно происходить на начальном экране логина при нажатии на кнопку Win на клавиатуре? Открываться шторка чтобы попасть на ввод пароля/пина, нет? )

    5) Почему Вин 10 может включить Мой Персональный Компьютер для обновления, но выключить не может? Т.е. компьютер может так проработать без присмотра несколько месяцев…


    1. artmv32 Автор
      09.01.2020 19:56
      +1

      Сразу отвечу на №3. Баги могут присуствовать по 3м причинам:

      1. О них не знают
      2. Они низкоприоритетные и на них пока не выделяют ресурсы
      3. Это фича ))

      Можешь мне написать про эти баги и я обращу на них внимание тех кто занимается ими.


      1. 2morrowMan
        10.01.2020 09:04

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

        — На панели задач иногда «зависает» контекстное меню — весит пока в него не кликнешь.

        — Иногда пропадает один из языков раскладки до перезагрузки(эксклюзив Вин10).

        P.S. Вообще, уже приловчился жить с ними и всего сразу и не напишу. Да и Вин10 последним временем не плохо себя ведет.


        1. namikiri
          10.01.2020 09:48

          — Иногда пропадает один из языков раскладки до перезагрузки(эксклюзив Вин10).

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


          1. komtur
            10.01.2020 13:08
            +1

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


            1. perfect_genius
              10.01.2020 22:00

              Вы, случайно, не в Крыму находитесь?


          1. osiykm
            10.01.2020 14:03

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


        1. alex-khv
          10.01.2020 10:01

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

          Модальное окно?


          1. 2morrowMan
            10.01.2020 10:13

            У меня такое происходило с окном любого приложения(например Хром, Фотошоп и т.п.). По ощущениям что, если в момент открытия приложения/появления окна Х переключиться на какое-то другое, то окно Х появится поверх и не захочет перекрываться другими, пока не переключишься на него и свернешь/развернешь.


            1. alex-khv
              10.01.2020 10:32

              Мне кажется это поведение из-за какого-то стороннего приложения.


    1. artmv32 Автор
      09.01.2020 19:58

      №2. Это окно с просьбой настроить PIN или распознавание лица? Что показывается в нём?


      1. 2morrowMan
        10.01.2020 09:14

        Это окно с нововведениями в Вин 10.

        Странно что это кто-то решил форсировать это окно каждому пользователю, прерывая вход в аккаунт.
        Первый раз я подумал что произошло что-то серьезное так как раньше таких окон не было замечено.
        Подгорело уже когда уже была снята галка «Показывать нововведния» и когда надо было что-то по-быстрому посмотреть на компе, а Майкрософт решил что мне надо сначала узнать о нововведениях в винде ))


    1. artmv32 Автор
      09.01.2020 20:02

      №4 Это как я понимаю больше про юзабилити. Тут лучше отправить предложение либо проголосовать за эту фичу. Сделать это можно через Feedback Hub, открывается через Win+F.


      1. 2morrowMan
        10.01.2020 09:21

        Да, про юзабилити. Удивило, что эксклюзивная кнопка Win не работает на этом экране, хотя я ее там инстинктивно жму.

        Фидбек Хаба нету у меня, но надо бы отправить фич-риквест.


        1. artmv32 Автор
          10.01.2020 11:19

          Feedback Hub идёт с WIndows, если не удалил его то открывается через Win+F.


          1. drWhy
            10.01.2020 17:01

            Возможно, Feedback Hub доступно не для всех регионов, у меня не вызывается (W10/1903).
            Ещё одно предположение — возможно для его корректной работы обязательна онлайн учётная запись (у меня оффлайн).


          1. DeadFine
            10.01.2020 19:45
            +1

            У меня на 10 Pro нет Feedback Hub. Даже в поиске не ищется. Сам не удалял.



    1. artmv32 Автор
      09.01.2020 20:03

      №5. В настройках питания выставлен уход в сон после определённого времени? И для питания от сети и от батареи?


      1. 2morrowMan
        10.01.2020 09:31

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

        Кстати, как определить что включает комп?
        Когда-то устанавливал какую-то программу и она делала как-то так что комп после отправки в сон включался обратно автоматически. Но програма давно удалена, задача из планировщика тоже.


        1. Lennonenko
          11.01.2020 14:11

          Кстати, как определить что включает комп?

          powercfg -lastwake


          1. Serjone
            11.01.2020 15:11

            О чем это говорит?


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


            1. AlexZyl
              11.01.2020 18:40

              Возможно скапитаню, но что у Вас выставлено в Power Options -> Sleep -> Allow wake timers?


              1. Serjone
                11.01.2020 19:40

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


    1. lonelymyp
      09.01.2020 23:49
      +1

      По моему 1.2 возникает из за супер новой и супер удобной функции.
      Винда, используя ваши учётные данные которые она запомнила, сама запустит под вашей учёткой программы, которые были запущенный в прошлый раз. Неважно что вас рядом может и не быть.
      image

      А по поводу 1.1 Помню я делал пароль юзеру Б и включал опцию «не требовать пароль при входе» тогда хоть юзер Б и логинился автоматически, но и я в случае чего мог при включении компа зажать кнопку шифт и тогда автовход не срабатывал, нужно было ткнуть мышкой в нужного юзера. Но такое ощущение что в последних сборках десятки эта фича перестала работать.


      1. dartraiden
        10.01.2020 03:24

        включал опцию «не требовать пароль при входе»
        Эту опцию удалили в последних билдах. Впрочем, удалили из GUI, через реестр всё осталось. Ну и, справедливости ради, это реально небезопасная штука, когда пароль лежит на харде. Как и всякие сторонние утилиты типа EncryptedRunAs (поскольку это «encrypted» вскрывается).


        1. staticmain
          10.01.2020 12:03

          это реально небезопасная штука, когда пароль лежит на харде

          Конечно, гораздо безопаснее, когда пароль в облаке


        1. artmv32 Автор
          10.01.2020 13:25

          А Bitlocker защищает от чтения данных на диске? Он включен когда эта опция доступна?


          1. alex-khv
            10.01.2020 13:31

            Bitlocker защищает во время холодного хранения.
            Если том смонтирован, то доступен всем.


            1. Daimos
              10.01.2020 14:14

              Нет, не всем.


              1. alex-khv
                10.01.2020 14:24

                Прошу развернуть ответ


                1. Daimos
                  10.01.2020 14:42

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


                  1. alex-khv
                    10.01.2020 15:29

                    Может это NTFS подсистема?
                    Действительно, в битлокер можно добавить SID Protector. Но он нужен для только разблокировки тома.


                    1. Daimos
                      10.01.2020 16:43

                      BitLocker только на NTFS и можно поставить и явно видно замочек на диске и спрашивает пароль.


        1. lonelymyp
          10.01.2020 20:27

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


        1. Lennonenko
          11.01.2020 14:21

          Эту опцию удалили в последних билдах

          1909, только что проверил, всё на месте, вызывается через control userpasswords2


    1. dartraiden
      10.01.2020 03:31

      2) Почему иногда при включении своего компьютера, винда выдает какое-то говно-окно, с полностью не нужной инфой, блокирую доступ к аккаунту, пока я не разберусь с говном в окне?

      Без обид, но это классический «подземный стук».
      «Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит».

      ?\_(?)_/?


      1. Free_ze
        10.01.2020 11:26

        ИМХО, суть вопроса не о причинах «подземного стука», а вообще о пользе модалок поверх логин-скрина.


    1. shnegs
      10.01.2020 13:09

      №5 В смысле просто так включить? Не вывод из ждущего режима а просто включение? ПК же не работает?


  1. viordash
    09.01.2020 18:49
    +1

    если бы статья была про линукс, то наверно резисторы и конденсаторы стали бы «полупроводниковыми» или даже «проводниковыми».
    ps.
    они есть и полупроводниковые
    ps2.
    это для ответа выше


    1. user343
      10.01.2020 13:21

      Конденсаторы бывают из металлизированных плёнок или рулонов (стопок) фольги с диэлектриком (пластик, керамика, слюда), резисторы — углеродистыми или металлоксидными. Полупроводниковых среди них — мизерная доля.
      А на картинке какой-то глупый дизайнер "электронные компоненты" назвал по своему хотению "semiconductor" (полупроводниковыми).


      P.S. по теме статьи — посмотрите, как далеко упрятали смену переключателя языка ввода в "индусском коде" win10 против winXP (3 клика в интуитивно понятных местах Ru-En):


      "Изменение сочетания клавиш для изменения языка ввода в Windows 10
      С выходом каждой новой версии Windows 10 шаги, необходимые для смены сочетания клавиш немного меняются. В первом разделе инструкции пошагово о смене в последних версиях — Windows 10 1903 May 2019 Update и предыдущих, 1809 и 1803. Шаги для того, чтобы поменять клавиши для изменения языка ввода Windows 10 будут следующими:


      В Windows 10 1903 и 1809 откройте Параметры (клавиши Win+I) — Устройства — Ввод. В Windows 10 1803 — Параметры — Время и язык — регион и язык.
      Нажмите по пункту Дополнительные параметры клавиатуры ближе к концу страницы настроек. Открыть дополнительные параметры клавиатуры.
      В следующем окне нажмите Параметры языковой панели. Открыть параметры языковой панели.
      Перейдите на вкладку «Переключение клавиатуры» и нажмите «Сменить сочетание клавиш». Изменение параметров переключения клавиатуры.
      Укажите нужное сочетание клавиш для переключения языка ввода и примените настройки."


      При этом сам диалог настроек выглядит очень похожим на Windows XP, но запрятан как "смерть Кащея".


      1. Serjone
        10.01.2020 15:59

        Это не только с языком. Попробуйте вручную ввести айпи компьютера. В икспи окно подключения можно было вызвать кликнув на значке соединения в трее.
        В вин10 же нужно:
        -Пкм на значке,
        -выбрать центр управления сетями


        • тыкнуть на нужное подключение, либо зайти дальше в изменение параметров адаптера и тыкнуть там.

        Меня давно интересует вопрос, почему с каждой версией винды, настройки уходят куда-то вглубь? Они и так разбросаны где попало, а тут ещё и по разному называются каждый раз.
        Панель управления… Почему панель управления всё неудобнее и неудобнее? Создаётся впечатление, что МС планомерно избавляется от неё. Таки вопрос — почему и зачем?
        В вин10 в панель управления можно попасть… Не просто туда попасть. Открываем пуск, отстаём огромный список с огромными значками, дальше вспоминаем "панель управления", это служебное, спец возможности, или администрирование? Или может стандартные? Потыкали по всем папочкам, нашли. Вид по категориям, ну совсем не удобен.
        За вид со значками менеджеров-программистов, которые это "пропустили в реализацию", стоит как минимум уволить, а как максимум сжечь на костре. Скажите, почему нельзя было сделать нормальную сортировку по имени? А не это убожество с построчной сортировкой.
        Если правильно помню, когда-то был возможен вид таблицей, зачем это убрали?
        А кто дизайнер меню пуск? Вообще, проводились когда-нибудь опросы, мол, на сколько удобнее стало пользоваться пуском?
        Это всё можно исправить сторонними утилитами, м в этом проблема. Винду во все времена после установки приходилось допиливать до нормальной работоспособности.
        В 10 многое стало проще, например установка драйверов — это божественно — установил ос, включил интернет, всё, драйвера сами ставятся. Почему нельзя такие улучшения делать в системе в целом?
        Очень хотелось бы услышать ответ разработчиков.


        1. S-trace
          10.01.2020 17:30

          В вин10 в панель управления можно попасть… Не просто туда попасть.

          <win+r>
          control



          1. Serjone
            10.01.2020 17:55

            Благодарю, запомню. Но это немного не то. Бывает так, что клавиатура не доступна (не подключена, далеко, темно), да и привык я мышкой работать.
            Так-то можно и все нужные настройки через <win+r> открывать, но это костыли.
            Вот, если бы её можно было в пуск впилить, туда, где шестерёнка «параметры», это таки удобнее.


            1. leschenko
              10.01.2020 18:38

              "Панель управления" планомерно выпиливается из системы. На смену приходит "шестеренка". С каждой версией винды там се больше параметров и ИМХО структурированы они лучше чем в панели управления. К тому же есть поиск опций, если не помните в каком она разделе.


              1. Serjone
                10.01.2020 19:29
                +1

                Это прекрасно, что панель выпиливаются, а на смену ей грядут "всё настройки в одном месте".
                Проблема в том, что шестерёнка работает ну очень криво и медленно и не удобно, а панель всё глубже и неудобнее.
                Есть тысячи твикеров для виндовс, в них настройки расположены понятно и удобно. Почему МС не наймет наконец десять тысяч первого сотрудника, которым будет разработчик ui?
                В России сотни людей, готовых забесплатно слать багрепорты и тестировать новые фичи, предлагать полезные улучшения, но воз и ныне там. Вместо полезных функций и удобного интерфейса мы имеем то, что имеем.


              1. drWhy
                10.01.2020 20:06

                А если помню где и хочу, чтобы там оставалось?
                «Для вашего удобства мы убрали руль, а педали газ и тормоз поменяли местами».

                В России сотни людей, готовых забесплатно слать багрепорты и тестировать новые фичи, предлагать полезные улучшения, но воз и ныне там. Вместо полезных функций и удобного интерфейса мы имеем то, что имеем.
                Нажмите Win+F. Или у вас тоже не нажимается, как и у меня?


            1. Lennonenko
              12.01.2020 00:21

              более того — открыв панель управления, вы можете на любом апплете щёлкнуть правой кнопкой мыши и создать на рабочем столе ярлык, который потом можно поместить в любое удобное место


              1. Serjone
                12.01.2020 12:17

                Я могу даже написать программу, в которой будут все нужные мне ярлыки, но это не выход, когда приходится работать на компьютере, где нет программы, ярлыков, юсб и интернета. Зачем усложнять то, что и так работало раньше? Захотели больших изменений, ну сделали так, чтобы было удобнее, люди сами перейдут на новые настройки, а про архаичную панель управления забудут.
                А тут новые настройки убоги, часть из них всё равно отправляет на окна приложений панели управления, часть из них запрятана (кстати, только сейчас понял, это наверное для того, чтобы люди научились пользоваться поиском настроек).


            1. Endeavour
              13.01.2020 16:16

              Пкм на Пуске, Control Panel.


              1. emusic
                13.01.2020 16:19

                Давно устарело.


        1. psycho-coder
          13.01.2020 13:04

          В вин10 в панель управления можно попасть… Не просто туда попасть. Открываем пуск, отстаём огромный список с огромными значками, дальше вспоминаем «панель управления», это служебное, спец возможности, или администрирование? Или может стандартные? Потыкали по всем папочкам, нашли.

          Использую для этого Win+R -> control -> Enter.
          P.S. я буду обновлять комменты


      1. Lennonenko
        11.01.2020 14:32

        весь этот путь проходится гораздо быстрее:
        ЛКМ значок языка — настройки языка — «выберите метод ввода...» — «сочетания клавиш...»

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


        1. Serjone
          11.01.2020 15:32

          Это всё прекрасно. Допустим, в виндовс семь, можно по правому клику на значок языка сразу попасть в это окно. и это было удобно:



          И что мы видим сейчас?
          "гениайльные" уй-дизайнеры микрософт показывают нам окно на весь экран, в котором в самом верху стоит смена языка, добавление языка. Я ведь каждый день по несколько раз меняю язык системы и закачиваю новые…
          В очередной раз из быстрых настроек того, что нужно, мы лазим по лабиринтам "параметров". И самое главное — где гарантия, что
          ЛКМ значок языка — настройки языка — «выберите метод ввода...» — «сочетания клавиш...»
          будет находиться там же в следующей версии системы? С тенденцией запихивать самые удобные настройки поглубже, скорее всего путь изменится.


          1. Lennonenko
            12.01.2020 00:29

            я понимаю ваше возмущение и разделяю его, просто поделился шорткатом


  1. apxi
    09.01.2020 18:54
    +2

    Почему в винде до сих пор нет переключения языка например по capslock?


    1. artmv32 Автор
      09.01.2020 19:41

      Я уже не в первый раз про это слышу. Откуда такое требование? Смотрите LowLevelKeyboardHook, чтобы добавить такой функционал.


      1. AbstractGaze
        09.01.2020 20:01
        +1

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


        1. artmv32 Автор
          09.01.2020 20:07
          +1

          CapsLock — это основная клавиша для взаимодействия с читалкой экрана. Её можно выключить или поменять назначение, в Интернете полно информации как это сделать без написания своей программы.


          1. AbstractGaze
            09.01.2020 23:21
            +2

            Да и тут на есть статьи как поменять — я бы не назвал это удобным функционалом.
            Вопрос в том почему это нельзя добавить в базовый функционал для «пользователя» раз это востребовано и довольно таки давно.
            Вы написали что сбор телеметрии позволяет улучшить взаимодействие с пользователями и нам, пользователям, это выгодно, но в данном вопросе почему то идет игнор.


            1. artmv32 Автор
              10.01.2020 01:17

              За эту фичу нужно проголосовать, телеметрия не настолько интеллектуальная. Голосовать на Feedback Hub, открывается через Win+F.


              1. Serjone
                10.01.2020 13:10
                +2

                А можно где-то узнать, что именно собирается телеметрией и как обрабатывается?
                В плане работы клавиатуры, допустим, то, что сотни тысяч пользователей из россии открывают пуск и набирают, допустим «зфште», или «цщкв», потом удаляют введённое, меняют раскладку и заново пишут, но уже на нужном языке. Вот это вот всё отслеживается? есть у нас шанс, что винда когда-нибудь начнёт понимать, что не единой раскладкой живут пользователи и что можно включить возможность в поиске использовать и альтернативную раскладку, как это делается, допустим, в гугле, да и много где ещё?
                По поводу переключения клавиатуры. С капсом никогда не заморачивался, а вот переключаться по левому и правому контрл — нашёл для себя очень удобным.
                Представьте ситуацию: я подключаюсь к удалённому компьютеру через тимвьювер, на удалённом через рдп подключаюсь к серверу, на сервере в браузере запускаю веб интерфейс esxi и в нём захожу на виртуальную машину. (не спрашивайте зачем это, просто как пример) И от ввода текста мне становится грустно, ибо в лучшем случае символы вводиться не будут, пока на всех машинах не выставить одну и ту же раскладку, а в худшем будет вводиться какая-то фигня из непонятных символов, или один символ на все клавиши. Можно, конечно ставить хуки, писать свой софт, или использовать чужой. Эту проблему я решил с помощью пунто свитчера, но таки очень хотелось бы более гибких настроек по назначению клавиш.
                Почему нельзя разрешить пользователю менять раскладку по капсу, или по кнопке Ё? Или на один язык переключаться левым контрл, а на другой — правым.


                1. LeXa4894
                  11.01.2020 08:14

                  Win10 1909
                  Возможность переключения по `(ё) присутствует.
                  Новомодные настройки — устройства — ввод — дополнительные параметры клавиатуры — сочетания клавиш для языков ввода.
                  Выбрать пункт «Переключить язык ввода» и по нажатию на «сменить сочетание клавиш» появится искомое.
                  Потенциально, можно переключаться на конкретные языки по хоткеям, но из-за убогих возможностей по настройке доступны только варианты (модификатор)+([`1-0]), что неудобно. Особенно при привыкании переключения по разным контролам.
                  Может быть у них дойдут руки до модернизации этой части интерфейса, но будет это нескоро, судя по стабильности сборок 1809 и 1903(на последнюю я несколько раз пытался обновиться с 1803, но обновление всегда зависало по непонятным причинам).


                  1. Serjone
                    11.01.2020 13:16

                    1903 Переключения по Ё нет. Только по ctrl+Ё. Но и оно у меня не заработало, возможно, что-то блокирует.
                    Но таки хотелось бы по разным контролам переключаться, так как разные клавиши на разный язык — это сильно логичнее и меньше ошибок при наборе.


                    1. LeXa4894
                      11.01.2020 13:31

                      Ну вот не соглашусь с вами.
                      Вот как выглядит у меня данный диалог. Win 10 1909 build 18363.535
                      Проверил, переключение МЕЖДУ раскладками по Ё работает, без разницы на модификаторы.
                      image
                      Впрочем, жить без ё не очень интересно, так что я не вижу этот вариант жизнеспособным (а другой человек может увидеть).
                      Посмотрите, возможно у вас какие-то хуки стоят, что не позволяют переключаться по одному нажатию на клавишу Ё.

                      А вот переключение на конкретную раскладку, увы, тут все очень плохо.
                      Теоретически, текущий вариант удобен, если у тебя много (более двух) языков. Но для двух языков — мне удобнее левый и правый контрол для явного переключения на конкретный.
                      Фактически, это единственная причина установки punto switcher, к которому за годы привык, но пользуюсь лишь одной фичей.


                      1. Serjone
                        11.01.2020 22:00

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


                        1. Lennonenko
                          12.01.2020 00:36
                          +1

                          вот вам образец для подражания
                          image


          1. lonelymyp
            09.01.2020 23:24
            +1

            Переключения языка капсом это удобно, особенно на ноутах где в клавишу встроена лампочка, сразу видно какой язык включен.
            Реально есть статистика что какая-то ощутимая масса пользователей пользуется этой кнопкой?
            Не знаю ни одного человека кто пользовался бы капсом, ну кроме как для написания юмористических комментариев в стиле «СРОЧНОСДЕЛАТЬЕЩЁВЧЕРАБЛДЖ1111»


            1. smartbsv
              10.01.2020 03:33

              Раньше пользовался переключением Ctrl+Shift, затем перешел на Alt+Shift (при «слепом» методе печати так удобнее). А сейчас — в связи с переходом на планшет (и иногда из-за этого отсутствием физической клавиатуры) — перешел на переключение языка ввода кнопкой «Ё» (или ` в английской раскладке). Это удобнее для меня, чем нажимать две клавиши на сенсорной клавиатуре (1 клик вместо 2-ух — вполне себе экономия времени:).
              З.Ы. Кнопкой капслок пользуюсь, — иногда капчу надо вводить большими буквами или пароли. Но добавить этот вариант переключения языков для большей настраиваемости и удобства Windows для разных людей было бы хорошо.


              1. d-stream
                13.01.2020 16:57

                У alt-Shift есть препоганейшая особенность: половина современного софта по нажатию alt активирует хоткеи меню… как итог быстрое нажатие alt-shift и попытка ввести текст «съедает» первый символ


            1. dartraiden
              10.01.2020 03:40

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

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


              1. apxi
                10.01.2020 08:09

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


            1. Decticus
              10.01.2020 06:53

              При переводе приходится, потому что пишешь не как тебе хочется, а как написано в исходном документе. А там может быть и слово через слово капсом, и половина предложения — при быстрой и долгой работе палец отсохнет шифт держать.
              А Сtrl+Shift+стрелка — Shift+F3 для каждого слова — это сильно сложнее капслока.


              1. OZR
                10.01.2020 11:24

                У меня переключение раскладок по CapsLock. А включение\выключение функционала CapsLock по CapsLock+LeftShift.

                И почему это было сделано не по умолчанию дцать лет назад…


                1. slavius
                  10.01.2020 15:57

                  Вот должно быть наоборот — на кнопке написано — «CapsLock» -делает буквы большими. Хотите своё — по CapsLock+LeftShift — делаете как хотите.

                  А давайте попросим и CtrlShitEsc не на диспетчер задач, да и Win тож на своё…


                  1. leschenko
                    10.01.2020 18:47
                    +1

                    А давайте не будем трогать CtrlShiftEsc.


                    1. drWhy
                      10.01.2020 20:12

                      Хотя Task Manager зачастую запускается уже после того, как приложение, для прибивания которого был вызван, дозакроется само.


                      1. S-trace
                        10.01.2020 21:17
                        +1

                        У меня недавно был забавненький глюк — explorer хитро здох и после логина не отрисовывались значки на рабочем столе.
                        При запуске диспетчера задач из консоли в безопасном режиме с поддержкой командной строки тот тоже вешался при попытке открыть контекстное меню любого процесса.
                        Отсюда можно сделать вывод, что диспетчер задач уже не торт, раз уж его можно так легко положить. Систему пришлось переустанавливать(


        1. v2kxyz
          10.01.2020 15:30

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


      1. apxi
        10.01.2020 08:06

        Если не первый раз слышите, значит это востребовано. Это требование происходит от банального удобства. Неужели так трудно это сделать? Миллионы пользователей ежедневно выворачивают пальцы, чтобы переключить язык.
        >>> Смотрите LowLevelKeyboardHook, чтобы добавить такой функционал.
        Смотрите линукс, там это сделано.
        А для себя сделайте клавишу Enter, через Ctrl-Del через LowLevelKeyboardHook, посмотрите откуда требования происходят.


        1. Arcuen
          10.01.2020 13:57

          Что там выворачивать? Не отвлекаясь от печатания можно нажатием мизинца по Ctrl+Shift быстро сменить язык.


          1. S-trace
            10.01.2020 17:37

            Не отвлекаясь от печатания можно нажатием мизинца по Ctrl+Shift быстро сменить язык.

            А Shift+Caps или Caps прожимать мизинцем ещё удобнее — у меня так переключение настроено, Shift+Caps — русская раскладка, Caps — английская. Очень удобно тем, что не надо знать, какая раскладка стоит сейчас, чтобы включить нужную.
            Ну и индикатор Caps у меня светится когда русская раскладка включена, удобно.
            Linux, да. Причём это даже настраивается штатно в панели управления, а не в конфигах.


      1. Ambyte
        13.01.2020 08:40

        Андрей, раз уж тут коснулись функции переключения раскладки, есть вопрос по системному сообщению WM_INPUTLANGCHANGEREQUEST, в старых версиях windows работало отлично, сейчас не применимо, т.к. множество программ (MS Office к примеру) просто зависает (не всегда) если им отправить данное сообщение. Можете прокомментировать?


      1. D03ER
        13.01.2020 11:23

        Ну от себя скажу: Все сторонние решения имеют свои ограничения, например не переключают раскладку в некоторых диалоговых окнах. В трее висит программа, которая реализует эту мелкую функцию. Сама же функция очень давно есть в линуксах, и ее очень не хватает в windows, при быстром переключении между ОС это сильно напрягает. К тому же, переключение Shift+Alt иногда не срабатывает, если быстро прожать, а caps всегда под мизинцем. Ну а включение Caps через Shift+Caps уже давно реализовано, чем и пользуюсь при необходимости (это ведь всегда можно настроить, не обязательно Caps на переключение раскладки по умолчанию ставить). Для себя решил проблему маленькой программкой в автозагрузке, собранной из скрипта в AHK, но и она не всегда отрабатывает (но чаще, чем другие решения, которые я пробовал) в диалоговых окнах, и судя по вашей статье, не будет, если не будет запущена как служба от имени системы. В хабе предложение создал, если есть возможность поддержите.


    1. leschenko
      10.01.2020 18:42

      Почему только по CapsLock? Почему не требовать от винды какой-нибудь дичи вроде LShift+LCtrl+LAlt+RAlt+RCtrl+RShift+Reset?


      Нет такой фичи? Выпустите свой продукт! Если он действительно будет нужен пользователям — вы озолотитесь.


      1. 0xd34df00d
        11.01.2020 03:53
        +1

        У меня переключение раскладки по правому Ctrl, почему сразу дичь?


        А как поможет озолотиться продукт под открытой лицензией, непонятно.


        1. leschenko
          13.01.2020 12:00

          Дичью я назвал ту комбинацию, которую сам придумал.
          Переключением по RCtrl вполне может быть кому-то (вам, например) удобно. Но это не значит что эта опция обязана появиться в списке доступных. Даже не смотря на то, что часть пользователей была бы рада. Возможно этих пользователей крайне мало.


      1. apxi
        11.01.2020 09:14

        Требовать можно, в настройках винды давно можно было сделать назначение переключения языка на любую кнопку или вашу любимую комбинацию LShift+LCtrl+LAlt+RAlt+RCtrl+RShift+Reset, только вот что то в микрософте не торопятся это делать уже лет так 20.


        1. leschenko
          13.01.2020 11:58

          Вон, человек выше комментарием, написал что он переключает с помощью RCtrl. Значит есть стороне решение.


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


          Текущая ситуация позволяет выбрать 2 исторически сложившихся варианта. Все остальное делается сторонним ПО.


          1. apxi
            13.01.2020 13:02

            Стороннее решение не всегда можно устанавливать на удаленные чужие сервера.


          1. Serjone
            13.01.2020 13:15

            А что там в блокноте улучшили за последние 10 лет? Поддержку юникода? Так это не фича, а неизбежный переход на х64


            1. leschenko
              13.01.2020 13:38

              Я уже не помню. Там была какая-то мелочь от которой мне лично ни тепло, ни холодно. И тем не менее кому-то это не понравилось.


    1. tretyakovpe
      13.01.2020 12:19

      Win+SPACE не подходит?


  1. grokinn
    09.01.2020 19:33
    +4

    Статья очень интересная, спасибо. Как и ожидал большинство комментариев на тему «почему винда такая глючная» хотя автор в самом начале написал что работает над ядром, а не вот это вот всё. Ну и потом 330 000 одних только API, что же вы хотите?)


    1. artmv32 Автор
      09.01.2020 20:15
      +2

      Спасибо


      1. Serjone
        10.01.2020 17:58

        А вы можете написать статью о сообщениях в виндовс? Мне интересно, как происходит слаженная работа всех компонентов интерфейса. Ведь нажатие на кнопку это по сути отправка объекту "кнопка" сообщения sendmessage, верно?
        Только сообщение кнопке отправить легко, а что происходит, когда юзер меняет ширину столбца, или показывает/скрывает столбцы, изменяет вид папок проводника. Где про это можно почитать подробнее?


        1. S-trace
          10.01.2020 21:19

          Есть программа InqSoft Window Scanner — она позволяет посылать произвольные сообщения, может вам пригодиться когда будете изучать этот вопрос (если конечно захотитие))


          1. Serjone
            10.01.2020 22:28

            Да, пользовался ей активно. Ещё spycapture, она, похоже уже мертва, как и многое из программ, которыми пользовался давным давно, когда познавал мир виндовс. Делал автоматические установщики, потом на делфи писал перехват клавиатуры, назначение горячих клавиш и отправку сообщений в окна.
            Я только недавно осознал, как эти сообщения работают, что те два параметра, в которых я отправлял коды клавиш, могут также содержать указатели и посылать окнам гораздо больше, чем пара байт. Вот это и хочется изучить. Тем более, есть программы/интерфейсы, в которых кнопки отличаются от обычных и не определяются через сканер InqSoft, но как-то они ведь работают.


            1. artmv32 Автор
              10.01.2020 22:36

              WM_DATA позволяет отправлять массив байт другому окну.


        1. artmv32 Автор
          10.01.2020 22:34

          Об этом будет когда дойдём до того как Windows обрабатывает сообщение от клавиатуры.


    1. awolfman
      10.01.2020 12:16

      Ну и потом 330 000 одних только API, что же вы хотите?)


      Плохому танцору всегда что-то мешает…


  1. rrust
    09.01.2020 20:03
    +1

    про клавиатурный ввод — это не очень интересно. Гораздо интереснее было бы узнать про взаимодействие драйверов дисков и файловых систем. Особенно про возможность изменения констант кэширования и буферизации.
    Например, винда сильно уменьшает время хранения буферов (на запись) метаданных для Removable Media.
    А еще про разницу между Fixed Media и Removable Media. К примеру USB флэшка может быть Removable или Fixed, это всего лишь 1 бит в конфигурации устройства. Хотя USB устройство и так подразумевает возможность извлечения, но винда резко меняет поведение если устройство объявляет себя Removable, при том что USB HDD (Fixed Media) вполне себе нормально живут.
    Кстати SATA устройства тоже могут быть извлекаемые (eSATA), но через API далеко не просто докопаться внешнее это устройство или внутреннее. Да, даже версию USB у флэшки выше 2.0 не узнать через стандартный API, она всегда возвращается 2.0.
    И почему я могу читать-писать сектора у дисковых устройств своей прогой, но никак не могу подключить свой обработчик файловой системы без подписанного драйвера?


    1. artmv32 Автор
      09.01.2020 20:15
      +1

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

      Windows запрещает загружать не подписанные драйвера. Вы пробовали эти команды, они для тестирования, а не для продакшена:
      bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS
      bcdedit -set TESTSIGNING ON


      1. rrust
        09.01.2020 20:27

        да меня больше не драйвера интересует, а возможность временно ускорить дисковые операции например при заливке образа винды и раскатывания драйверов. Слишком много операций сброса дисковых буферов и их ожидания приводят к катастрофически медленной работе дисковой системы. К примеру, простое удаление файла это одна из самых медленных операций файловой системы, которое практически не распараллеливается.
        Попробуй-ка быстро удалить тысячи файлов, а вот не получится потому что винда должна сбросить метаданные на диск много раз для КАЖДОГО файла. Хочу гибкости в настройке поведения буферизации через API!
        А зачем винда для добавления драйверов требует сперва извлечь все файлы драйверов на диск, а потом их КОПИРУЕТ к себе вместо переноса. А ведь каждый драйвер можно было бы прямо целым CAB файлом подключать и хранить, что резко бы уменьшило количество файлов на диске и соответственно количество дисковых операций.


    1. dartraiden
      10.01.2020 03:46

      без подписанного драйвера

      Если что — обращайтесь, подпишу бесплатно ;)
      (правда, с некоторыми нюансами, которые не позволяют применять это в продакшене, но и отключать у себя на машине проверку подписи больше не придётся, так что, если это что-то самописное для личных нужд, то вполне вариант)


      1. Evengard
        10.01.2020 11:50

        У вас есть сертификат, или вы знаете какую-то тайну?


      1. artmv32 Автор
        10.01.2020 14:05

        Мне тоже интересно ^_^


    1. alex-khv
      10.01.2020 10:20

      Версию флешки можно узнать через USB_NODE_CONNECTION_INFORMATION_EX

      там будет USB_DEVICE_SPEED enumeration


      1. rrust
        10.01.2020 13:38

        если речь все-таки идет про протокол USB у текущего подключения у флэшки, то меня СОВСЕМ не радует необходимость нахождения USB ноды по букве диска.
        К тому же USB_DEVICE_SPEED максимум показывает USB 3.0, а как же USB 3.1 Gen2 или USB 3.2 Gen 1x1, 1x2, 2x1, 2x2?
        Я пользуюсь STORAGE_ADAPTER_DESCRIPTOR, где есть BusType, BusMajorVersion и BusMinorVersion, который всегда показывает USB 2.0


        1. Dee3
          13.01.2020 01:21

          Использую для этих целей UsbTreeView показывает все данные о шине и устройстве


          1. rrust
            13.01.2020 09:53

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


  1. MinimumLaw
    09.01.2020 20:23
    +5

    Нда. Буквально заставил себя прочитать всю статью, чтоб потом не было комментариев в стиле «не читал, но осуждаю». Впечатление «смешались в кучу кони, люди, мечи, секиры топоры и залпы тысячи орудий слились в протяжный вой» после прочтения только усилилось. Нет, серьезно — складывается ощущение что автор хотел запутать даже тех, кто хоть что-то понимает.

    Вообще, адресовать такую статью «студентам технических специальностей» по мне преступление. А после фразы «Материнскую плату можно рассматривать как колонию микроконтроллеров которые общаются между собой через шины и через них циркулируют данные от подключенных устройств к процессору и обратно» захотелось убивать. Завершил разрыв мозга притянутая к уровню радиоэлементов архитектур клиент-сервер и уровень виртуальной машины вместе с Hyper-V.

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

    Если ученый не умеет популярно объяснить восьмилетнему ребенку, чем он занимается, значит, он шарлатан.


    Думаю, она относится не только к ученым, но и к любым людям, считающих себя специалистом в какой-либо отрасли. Так вот — ваш текст с трудом понимает 40-летний системщик (и многое в нем считает неправильным по разным причинам), а уж восьмилетнего ребенка или думающего «студента технических специальностей» он просто раздавит.


    1. Costic
      09.01.2020 22:30

      Согласен с вашей оценкой. Много текста и всё на разные темы. Про клавиатуру ничего не написали. Может быть начнём с WM_CHAR, WM_KEYDOWN, GetKeyboardState, GetAsyncKeyState?
      А если уж нарисовали биполярный транзистор, то писать надо про MS-DOS, io.sys.


    1. ormoulu
      10.01.2020 00:01
      +2

      Хмм… Мне все понятно, многое интересно. Насчет студентов не скажу, вероятно, будет зависеть от специальности.


      1. MinimumLaw
        10.01.2020 07:09

        А можно узнать Ваш социальный статус? Вы студент? Или работаете (в какой отрасли и лучше с направлением)?


    1. artmv32 Автор
      10.01.2020 01:54

      Вам непонятно как это всё соотносится друг к другу?
      Вы не понимаете почему в этой статье про клавиатуру написано так мало?
      Неакадемичность изложения?


      1. MinimumLaw
        10.01.2020 07:03

        Как бы вам сказать… Есть два пути. Один от кнопки на клавиатуре, через контроллер кнопок в ней, через интерфейс в ней же, через контроллер интерфейса на плате, через процессор в режиме ядра в пользовательской прикладной задаче. И только после этого что-то говорить про Windows — специфичные моменты. Или наоборот — от Windows'специфики к кнопке на клавиатуре. Если при этом хочется упомянуть виртуализацию — то пожалуйста. Но не надо ее упоминать везде по делу и без.

        И, конечно, нет никакой «колонии микроконтроллеров» на материнской плате. Все же микроконтроллер — это некоторое процеcсорное и программируемое устройство. А на материнской плате есть «колония контроллеров ввода-вывода» — они имеют крайне мало общего с продукцией Microchip, Atmel, ST-Microelectronics и им подобным. Хотя бы потому, что не содержат в подавляющем своем большинстве вычислительного ядра. Если где и есть микроконтроллер, так только непосредственно в самой клавиатуре (особенно Китайцы очень любят ставить контроллеры общего назначения в свои мега-клавиатуры с подсветкой) или мыши.

        Неакадемичность можно только приветствовать. Но ведь фактическая точность от академичности текста зависеть не должна. Электронные компоненты имеют свое деление. А вы даже не удосужились на него посмотреть. Резисторы и конденсаторы (которые начиная со школы изучаются как пассивные элементы) приравнять к полупроводникам… Да еще и обосновать это тем, что «в составе микросхем же они есть» — это уже не «неакадемичность».

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

        И одно дело когда подобная чушь идет от маркетологов и прочих менеджеров, и совсем другое когда от человека, который «работает в Microsoft над ядром ОС Windows 10». Все же фактическая точность обязательно должна быть.

        Впрочем, могу и похвалить. Мне понравился ваш подход и попытка объяснить разницу между режимом ядра и режимом пользователя. Вот тут есть камень предкновения для очень многих программистов (включая тех, кто считает себя системщиками). Увы, но боюсь даже это понятно мне, но не «широкой публике». Но подход именно в этой части однозначно правильный.


        1. alex-khv
          10.01.2020 10:30

          В Windows 10 применяется виртуализация, даже если явно не включать hyper-v.

          Настройки безопасности/изоляции ядра/контроль целостности памяти.

          Windows Defender Application Control and virtualization-based protection of code integrity


        1. artmv32 Автор
          10.01.2020 12:05

          Любите вы позадираться ). Я считаю что эту тему надо объяснять именно в таком порядке.

          Не будучи экспертом в теме радиоэлектроники скажу, что насколько я знаю не только порты ввода-вывода обладают прошиваемыми контроллерами, как минимум чип с UEFI (BIOS) содержит прошивку. Такой большой чип как Южный мост (называйте как хотите, хоть PCH) навряд ли не содержит никакой прошивки. Принципиальные различия между чипами человек разберёт если захочет погружаться в эту тему. Для общего понимания работы машины достаточно и такого объяснения. Между прочим я нигде не утверждал, что конденсатор это полупроводник.

          Академический подход к тому что я опишу в нескольких статьях это обособленное изучение предметов в списке ниже в течение 5 лет в надежде что человек сам соберёт их в общую картину:

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

          для того чтобы 90% выпускников следующие 10 лет писали web-приложения, мобильные приложения, пользовательские программы или делали управленческую карьеру. Это неэффективное распоряжение временем, зато академически точно.

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

          Вам трудно угодить, спасибо за похвалу.


          1. alex-khv
            10.01.2020 12:22

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


          1. MinimumLaw
            10.01.2020 12:27

            Чип с UEFI (BIOS) — это обычная микросхема памяти. Прошивка в ней, конечно, хранится. Но именно храниться. Исполняется она уже не на нем, а на основном процессоре или выделенном процессоре рядом. Подробности тут неоднократно CodeRush рассказывал (за что ему большое спасибо).

            Про внутреннее устройство мостов знает только их производитель. Я не производитель — потому не знаю. Но имею все основания предполагать, что никакой даже скрытой от конечного пользователя прошивки там нет. Там железная логика. Впрочем, притянуть за уши, конечно можно. Железная логика такого уровня давно разрабатывается на языках HDL (hardware description languges). Так что если объединять пассивные компоненты и полупроводники (картинку смотрим — там и резисторы с конденсаторами обведены рамочкой Semiconductor Devices), то в принципе можно сказать что и мосты — одна сплошная прошивка. Но по факту любой мост — всего-то окно в памяти (регистры даже на x86/x64 уже дикое legacy и это правильно) и набор каналов прерываний и прямого доступа к памяти.

            Ну и про устройство автомобиля. Лук — он многослойный. Один слой как педали нажимать и руль крутить, другой — бензин и омывайку заливать, третьи — предохранители и эксплуатационные жидкости (масло), а дальше системы питания и выхлопа, подвески, дифференциалы, а если надо глубже, то химия, материаловедение… Вы в заголовке очень глубоко замахнулись. Но у меня после прочтения осталось стойкое ощущение, что вы путаете масло ГУР, двигателя и коробки передач. Формально все это масло. Все они моторные. Но обобщать их… Не правильно, что ли.


            1. alex-khv
              10.01.2020 12:31

              Нет в мостах никакой железной логики. И прошивки там есть. Работающие на внутреннем CPU. Intel Management Engine

              После старта питания. Еще до запуска CPU, работает куча контроллеров. Подготавливающие всё для запуска CPU.


              1. MinimumLaw
                10.01.2020 13:19

                Нет в мостах никакой железной логики.


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

                По контроллерам. Хорошо MEI или ее аналог. Принято. Я, к слову, писал о «выделенном процессоре рядом» на котором исполняется часть кода из микросхемы памяти с UEFI BIOS. Один найден и засчитан. А еще? Один на кучу совсем не тянет.

                Допустим, в ноутбуках есть мультиконтроллер. Может ли (и должен ли) он работать до старта ЦПУ я не знаю. Но, допустим, может. Два. На геймерских платах местами попадаются контроллеры, отвечающие за подсветку (не могу пруф найти — но вроде даже здесь кто-то с ним ковырялся). Три. Уже куча? Ну ладно. Пусть будет куча и каждый со своей прошивкой.

                Нет, конечно можно найти микросхему EEPROM в которой хранятся VID/PID для USB хаба. Наверное, можно сказать что и там работает какая-то прошивка.

                Хорошо. Пусть будет так. Пусть будет толпа контроллеров. Почти убедили.


                1. artmv32 Автор
                  10.01.2020 13:30

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


                  1. MinimumLaw
                    10.01.2020 13:42
                    +2

                    А хороший вопрос, когда он задан именно так.

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

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


                1. artmv32 Автор
                  10.01.2020 13:56

                  Вот материнка из 1981го года, IBM 5150.


                  1. shnegs
                    10.01.2020 14:06
                    +1

                    Все эти жуки в основном память да логика. Где там микроконтроллеры то?


                    1. Daimos
                      13.01.2020 09:16

                      Как минимум я вижу 8255 (или i8255) — микросхема контроллера программируемого параллельного интерфейа — это именно микроконтроллер.
                      Плюс ниже него еще контроллер прямого доступа к памяти 8237
                      Под процессором стоит контроллер Intel 8259 — семейство программируемых контроллеров прерывания
                      И еще есть Intel 8253 — микросхема программируемого трёхканального таймера и счётчика интервалов — это в общем тоже программируемый контроллер, хотя и не такой мощный как предыдущие.


                      1. rrust
                        13.01.2020 09:40

                        все-таки я бы различал контроллер и микроконтроллер. В данном случае 8255 это не микроконтроллер, у него нет процессора и программы. Только начиная с PC AT, на материнке появляется отдельный микроконтроллер, который начинает работать еще до CPU.
                        А контроллером может быть любое достаточно простое управляющее устройство — конечный автомат, к примеру контроллер питания


                  1. MinimumLaw
                    10.01.2020 14:20
                    +1

                    Милые сердцу раритетные железки. К счастью, в те времена все было сильно проще. Есть процессор, которые по системному сбросу выставляет на шину адрес, а на шине по этому адресу расположена микросхема BIOS (с параллельным интерфейсом), который и начинает выполняться. А вся обвязка в виде контроллеров клавиатуры и иже с ним в виде отдельных железных микросхем подключенный к той же шине. Все просто, красиво и понятно. Не чета современным.


                1. alex-khv
                  10.01.2020 14:19

                  — Контроллерам не надо работать на частоте процессора.
                  — Super I/O есть не только в ноутбуках.
                  — Прошивки есть в самом CPU и они обновляются. Потому как x86 Intel внутри содержит RISC процессор.
                  По этой аналогии во многих чипах не просто железная логика. Там свой CPU с RAM и прошивкой (звук, сеть, sata и т.д. )
                  Взять скажем сетевую карту. Как без CPU сделать TCP Offload?


                  1. MinimumLaw
                    10.01.2020 14:38
                    +1

                    И все же, и все же…

                    В SSD или HDD есть контроллер. И память. И микропрограмма. И нужна она для самых разных функций. При этом, собственно упаковкой данных в интерфейс в нем занимается выделенный аппаратный блок. Слишком не те скорости.

                    Но контроллер SATA (если он именно контроллер SATA, а не железный RAID) — по сути банальный мультиплексор, хоть и усложненный буфером данных и рядом DMA'шных каналов. И памятью, его рулит отнюдь не микроконтроллер в «классическом» понимании этого слова.

                    Посмотрите так любимый многими STM32. ARM отдельно, а контроллеры USB (что хоста, что устройства), MMC, TFT LCD — отдельные IP блоки, которые доступны только через окно в памяти. Я не знаю в деталях внутреннее устройство этих блоков, но если верить структурным схемам в документации то нет там никакой отдельной программы. Типичные цифровые автоматы с жесткой логикой работы.

                    Что до микрокода… Поверьте, тут все не так однозначно (с) Иначе та же Spectre не наделала бы столько шума. Не все и не всегда им можно исправить.


                    1. alex-khv
                      10.01.2020 14:46

                      Spectre использует уязвимость, которая заключается в наличии самих блоков процессора (предсказания, кэширования). risc внутри cpu просто потребляет данные из этих блоков.

                      То что контроллер никак не виден программно, со стороны программиста через код CPU, не означает что это не контроллер со своим ALU.


                      1. MinimumLaw
                        10.01.2020 14:56
                        +1

                        Согласен. Но это точно также не обозначает автоматически наличия там ALU со своей микропрограммой.

                        А дальше вопрос ее наличия или отсутствия — скорее вопрос веры. Я, изучавший конструирование цифровых автоматов, склонен считать что ее там нет. Видя регистры управления и зная подаваемые сигналы тактирования я могу представить как именно реализован такой автомат без ALU. Но, вполне естественно, не могу быть в этом уверенным на все 100 процентов.


                1. Arcuen
                  10.01.2020 14:19

                  А как же быть с, например, ASM1061? Вполне себе контроллер. На некоторых материнках он и его сотоварищи используются для расширения имеющихся портов SATA. Или звуковые чипы от тех же Realtek?


                  1. MinimumLaw
                    10.01.2020 15:19

                    По ASM1061 — я все же склонен считать, что там жесткая логика. Хотя, 20МГц кварц в обвязке безусловно на что-то намекает… И намекает сильно больше, чем «optional 64K Bytes SPI flash». Я не разработчик чипа. Потому уверенно сказать не могу.

                    По звуку. Даже «широко известная в узких кругах» микросхема кодека SGTL5000 по документации содержит в себе DSP, отвечающий за цифровую фильтрацию и работу алгоритмов автоматического регулирования уровня записи (ALC). Возможно, там реально DSP. А может быть и нет. Я такому раскладу не удивлюсь. Что до «крабов» — то я тоже склонен считать, что эффекты типа «стадион» или «ванная комната» это работа драйвера и использование CPU. Впрочем, AWE32 в свое время содержала богатый DSP. Но ведь это уже периферия. К тому же довольно жестко специфичная.


                1. drWhy
                  10.01.2020 17:11

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


                  1. MinimumLaw
                    10.01.2020 20:23

                    Сарказм: включен

                    Конечно. Системная память в случае северного моста — это очень низкоскоростное устройство. Можно лагать почем зря. Или контроллер интегрированного дисплея (который должен получать фреймбуфер из системной памяти) может быть не просто медленным, а просто супер медленным. Любого контроллера хватит, чтоб эти вещи окучить.

                    Сарказм: выключен

                    Надо к Intel на поклон идти. И смотреть документацию на тот же PCH. Возможно и есть там что-то. Но точно не основное. А мосты и раньше были всего-то объединением на одном чипе горки развесных контроллеров и шинных интерфейсов. Не думаю что и сегодня ситуация резко поменялась. По сути там те же «развесные» корневые хабы для PCI/PCIe, контроллеры SATA/USB и все такое.


                    1. drWhy
                      10.01.2020 20:35

                      Так контроллер памяти же в процессоре, как и графика. Или мы о разном?


                      1. MinimumLaw
                        10.01.2020 21:47

                        Контроллер, тот который обсчет делает — да, в процессоре. А сериализаторы, которые DP или HDMI формируют в PCH. Вот и получается, что фреймбуфер 60 раз в секунду должен летать между памятью (и ее контроллером в CPU) и PCH. И это не единственное, что между ними должно обмениваться.


                        1. drWhy
                          11.01.2020 00:18

                          Одно время были популярны карты DVI ADD, в которых стоял формирователь, довольно скромный по размерам чип, практически не греющийся. Встречал вообще программную реализацию — попалась плата от материнки Asrock, на которой из активных элементов было только три транзистора. На других материнках не завелась, в драйверах видео ничего особенного не нашёл, возможно, в BIOS собака порылась.
                          DVI_ADD


                          1. agorbylev
                            11.01.2020 03:48
                            +1

                            У меня подобное на чипсете Intel G45/G43 работает (до сих пор) под Windows 10, только ещё более круто — Display Port + DVI:) Обеспечивает аппаратно DirectX 10. Очень удачная материнская плата и BIOS от AsRock.


                            1. drWhy
                              11.01.2020 10:15

                              Вероятно работа под Windows 10 даже не заслуга MS — они бы точно не пошевелили пальцем, чтобы продлить жизнь устаревшему железу. Судя по всему, функциональность DVI-ADD карт чисто аппаратная и не требует поддержки со стороны драйверов. Т.е. это просто продолжение встроенного видеоядра, добавленные детали, недостающие на материнской плате. Там, судя по всему, простая быстрая программируемая логика.

                              Пробовал DVI-ADD на более новом чипсете — не завелось.

                              AsRock вообще молодцы. Когда начинали, были самым дешёвым во всех смыслах производителем, как сейчас BioStar — экономили на спичках, ставили самые дешёвые компоненты, хотя ещё были дочкой ASUS. И первыми выходили из строя. Потом резко изменили стиль, перестали экономить на компонентах и стали выпускать материнки с нестандартной разводкой и функциональностью. В том числе, по-моему, DVI-ADD впервые появились именно у них.
                              При этом цена осталась вполне привлекательной на фоне увлёкшихся фантиками ASUS и Gigabyte. Также МП Asrock всегда лучше укомплектованы при меньшей цене, а некоторые решения уникальны.

                              У меня сложилось впечатление, что в определённый период AsRock получила ощутимую поддержку от кого-то из грандов индустрии, возможно, стала производственным полигоном Intel (HP, Dell). Достаточно взглянуть на ассортимент серверных платформ AsRock, чтобы в этом убедиться. Неоткуда третьеразрядному производителю взять достаточно инженерных ресурсов для разработки и поддержки такого широкого спектра инженерно-ёмкой продукции.


                          1. MinimumLaw
                            11.01.2020 10:23
                            +1

                            К стыду своему с такими не сталкивался. Но да, речь ровно о том же. Полагаю, что на картинке часть от платы Fujitsu-Siemens D2841-A11. Вот что по нему удалось нарыть.

                            Данный DVI-D адаптер устанавливается в слот для видеокарт PCI Express x16… Максимальным разрешением, которое поддерживает DVI-D адаптер D2823-A11 является 1920 х 1200 точек с частотой обновления 60 Гц.


                            В рамках обозначенной темы, важен интерфейс. В данном случае это (если верить нтернету) PCI-e x16. И в варианте с мостом, и в варианте с PCH этот интерфейс уходит непосредственно с CPU. Смеху для можно посчитать пропускную способность 1920х1200х3(RGB888 — 24 бита)х60 — почти 400 мегабайт в секунду.

                            Я думаю, что вопрос о микроконтроллере, способном ворочать данными с такими скоростями будет неуместен. Конечно и безусловно тут исключительно жесткая логика. Ну, и еще раз — в случае с PCH это не единственные данные, которые гуляют между CPU и PCH.


                            1. drWhy
                              13.01.2020 11:39

                              За всем не уследишь. Но меня до сих пор терзает возможность программного вывода HDMI с PCI Express шины, одно время был актуален вывод на несколько дисплеев.
                              Валяется плата от материнки AsRock, типа HDMI ADD, на которой из активных элементов присутствует только три буферных транзистора. Конечно возможно, что на этой материнке есть какой-нибудь грязный аппаратный хак типа как на телефонах Motorola аналоговые наушники подключались к разъёму mini-usb или на некоторых ноутбуках через комплектный переходник с vga разъёма выводился компонентный сигнал на телевизор. Но не вижу в этом смысла, проще было поставить на материнку hdmi разъём, а не городить переходной слот.


                              1. MinimumLaw
                                13.01.2020 12:04

                                Сложно так судить. Нужна как минимум фотография.

                                Включив режим телепата могу предположить, что то, что вы считаете за транзисторы на деле является защитой от статики (ESR), а HDMI'шные дифпары уходят прямо со слота PCI-e. Там же по классике есть и I2C для DDC канала. Возможно, BIOS если считывает правильные данные DDC просто включает на эти пары HDMI сигналы. Почему при таком раскладе просто не поставить слот — не знаю. Видимо были на то свои причины. Но еще раз — это предположение в режиме телепата. Не более того.


                    1. alex-khv
                      11.01.2020 00:56

                      Если учесть что автор статьи ведёт речь про W10, то значит MotherBoard надо рассматривать современные.
                      В абсолютном большинстве ПК по всему миру, в данный момент в MB вставляется только один контроллер — видеокарта.
                      В ноутбуках вообще всё интегрировано.
                      Так что между MotherBoard для Intel 80286 и современной, огромная пропасть.


            1. artmv32 Автор
              10.01.2020 13:05

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


              1. MinimumLaw
                10.01.2020 13:32
                +1

                Да бросьте вы. Все проще. Я и не возьмусь. Это тема не на статью, а на целую книгу. Причем книга эта будет компиляцией из документации, а потому совершенно не интересна. А про не могу объяснить… Могу. В курилке. Или в обеденный перерыв. Заранее предупредив, что часть моментов я сознательно буду сильно упрощать, но если интересно то расскажу в подробностях. Меня, к слову, об этом часто просят. Но формат вольного рассказа у офисной доски мне ближе, чем статья на хабре. До сих пор ни одной написать не смог. Не побороть мне внутреннего перфекциониста.

                Я реально рад тому, что статья Ваша пришлась аудитории хабра по вкусу. Впрочем, судя по комментариям, вопросы скорtе не по самой статье, а по работе (в) Microsoft.

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


                1. Serjone
                  10.01.2020 17:23

                  А где вас можно послушать? Очень интересно.


                  1. MinimumLaw
                    10.01.2020 21:51

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


                    1. Serjone
                      10.01.2020 22:07

                      Питер? Не часто там бываю =(
                      Но деятельность таки планирую менять. Или даже место работы.


                      1. MinimumLaw
                        10.01.2020 22:11

                        Он самый. Не знаю. Надо бы, конечно, собраться да написать хоть что-то. Но все или мелко, или слишком глобально. Или банально. Не хочется документацию переводить на русский. Тем более что старая присказка из 90-х о том, что документация бывает либо русской либо правильной актуальна и поныне.


                        1. Serjone
                          10.01.2020 22:37

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


        1. TimIskandarov
          10.01.2020 22:40
          +1

          Ваш комментарий понравился, но резисторы и конденсаторы вполне можно причислить к полупроводникам. Дело в том, что Вы пишите о резисторах и конденсаторах из курса электротехники, а автор говорит о резисторах и конденсаторах из курса интегральной схемотехники, то есть это резисторы и конденсаторы в интегральном исполнении на полупроводниковой подложке. Более подробно можете посмотреть например в пособии Миндеевой Аллы Алексеевны "Микросхемотехника"


          1. MinimumLaw
            11.01.2020 00:18

            Тут есть некоторый тонкий момент. Конечно, отчасти так и есть. Но лишь отчасти.

            Если мы спускаемся на уровень компонентов и ключей, то разумно все же пользоваться терминологией именно этого уровня. Более того в разное время были мало того что разные методики формирования полупроводников на кристалле, так еще и пассив не всегда был чисто полупроводниковым. Сейчас не вспомню, но была отличная статья вроде как от Analog Devices и историей микросхемостроения. От сборок до наших дней. Там много было интересного. И про пассив в кристалле, и про MEMS, и про полупроводники. Если вспомню где я ее видел — пристегну ссылку. Довольно давно дело было. Да и здесь, на хабре есть отличные статьи от amartology Они, конечно, не совсем об этом, но разные поколения микросхем в них прекрасно различимы. Всегда приятно его почитать.

            На самом деле можно еще ниже. Я удивляю новоиспеченных системщиков рисуя им логические элементы, триггеры, регистры и прочие элементы на электромагнитных реле. Да и тут были статьи про построение компьютера на реле. Потом лампы. Их незаслуженно забыли, но ключи на них крайне простые и интуитивно понятные. Силно проще и понятней тех же транзисторов. Много интересного есть в самых нижних слоях компьютерных систем. Не меньше чем в верхних.


            1. amartology
              11.01.2020 00:45
              +1

              Если интересно, я могу написать о разных видах элементов на кристалле, и активных, и пассивных. Про МЭМСы и оптику придется сначала покопать, а обо всем остальном я и так знаю достаточно хорошо для того, чтобы рассказывать другим людям)

              P.S. Спасибо за теплые слова)


              1. MinimumLaw
                11.01.2020 10:50
                +1

                Ваши статьи всегда интересно читать. И еще одну я, безусловно, могу только приветствовать.


                1. amartology
                  11.01.2020 14:04

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


          1. Serjone
            11.01.2020 00:41

            Особенно красиво выглядят полупроводниковые резисторы и конденсаторы на иллюстрации к тексту…
            https://habrastorage.org/getpro/habr/post_images/210/226/f1d/210226f1dc4ff07daee3f1c36e04c164.png


            1. viordash
              11.01.2020 01:04
              +1

              :) это все гугл. Первая ссылка в гугле на semiconductor devices


    1. NikitOS9
      10.01.2020 11:16
      +1

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

      >А можно узнать
      основная работа java, для себя stm32, C, rust


      1. MinimumLaw
        10.01.2020 11:52

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

        Про пояснение по работе — спасибо. Однако тема настолько обширна, что накрыть ее одной статьей почти наверняка невозможно. Попытаться можно, но накрыть… Боюсь толковое описание одного только только i8042 (классический контроллер клавиатуры PC) или описание того как именно взаимодействует клавиатура USB (USB device, USB host, HID class и т.д.) с операционной системой займет не меньше, чем вся данная статья. Мне привычнее работать именно с этими слоями. И именно к их описанию у меня вопросы. Я мало что знаю про уровень ядра Windows, а тем паче про прикладной уровень в ней. Потому и стараюсь говорить только о нижнем уровне.

        Но ведь и претензии не к сжатости изложения (она-то как раз понятна), а к горке фактических неточностей (которые так и хочется назвать ошибками — оно ближе к истине будет).


    1. 0xd34df00d
      11.01.2020 03:57

      Если ученый не умеет популярно объяснить восьмилетнему ребенку, чем он занимается, значит, он шарлатан.

      Лимит по времени есть?


      Я бы посмотрел, как специалист по алгебраической геометрии или высшей теории категорий объясняет ребёнку, чем он занимается.


      1. drWhy
        11.01.2020 10:25

        Ребёнки бывают разные. Существуют математические спецшколы. Один знакомый ребёнок, делая уроки, объяснял бабушке решение. Бабушка, всю жизнь преподававшая вышку в вузе, сказала, что решение неправильно. Мама, заместившая бабушку на кафедре, подмигнула, а когда бабушка ушла сказала, что решение правильное, а бабушка просто с ним не сталкивалась.


        1. 0xd34df00d
          11.01.2020 19:53

          Существуют математические спецшколы.

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


          Мама, заместившая бабушку на кафедре, подмигнула, а когда бабушка ушла сказала, что решение правильное, а бабушка просто с ним не сталкивалась.

          Так решение-то правильное было, или это педагогический приём, чтобы ребёнок не расстраивался?


      1. MinimumLaw
        11.01.2020 10:40
        +1

        Я бы посмотрел...


        Хм… Старая байка про математиков. Когда он спрашивает у физика «И в чем же математический смысл Вашей физической абстракции»?

        На самом деле не путайте «научить восьмилетнего ребенка...» с «объяснить восьмилетнему ребенку...» Научить — безусловно нереально, а вот если не получится объяснить — значит точно что-то не так. И, к слову, названные Вами отрасли вполне объяснимы не только восьмилетнему ребенку, но и даже детсадовцам. Пробуйте. У Вас точно получится.

        Понимаю, что не совсем про то, но вспомните как хорошо получалось объяснять сложные вещи простым языком Якову Исидоровичу Перельману. В 8 лет — это второкласник. Который даже таблицу умножения знает.


        1. 0xd34df00d
          11.01.2020 19:51

          И, к слову, названные Вами отрасли вполне объяснимы не только восьмилетнему ребенку, но и даже детсадовцам.

          На каком уровне? Я не представляю, как это объяснять иначе, чем «я придумываю волшебный мир закорючек, которые живут по определённым мной правилам, и наблюдаю за их жизнью». Но это, в принципе, к любой области математики подходит.


          Понимаю, что не совсем про то, но вспомните как хорошо получалось объяснять сложные вещи простым языком Якову Исидоровичу Перельману. В 8 лет — это второкласник.

          Перельмана я и сам в детстве читал. Но это, во-первых, не самая тонкая книга, а, во-вторых, объясняет немного не то. На книжку по базисам Гребнера в девятом, кажется, классе меня уже не хватило (хотя я был в физмат-школе).


          1. MinimumLaw
            11.01.2020 20:02

            Да ладно. Учу умные машины рисовать и строить картинки как в реальном мире. Видишь вон тот лопух? Для компьютера его форму и изгибы надо описать на языке цифр. А еще о ветре, который это лопух колышет надо тоже как-то объяснить компьютеру. Да так, чтоб результат был прямо как вон там у калитки сейчас.

            И что, не похоже на рассказ второкласнику про алебраическую геометрию?


            1. 0xd34df00d
              11.01.2020 20:10

              Это максимум то, что в вузах обычно называется аналитической геометрией и рассказывается на первом семестре первого курса. Алгебраическая геометрия чуточку шире, и рисовать там, насколько я знаю, совершенно не обязательно. И если вы не занимаетесь этим самым рисованием, то вы ребёнку соврёте.


              В любом случае, если тут ещё можно вытянуть на слове «геометрия», то что вы будете делать с теоркатом или хардкорной теорией типов, непонятно.


              1. MinimumLaw
                11.01.2020 20:24

                Хм… А разве аналитическая геометрия занимается взаимодействием? Она же вроде только описательная (в крайнем случае простейшие перемещения по осям координат)? Далек я от математики… Простите.

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

                А вообще кто из нас алгебраический геометр? Вы или я? И да, быть при этом немного «лириком» — навык очень полезный.


                1. 0xd34df00d
                  11.01.2020 20:33

                  Хм… А разве аналитическая геометрия занимается взаимодействием? Она же вроде только описательная (в крайнем случае простейшие перемещения по осям координат)?

                  Да фиг знает, но рисовать при помощи уравнений — это скорее туда.


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

                  Это вычислительная математика и моделирование in silico, как говорится. Снова не то.


                  А вообще кто из нас алгебраический геометр? Вы или я? И да, быть при этом немного «лириком» — навык очень полезный.

                  Не я :) Это я как пример очень абстрактной области привёл. Я-то что-то относительно представляю себе, как что работает, в теории типов, и что-то отдалённо слышал про теоркат.


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


                  Что с восьмилетками делать, непонятно, кроме как сказать «я пытаюсь помочь дядям и тётям создавать более надёжные программы» — но это ж нихрена не объясняет.


                  1. MinimumLaw
                    11.01.2020 23:38

                    Не знаю. Возможно есть из этого правила исключения. Может по-этому нобелевскую премию по математике и не дают ;-) Но в целом, мне кажется что любой профессионал может обьяснить любому неспециалисту цели своей работы. Методы, пожалуй нет, но цели — точно. А самым образцовым вариантом не специалиста совмещенного с любопытством как раз и являются младшие школьники.

                    Впрочем, если настаиваете могу согласиться что это наше с Куртом Воннегута частное мнение. Мне сложно судить о том, насколько оно применимо далеко за пределами сферы моих интересов. Хотя, конечно, надеюсь, что применимо.


                    1. 0xd34df00d
                      12.01.2020 00:33

                      цели

                      А, ну тут всё


                      просто

                      image


                      Не смог найти оригинал на английском, увы.


                      1. MinimumLaw
                        12.01.2020 10:22

                        Последнее, к слову, тоже объяснение. Правда желательно чуть более цензурно. И младшими школьниками оно принимается на ура. Отчасти именно этим объясняется популярность шоу типа «Разрушители легенд», «Наука: сделай сам», «Головоломы» и прочие. Так что вполне тянет на объяснение.


    1. DrGluck07
      11.01.2020 19:32

      Я бы этот пост назвал как-нибудь типа «Крошка веб-разработчик к отцу пришёл...», потому что тут чувствуется явная направленность на программистов, которые страшно далеки от системного программирования.


      1. emusic
        11.01.2020 19:41

        Ну да, в основном для них — пусть хоть в общих чертах понимают, что к чему в потрохах устроено, а то ведь зачастую клепают на своем уровне так, что плакать хочется. :)


  1. Grey83
    09.01.2020 20:41

    Залейте иллюстрации на хаброхранилище. Потому что вместо КДПВ у Вас голубой квадратик с текстом «bandwidth limit exceeded».


    1. artmv32 Автор
      09.01.2020 21:04

      Спасибо, поправил.


    1. Evengard
      10.01.2020 11:53

      Хабра вроде же это автоматически делает.


      1. FTOH
        10.01.2020 16:56

        Замечал, что некоторые статьи из песочницы игнорирует.


  1. hahenty
    09.01.2020 20:55
    +1

    Ого, тут открылся укороченный путь до создателей.

    Был пост про контекстное меню, которое проводит тысячи запросов к накопителю, — что это за фича?

    Ещё где-то было про очистку иконок в трее для завершившихся программ.

    Раскраска темной и светлой тем — это какая подсистема делает? Да и в целом последовательность от прикладной программы до «Windowing and Graphic»? Почему при тёмной теме проскакивают «вспышки» заполнения белым пространства для открывающихся окон программ.


    1. artmv32 Автор
      10.01.2020 01:40

      Это скорее баг, чем фича )
      Всё что видно на экране отрисовывается через DirectX (Windows and Graphics). То что компонует внешний вид окон и элементов управления скорее всего находится в uxthemes.dll.
      У меня тоже тёмная тема и только счас обратил внимание на «вспышки». Может и баг, посмотрят.


      1. drWhy
        10.01.2020 17:22

        Вот кстати, нет ли информации о внедрении X-сервера в Windows с связи с внедрением ядра Linux?


    1. AlexZyl
      10.01.2020 21:16

      Был пост про контекстное меню, которое проводит тысячи запросов к накопителю, — что это за фича?

      В комментах к стате в блоге автора поделились ссылкой на ченжлог insider билда 19008.
      We’ve done some work to improve the launch speed of the taskbar jump lists.

      Но вообще, жаль нет публичного баг-трекера, где можно было бы почитать комментарии разрабочиков Windows о ходе работы над подобными багами. Думаю, многим было бы интересно почитать.


  1. RedCatX
    09.01.2020 23:03

    Меня зовут Андрей Артемьев, я работаю в Microsoft над ядром ОС Windows 10
    Было бы очень любопытно услышать от вас подтверждение или опровержение некоторых мифов связанных с разработкой Windows:
    1) Правда ли, что разработка Windows ведётся в закрытой и охраняемой комнате, в которой нет доступа к интернету, и куда запрещено вносить или выносить любые запоминающие устройства?
    2) Правда ли, что разработчикам запрещено исправлять баги в коде Windows без санкции высшего руководства? И может ли разработчик самовольно добавить какую-то фичу в Windows, и сказать, мол — глядите что я придумал, или за подобное его ждёт лишь наказание?
    3) Правда ли, что разработчикам Windows запрещено в свободное время участвовать в OpenSource проектах, или вести собственные pet-проекты?
    4) Некоторые разработчики Windows пишут статьи, или даже книги, в которых рассказывают о внутреннем устройстве Windows. Как они определяют, что можно рассказать, а что нет? Существует какое-то руководство, вроде «Как не выдать коммерческие тайны Microsoft», или просто каждая публикация перед выходом в свет проверяется компетентным сотрудником?


    1. dartraiden
      10.01.2020 03:50

      3) Правда ли, что разработчикам Windows запрещено в свободное время участвовать в OpenSource проектах, или вести собственные pet-проекты?

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

      В наш открытый проект тоже однажды сотрудник MS прислал пулл-реквест.


    1. artmv32 Автор
      10.01.2020 07:17

      1. Над Windows работает больше 10 000 человек, нас если только в ангар усаживать ). У Microsoft больше 200 зданий в Редмонде и окрестностях, в которых работает ~55 000 сотрудников. Доступ к Интернет есть, вносить и выносить можно любые запоминающие устройства.
      Некоторые особо секретные компоненты вроде PatchGuard находятся в отдельных репозиториях к которым есть доступ только у ограниченного числа людей и над ними работают в помещениях с ограниченным доступом.
      2. Баги фиксятся в порядке приоритета и имеющихся ресурсов, бюрократия в компании небольшая. Можно написать в отдельной ветке свою фичу в качестве эксперимента и потом показать коллегам. Она попадёт в релиз если только:

      • Будет одобрена Program Manager, которые почти все бывшие программисты.
      • Менеджер согласиться выделить ресурсы под реализацию. Менеджеры программисты.
      • Её реализация пройдёт design-review, на котором эксперты в затронутых областях выскажут своё мнение.
      • Она пройдёт code-review, т.е. изменения будут одобрены другими разработчиками. Это обязательное условие для попадания в основную ветку.

      Разработка Windows дело медленное и новая фича может занять неделю как минимум и может ввести регрессии, на которые будут жаловаться другие команды, когда это изменение дойдёт до них. Так что такие вещи надо согласовывать и тщательно проверять. В компании раз в год проводятся Хакатоны и каждый месяц есть Day of Learning в которые можно поработать над своими проектами. Интересные проекты с Хакатонов нередко получают поддержку компании и почти сразу уходят в разработку.
      3. Microsoft сам активно участвует в OpenSource, не думаю что такой запрет есть.
      4. Я думаю они это согласовывают с соответствующим отделом, либо же исходят из имеющихся инструкий о том что есть конфиденциальность. В моём материале ничего конфиденциального нет, всё находится в открытом доступе.


      1. mihmig
        10.01.2020 11:49

        2. да, фичи проходят хоть и маленькую, но «бюрократию», и это правильно.
        А Вы слышали жалобы на настройки в панели управления, которые «скачут» по разделам от релиза к релизу? Как так?


        1. artmv32 Автор
          10.01.2020 12:19

          Ну это ж не я их двигаю )


          1. Serjone
            11.01.2020 13:25

            А кто? Покажите нам этого, мягко говоря, программиста! =)


            1. mihmig
              13.01.2020 15:35

              Да нет такого. Если в деле замешано боле одного человека — виноватого не найти.


      1. drWhy
        11.01.2020 01:15

        А какая ориентировочно конфигурация компьютеров у программистов?


      1. sborisov
        13.01.2020 11:15

        Вы так здорово всё рассказываете, прямо захотелось Windows 10 поставить и попрограммировать что-то windows специфичное…
        (хотя не люблю я WinApi)


  1. drWhy
    09.01.2020 23:48

    Мы рассмотрим какой путь проходит информация о нажатой клавише от клавиатуры до отображения в Notepad.exe.
    В контексте этой статьи было бы значительно остросюжетнее выбрать Excel.


    1. artmv32 Автор
      10.01.2020 01:24

      Здесь без разницы какое приложение в конечном итоге получает ввод, всё сводится к GetMessage/TranslateMessage. Что происходит внутри Excel после WM_KEYDOWN/UP — отдельный разговор.


      1. drWhy
        10.01.2020 16:35

        Понимаю, когда-то писал собственный драйвер-обработчик клавиатурного ввода. Но тем более интересно рассмотреть данную ситуацию комплексно. Поставщик ОС и офисного приложения один (как, впрочем, и Notepad'а), и кроме него некому разобраться в сложившейся непростой ситуации. Конечно это потребовало бы существенных временных затрат и скорее всего неосуществимо. Хотя автор упомянутой статьи провёл титаническую работу по выявлению её причин и даже разработал патч. По возможности просмотрите, пожалуйста, статью, хотя бы бегло.
        Вы, как программист, работающий над ядром ОС и понимающий внутреннюю кухню, могли бы предложить коллегам из другого отдела скорректировать подход к трансляции клавиатурного ввода.


  1. ormoulu
    10.01.2020 00:09
    +1

    ACPI работает через взаимодействие с bios/efi? Вообще, загруженная и работающая ос взаимодействует как-либо с legacy bios? Если да, можете вкратце описать процесс?

    ЗЫ: статья интересная, буду ждать еще.


    1. artmv32 Автор
      10.01.2020 01:26
      +1

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


    1. BiosUefi
      10.01.2020 10:54

      >>ACPI работает через взаимодействие с bios/efi?
      Сама постановка вопроса уже вызывает вопросы. Что вы понимаете под «работает», и что означает «взаимодействие»?

      Биос передал ОС сформированное им ACPI (AML) и переключился в режим SCI.
      В режиме SCI код биоса «не виден» т.е. не вызываем. Хотя UEFI теоретически и поддерживает RT драйвера. Но они считаются «опасными» для безопасности ОС и потому реально не часто используются.

      ОС внимательно AML прочитала и начала/стала ими руководствоваться в способах/методах взаимодействия с текущим HW.
      Если ОС «захочется» она может выйти/переключиться из режима SCI в SMI, где снова будет доступен код/функциональность биоса. Что собственно и происходит при засыпании/выключении (S4/S5) ОС, когда некоторым жуткоспецифическим PCIe(и не только) устройствам требуется особые настройки для «засыпания» и которые ОС не умеет «организовывать».

      Специфика «legacy» не добавляет ничего особенного на вышеупомянутые процессы.


      1. ormoulu
        10.01.2020 13:01

        О, круто, спасибо )
        AML сообщение помещается в какую-то область оперативной памяти? После чего создается прерывание (SCI это же режим обработки прерывания), так ОС узнает о сообщении?

        снова будет доступен код/функциональность биоса

        А как они доступны? Через IO порты? Код биоса грузится в оперативку, на него можно непосредственно передать управление? Что это код приблизительно представляет?


        1. oldschoolgeek
          10.01.2020 17:31

          Я бы предложил уточнить, что именно понимается под «кодом BIOS». 16-битный код BIOS реального режима, который использовался ещё во времена MS-DOS через прерывания, современные операционные системы не вызывают и не используют.

          Если говорить о UEFI runtime services, то, насколько я смог выяснить, что Windows, что Linux используют только variable service.

          Конкретно про ACPI, SCI и SMI очень подробно написано здесь: https:/stackoverflow.com/a/40586456.

          Два важных момента:

          1. ACPI — это не исполняемый непосредственно процессором код, а байт-код, для исполнения которого в ядре ОС есть специальная виртуальная машина.
          2. Спецификация ACPI предписывает использовать SCI для «привлечения внимания» ОС устройствами


          1. S-trace
            10.01.2020 21:11

            У вас ссылка битая, и ведёт на сайт https.com (и это ниразу не сайт про HTTPS))


            1. Busla
              11.01.2020 16:43

              .com добавляет ваш браузер :-)))
              в ссылке всего лишь потерян /
              stackoverflow.com/a/40586456


  1. Pro-invader
    10.01.2020 08:22

    Вот давно мучал вопрос и такая возможность спросить! Прошу сильно не пинать. Я не понимаю такую вещь: возьмем исполняемый файл exe после компиляции, например, С-кода. Говорят, получается машинный код, который исполняется процессором. Но фактически программа выполняется через ОС, то есть выполняется как бы некий двоичный код, который понимает ОС, а ОС вызывает уже команды CPU. Получается, что пользователь в машинный кодах может писать и выполнять программы только до загрузки ОС, например, в самом начале включения компа? И бинарные исполняемые файлы это никакие не машинные коды?


    1. alex-khv
      10.01.2020 09:54

      Код выполняется на CPU.
      У CPU есть инструменты контроля кода для ОС.
      Так что ОС не выполняет никакой код. ОС управляет кодом.
      Можно написать код который будет работать до загрузки ОС. Но это уже будет не программа для ОС. Это будет фактически ОС.


    1. Ti_Fix
      10.01.2020 10:49

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


      1. Pro-invader
        10.01.2020 11:13

        Это мне понятно. Мне не понятно, что касается машинного кода. Он выполняется минуя ОС или через ОС? Допустим, у нас есть два бинарных файла, один для Linux, другой для Windows. В части машинного кода они будут отличаться или нет? Они же выполняются на одном процессоре, значит, по-идее, он должен быть одинаковый?


        1. nick758
          10.01.2020 11:30

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


        1. Evengard
          10.01.2020 12:00

          Отличаться будут, но скорее из-за разницы компиляторов =) Машинный код для Windows, Linux или любой другой ОС в рамках одной процессорной архитектуры (x64, например) совместим. Проблема скорее в API ОС которые дёргает любая userland-программа — это элементарные вещи вроде открытия файла или даже выделения динамической памяти. Они вот отличаются от ОС к ОС.


          1. Evengard
            10.01.2020 12:03

            Ну и да, как написано в этой же статье, ОС вешает на некоторые "опасные" команды свои прерывания, чтобы не позволить userland программе "залезть куда не следует". Так что да, машинный код выполняется непосредственно на процессоре, но при попытке сделать что-то не то ОС превентивно и насильно его останавливает (потому что повесила прерывания заранее).


        1. alex-khv
          10.01.2020 12:11

          Машинный код один и тот же не зависимо от ОС (если мы говорим про x86).
          Но сам код в вакууме ничего не может сделать. Надо взаимодействовать с внешним миром.
          Ввод данных/Вывод. Это организуется через ОС.
          ОС управляет ресурсами ПК. Память, диск, клавиатура, монитор, сеть и т.д.
          Windows напрямую не работает с внешними устройствами, это делегируется сторонним компонентам. Для этого есть абстракция. Грубо говоря HAL.dll и драйверы устройств.

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

          Резюмируя.
          Машинный код бизнес-логики для Linux и Windows одинаковый. Но машинный код для общения с ОС разный. Потому что API ОС отличаются. Форматы исполняемых файлов различаются.
          ОС не выполняет код. ОС сперва загружает с диска в память код, потом передает выполнение кода процессору (через точку входа) и дает коду в вакууме, возможность взаимодействовать с внешним миром.


          1. Pro-invader
            10.01.2020 12:27

            Большое спасибо, теперь понятно.


        1. SystemFault
          10.01.2020 12:50

          Допустим, у нас есть два бинарных файла, один для Linux, другой для Windows.
          Код будет одинаковый. Разным будет способ вызова ОС. А вызывать придется часто — user mode это такая песочница, где без помощи ОС можно разве что чисто вычислительные задачи выполнять.
          Но фактически программа выполняется через ОС, то
          есть выполняется как бы некий двоичный код, который понимает ОС, а ОС
          вызывает уже команды CPU.
          Все почти так и есть. Только код (точнее его разрешенное в user mode подмножество) может выполняться на CPU сам по себе. Но, например, любое общение с периферийными устройствами (экран, клавиатура, мышь, диски, сеть, все USB устройства и т.д.) требует обращения к особым ячейкам памяти — регистрам. А в user mode это запрещено на аппаратном уровне. Т.е. вы делаете вызовы к ОС в формате который понимает ОС, а уже ОС пишет/читает регистры и делает много чего другого.

          Пример действий, требующих вызова ОС:
          • Выделение памяти: да, у вас есть обычно от 4Гб адресного пространства, но это как разреженный массив — реальной памяти там может быть всего мегабайт 10. А попытка обращения за пределы этих 10Мб вызовет исключение — будет вызван код ОС.
          • Чтение/запись файла: нет ни ассемблерных команд, ни доступных вам ячеек в памяти, которые могут вызвать операции чтения или записи. Вы подготавливаете запрос
          • Вывод на экран (текста в консольном приложении, трехмерной графики).
          • Получение сообщений от мыши, клавиатуры, джойстика.
          • Любые операции с потоками (запуск, останов, пауза).
          • Мьютексы, фьютексы, семафоры, критические секции.

          Под 32х и 64х-битный режим машинный код будет разным и на одной ОС.


          1. Dr_Sigmund
            11.01.2020 20:34

            юбое общение с периферийными устройствами (экран, клавиатура, мышь, диски, сеть, все USB устройства и т.д.) требует обращения к особым ячейкам памяти — регистрам


            К портам ввода-вывода, а не к регистрам.


        1. stilic
          11.01.2020 11:02

          Он выполняется минуя ОС или через ОС? Допустим, у нас есть два бинарных файла, один для Linux, другой для Windows. В части машинного кода они будут отличаться или нет?


          1. Всё что программа может сделать сама — делается на процессоре напрямую, минуя ОС. Машинные коды в этой части будут одинаковыми (за исключением разных результатов работы оптимизатора, учитывающего пункт 2)
          2. То, что программа сама сделать не может (вывести на экран, записать на диск, прочитать с клавиатуры) — будет делаться через ОС. Обращение за этим в разных ОС — разное, поэтому машинные коды в этой части будут разными.


    1. artmv32 Автор
      10.01.2020 12:38

      Исполняемый файл, будь то exe или elf имеет определённый формат. Помимо кода в этом файле хранятся данные, ресурсы (иконка, свойства файла), какие dll ему нужны, является эта программа 32бит или 64бит, а может это вообще .Net, манифест приложения с указаниями ОС.

      Когда вы в explorer.exe, Total Commander кликаете дважды на файл или запускаете его через другое приложение (Visual Studio, CMD) по расширению файла Windows понимает что это программа и начинает инициализацию всех структур данных которые в ядре описывают процесс и его ресурсы, в частности главный поток. Как только все структуры данных для главного потока проинициализированы, Image Loader начинает чтение exe файла, откуда достаётся таблица импорта функций из других dll, размер стека потока, manifest и другие данные. Находится main функция (entrypoint), указатель на неё передаётся параметром в специальную функцию и теперь поток доступен для исполнения на CPU. В какой-то момент планировщик потоков назначает его на исполнение. Из виртуальной памяти процесса выбираются машинные коды (машинные инструкции) в которые была скомпилирована функция main и вся программа для исполнения процессором.

      В exe файле упакованы машинные инструкции которые просто отправляются на CPU.


    1. ormoulu
      10.01.2020 13:05

      Исполняемые файлы (если речь не идет об интерпретируемом коде) это машинный код, исполняемый код процессора. ОС грузит исполняемый файл в оперативную память, создает для него необходимое окружение, и передает на него управление.
      Вы можете написать .exe для Windows в машинных кодах, но придется правильно сформировать заголовок и сегменты (нужные для загрузки файла ОС). Некоторые умельцы это делали на спор из консоли :D


    1. stilic
      11.01.2020 10:54

      Но фактически программа выполняется через ОС, то есть выполняется как бы некий двоичный код, который понимает ОС, а ОС вызывает уже команды CPU.


      Нет.
      Фактически выполняет CPU.

      Большую часть времени CPU выполняет машинные команды вашей программы напрямую. ОС только определяет для вашей программы некую «песочницу», и настройки этой «песочницы» передает в CPU, после чего они применяются уже аппаратно с минимальным участием ОС.

      Управление передается в ОС в частных случаях, например, когда ваша программа обращается к участку виртуальной памяти, что отсутствует физически в оперативной. Тут ОС выполняет подкачку с диска.

      Получается, что пользователь в машинный кодах может писать и выполнять программы только до загрузки ОС, например, в самом начале включения компа?

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

      И бинарные исполняемые файлы это никакие не машинные коды?

      То, что скомпилированно из С — это это бинарные = исполняемые = машинные для CPU (с нюансами типа специальных заголовков в файле).

      То, что скомпилировано из Java — это бинарные != машинные (но это машинные для виртуальной машины Java)


      1. oldschoolgeek
        13.01.2020 12:16

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


        Необязательно — могут быть программы и чисто утилитарного назначения, которые полагаются только на UEFI runtime services и могут быть запущены из UEFI shell без загрузки какой-либо ОС.


  1. Pro-invader
    10.01.2020 08:22

    Вот давно мучал вопрос и такая возможность спросить! Прошу сильно не пинать. Я не понимаю такую вещь: возьмем исполняемый файл exe после компиляции, например, С-кода. Говорят, получается машинный код, который исполняется процессором. Но фактически программа выполняется через ОС, то есть выполняется как бы некий двоичный код, который понимает ОС, а ОС вызывает уже команды CPU. Получается, что пользователь в машинный кодах может писать и выполнять программы только до загрузки ОС, например, в самом начале включения компа? И бинарные исполняемые файлы это никакие не машинные коды?


  1. Pro-invader
    10.01.2020 08:27

    Вот давно мучал вопрос и такая возможность спросить! Прошу сильно не пинать. Я не понимаю такую вещь: возьмем исполняемый файл exe после компиляции, например, С-кода. Говорят, получается машинный код, который исполняется процессором. Но фактически программа выполняется через ОС, то есть выполняется как бы некий двоичный код, который понимает ОС, а ОС вызывает уже команды CPU. Получается, что пользователь в машинный кодах может писать и выполнять программы только до загрузки ОС, например, в самом начале включения компа? И бинарные исполняемые файлы это никакие не машинные коды?


  1. Pro-invader
    10.01.2020 08:34

    Вот давно мучал вопрос и такая возможность спросить! Прошу сильно не
    пинать. Я не понимаю такую вещь: возьмем исполняемый файл exe после
    компиляции, например, С-кода. Говорят, получается машинный код, который
    исполняется процессором. Но фактически программа выполняется через ОС, то
    есть выполняется как бы некий двоичный код, который понимает ОС, а ОС
    вызывает уже команды CPU. Получается, что пользователь в машинный кодах
    может писать и выполнять программы только до загрузки ОС, например, в самом
    начале включения компа? И бинарные исполняемые файлы это никакие не
    машинные коды?


  1. Pro-invader
    10.01.2020 08:33

    Вот давно мучал вопрос и такая возможность спросить! Прошу сильно не
    пинать. Я не понимаю такую вещь: возьмем исполняемый файл exe после
    компиляции, например, С-кода. Говорят, получается машинный код, который
    исполняется процессором. Но фактически программа выполняется через ОС, то
    есть выполняется как бы некий двоичный код, который понимает ОС, а ОС
    вызывает уже команды CPU. Получается, что пользователь в машинный кодах
    может писать и выполнять программы только до загрузки ОС, например, в самом
    начале включения компа? И бинарные исполняемые файлы это никакие не
    машинные коды?


  1. Pro-invader
    10.01.2020 08:55

    Вот давно мучал вопрос и такая возможность спросить! Прошу сильно не
    пинать. Я не понимаю такую вещь: возьмем исполняемый файл exe после
    компиляции, например, С-кода. Говорят, получается машинный код, который
    исполняется процессором. Но фактически программа выполняется через ОС, то
    есть выполняется как бы некий двоичный код, который понимает ОС, а ОС
    вызывает уже команды CPU. Получается, что пользователь в машинный кодах
    может писать и выполнять программы только до загрузки ОС, например, в самом
    начале включения компа? И бинарные исполняемые файлы это никакие не
    машинные коды?


  1. WebMonet
    10.01.2020 09:06

    Возможно вопрос не по теме. Можно ли как-то превратить компьютер под управлением любой Win в «большую Ардюину»? Или как можно «помигать светодиодом» через устройство, воткнутое в PCI? В какую сторону копать?


    1. artmv32 Автор
      10.01.2020 11:27

      Что насчёт Windows IoT? Вообще это возможно и через Desktop Windows, посмотрите Windows Drivers Framework.


    1. alex-khv
      10.01.2020 11:49

      Можно подключить внешний контроллер. Через кучу интерфейсов usb, pci, pci-ex, lpt, com.
      Можно взять готовый SBC с интегрированной arduino. Подобное этой LattePanda


    1. BiosUefi
      10.01.2020 11:56

      >>устройство, воткнутое в PCI?
      Найти «PCI» слот в современных компьютерах не просто, но например PCIе бывает длстаточно часто.
      Искать надо в сторону «pcie io expander», например GW16113 IO Mini-PCIe Expansion Card или ему подобное


    1. oldschoolgeek
      13.01.2020 12:24

      PCI — довольно сложная шина; использовать её для того, чтобы «помигать светодиодом» — это, как говорится, из пушки по воробьям.

      Сейчас проще всего будет взять PCI-Express LPT контроллер (обычно есть в продаже в интернет-магазинах деталей для ЧПУ станков и 3Д принтеров) с опторазвязкой параллельного порта — так риск сжечь что-нибудь в самом компьютере будет минимальным.


  1. alex-khv
    10.01.2020 09:57

    Сумбурная статья.
    Мне лично всё понятно, а значит бесполезно.
    Для студента совсем не понятно. Значит тоже бесполезно.
    Почему? Статья «пробегается по верхам», иногда углубляясь в ненужные детали.


  1. Pro-invader
    10.01.2020 11:58

    А у ОС Windows большие накладные расходы по сравнению с голым железом? Я имею ввиду, что взять, например, игру (чисто гипотетически) на Play Station 1 и эту же игру на этом же железе с OC Windows (понятно, что не встанет), то как изменится быстродействие игры?


    1. artmv32 Автор
      10.01.2020 12:43

      PlayStation 1 — это не голое железо, она имеют свою ОС, которая так же имеет накладные расходы. Одна и та же игра на разных платформах это разные программы. Логика программы та же, но детали платформ (Win и PS1) будут разные. Если это вопрос что быстрее Win или PS1, то я не знаю, это зависит от конкретной задачи.
      Если вопрос что быстрее — аналоговая или цифровая обработка, то конечно аналоговая.


  1. Katasonov
    10.01.2020 12:21

    Скажите, пожалуйста, а вин10 собирает данные о том какие процессы стартовали в какое время и кем? И есть ли какое-то API доступа к этим данным?


    1. alex-khv
      10.01.2020 12:27

      Это собирается на нескольких уровнях, для разных целей.
      Конкретно телеметрия собирает эти данные. Вроде бы общедоступного API к телеметрии нет.
      Другое дело что еще с Windows NT 4, можно собирать такие данные. Но это не телеметрия как в Windows 10.


    1. artmv32 Автор
      10.01.2020 12:48

      Я таких подробностей не знаю. Подобные API навряд ли есть, потому что Microsoft values customer privacy (Микрософт уважает приватность данных пользователей). Этому уделяется большое внимание.

      Есть в Windows такой системный сервис SuperFetch, который собирает статистику запущенных программ чтобы согласно ней пред-загрузить в оперативку данные и бинарники которые эта конкретная программа использует. Это делается для ускорения её загрузки. Если в этот момент внезапно понадобится оперативка, то SuperFetch её быстро освободит от предзагруженных данных.


    1. dmitrymaximov750546
      10.01.2020 16:11
      +1

      А как же. Security Log, событие 4688


  1. emusic
    10.01.2020 13:57

    Андрей, спасибо за статью. Есть ли у Вас какие-либо связи с разработчиками ядерной части звуковой подсистемы (Kernel Streaming)? Уже много лет есть стойкое впечатление, что эта часть стабильно деградирует — в некогда стройной и достаточно эффективной модели с каждой версией Windows создается все больше откровенного хаоса. Очень похоже на лихорадочное навешивание заплаток, без особого понимания того, как это все должно работать. В компании остались люди, которые еще помнят, как это все проектировалось на стыке 90-х и 2000-х?


    1. artmv32 Автор
      10.01.2020 14:10

      Пожалуйста. Если я буду знать суть проблемы то смогу найти того кто сейчас этим занимается. В компании много людей которые по 20-25 лет уже работают там.


      1. emusic
        10.01.2020 23:42
        +1

        Например, в Vista добавили хороший протокол RT Audio с кольцевым буфером (KSPROPERTY_RTAUDIO_BUFFER), но при этом напрочь забыли дать клиенту возможность сообщать о том, что он записал в буфер или прочитал из него. В итоге клиент может определить, когда устройство или драйвер не успевают своевременно обрабатывать данные в буфере, а драйвер то же самое в отношении клиента определить не может. В потоке идут щелчки, но и драйвер, и клиент считают, что все в порядке.

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

        В Windows 10 наконец-то сделали для клиента возможность сообщать драйверу, сколько данных записано/прочитано, но зачем-то оформили это практически в отдельный протокол (Packet Streaming).

        Многие свойства устройства/драйвера, традиционно передаваемые через Property Requests, что позволяло их динамически менять, теперь все чаще требуют выставлять в Property Store. Звуковая подсистема полноценно опрашивает эти свойства только после первичной установки драйвера, создавая у себя зеркало. При удалении устройства/драйвера это зеркало не очищается, и при повторной установке большинство свойств берется оттуда. Это сильно усложняет создание гибко конфигурируемых звуковых устройств (например, я недавно делал драйвер для звукового процессора, связь с которым идет по сети). Чтобы банально изменить поддерживаемые форматы, драйверу приходится хакерски лезть в зеркало свойств, перезапускать звуковые службы, и даже это не гарантирует успешного результата.


  1. Daimos
    10.01.2020 14:21

    Как отключить выскакивающее на правом краю в середине главного экрана выбор языков переключения? Особенно если нажать и Ctrl-Shift и удерживая Ctrl переключить Shift языки, оставить держать нажатой обе кнопки и отпустить первым Ctrl а уже потом Shift — то это окошко вообще остается висеть на экране пока однократно на Ctrl не нажмешь.
    Хотелось бы чтобы этого окна вообще не было.

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

    PS В настройках копался очень долго, перепробовал массу вариантов — окошко не перестает появляться.


    1. snayperAlfa
      10.01.2020 22:43

      Никак! Я столкнулся с этим же поведением и в результате чтения майкрософтовских форумов по этой теме, представитель майкрософта сказал что это зашито в ядро и не отключается. Вот так вот телеметрия помогает!


      1. Daimos
        11.01.2020 10:06

        Топикстартер тоже что-то не отвечает.


        1. drWhy
          11.01.2020 10:36

          Согласовывает с первым отделом MS линию поведения )
          Вообще спасибо ТС, нечасты, к сожалению, подобные посты от сотрудников некоторых вендоров.


  1. IGR2014
    10.01.2020 14:43

    Скажите, а правильно ли я понял из FIGURE 2-1 что оконная подсистема работает в режиме ядра.
    Не добавляет ли переключение Kernel <-> User space оверхед по времени?

    И ещё, уважаемый Андрей, если вы знаете кого-то из разработки GUI — хочу передать небольшую визуальную багу:
    Открываете Visual Studio (2017, 2019) -> Создаёте новый оконный проект из шаблона -> В функции CreateWindow/CreateWindowEx меняете параметры которые отвечают за x- и y-координаты окна на 0, 0 -> Запускаете.
    На Window 7, 8 окно, как и ожидалось из описания CreateWindow на сайте Майкрософт, находится в левом верхнем углу экрана. А вот на Windows 10 справа будет зазор в 7 пикселей. Я уже писал о этой проблеме в сообществе Майкрософт
    Да, это не критичный визуальный баг, но глаза режет. Проверял на разных ПК с Windows 10 (Pro Insider Preview и просто Pro версия) — результат одинаковый


  1. Compiller
    10.01.2020 14:57
    +1

    Ожидал увидеть кусок кода на асме типа CD 16 с вызовом прерывания…
    Как в старинной книжке про архитектуру IBM PC.
    А увидел статью из книжки для детей в 9 классе, первый раз пришедших в кабинет информатики.
    Странные статьи для хабра…


    1. artmv32 Автор
      10.01.2020 22:49

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


      1. Xatabov
        10.01.2020 23:59

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


        1. drWhy
          11.01.2020 00:23

          Правильно будет поставить хотя бы 8 ГБ, а лучше 16. Или постигать дзен с четырьмя.
          Причём ещё весной вполне хватало 4 ГБ с отключённым свап-файлом для офисных приложений и нескольких закладок в браузере.


  1. Fregl
    10.01.2020 15:15

    Добрый день автор. Ведутся ли работы по извлечению GUI из Kernel? Я читал где то, что хотели сделать микро-ядро в windows 7, но что то не задалось, и оставили как есть.


    1. ormoulu
      10.01.2020 16:29

      Хороший вопрос, кстати. Особенно сейчас, когда в 10 добавили все эти новые графические фичи, win32k is the new win32k.
      Но я сильно подозреваю, что это такая масштабная и дорогая задача, что проще заложить риски. С учетом того, что в 10 местами все еще работает код года эдак 93го…


  1. Fregl
    10.01.2020 16:50

    Еще вопрос: заметил что на некоторых машинах системные прерывания потребляют довольно большое время процессора. Особенно это я заметил при использовании WiFi Tenda на чипсете rtl8192 (via USB). В чем проблема — кривой драйвер, USB, realtek chip или что то еще?


    1. alex-khv
      10.01.2020 16:59

      Обычно это драйвер


      1. oldschoolgeek
        10.01.2020 17:40

        Но и кривой ACPI тоже бывает. У меня на ноутбуке Dell G3 часто затыкается звук и Latency Monitor показывает неприличные задержки из-за acpi.sys.


        1. emusic
          10.01.2020 18:00

          Я бы сказал, что бывают некривые ACPI/acpi.sys, поскольку на большинстве ноутбуков затыки со звуком и прочим реальным временем типичны. Казалось бы, ноутбуки уже давно примелькались на конференциях, концертах и подобных мероприятиях, но разработчики упорно продолжают считать ноутбук устройством для серфинга. В народе прочно устоялось мнение, что на мероприятиях реального времени можно полагаться только на макбуки.


          1. Balling
            10.01.2020 22:28

            *На макбуки с windows 10 или linux


            1. emusic
              10.01.2020 22:52
              +1

              Насчет линукса не знаю — в основном полагаются на макось. На Windows любой версии полагаться можно только после жесточайшего тюнинга, который зачастую предполагает отказ от USB, WiFi, а то и всей сети в целом.


              1. Balling
                10.01.2020 23:02

                Мне нужны драйвера для nvidia turing, а Nvidia отказалась их делать и deprecated CUDA для macOS, так что увы(((

                отказ от USB, WiFi, а то и всей сети в целом.

                Apple делает нормальные драйвера для windows 10, не преувеличивайте, и как я сказал, мне нужна thunderbolt 3 карточка GPU для моих нужд))


                1. emusic
                  10.01.2020 23:16

                  Я одного не понял: при чем здесь Ваши нужды? :)


        1. drWhy
          10.01.2020 20:20

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


  1. perfect_genius
    10.01.2020 22:17

    Вы ведь понимали, что делая эдакий «каминг аут» вы просто взорвёте Хабр? Что пойдёт поток вопросов не по теме? Порвётесь ведь на все вопросы отвечать (что думаете про РеактОС? Не заглядывали ли в код или не подсказывали им чего-нибудь? :)
    Посмотрим, насколько вас хватит.


    1. Balling
      10.01.2020 22:34

      Фи, даже я взорвал habr круче чем он)) Но если серьезно, я могу придумать 10-20 проблем с windows 10, которые нужно решить. Ха-ха! Например, realtek драйвера с какого-то перепугу используют одельное приложение, чтобы переключиться с USB2.0 на USB3.0. Вопрос, с фига ли? И понятно, что это портит подключение к сети при загрузке, потому что сервис, который грузит это приложение — грузится и переподключает (sic!) адаптер wifi при загрузке. /facepalm


      1. S-trace
        11.01.2020 13:18

        с фига ли?

        Насколько я знаю, USB 3.0 и выше некисло фонит в эфир при работе, и забивает слабые сигналы сетей WLAN.
        Поэтому при сканировании USB-адаптерами эфира они переключают USB в режим 2.0, а при подключении к сети — обратно в режим 3.0, если возможно (а если не возможно — продолжает работу в режиме 2.0).


        1. Balling
          11.01.2020 22:09

          Ага, ага. Вот только драйвер в linux так не делает, он сразу подключает к usb 3.0. И сюрприз, качество сигнала в USB 3.0 лучше, потому что там тогда 900 мА ограничение, а не 500 мА. И чтоб вы понимали, я немножко помог в написание драйвера, так что знаю, о чем говорю, именно я нашел баг с 900 мА… Так, ладно))


    1. drWhy
      11.01.2020 00:25

      Глаза боятся, а руки чешутся…


  1. Vitaly_Z
    10.01.2020 22:45

    Я один ожидал прочесть в этой статье нечто про микросхему считывающую нажатие клавиши, формирование прерывания BIOS INT 09H, MS DOS 01H, уровни абстракции и эволюцию этого в ОС от Майкрософт? )


  1. alex-khv
    11.01.2020 00:37

    Кроме того что автор сказал где работает.
    Он добавил гору комментариев, из-за не академически точно сформулированных высказываний.
    Если бы он прослеживал путь от нажатия кнопки на клавиатуре до появления символа в облачном Word который работает в браузере. И написал бы например «хаб» вместо «свитч», или что маршрут на 0.0.0.0 может быть только один. К взрыву комментариев добавились бы сетевеки :)


  1. Gargoni
    11.01.2020 17:48

    А можно получить исходники Win10, как это было с Win2k? )))


  1. Dr_Sigmund
    11.01.2020 20:19

    Я извиняюсь, но статья — чудовищная мешанина кусков совершенно разных тем, перемежающихся очень, скажем так, странными утверждениями вроде «Процессор это компьютер в компьютере, более мощный и продвинутый микроконтроллер которому не нужна прошивка» или «Цифровые схемы работают с данными на уровне нулей и единиц, а аналоговые полагаются на эксплуатирование законов физики» (а цифровые что, на ритуальную магию полагаются?)
    Человек, хорошо разбирающийся в аппаратной архитектуре и архитектуре ОС, не найдёт здесь ничего нового, но будет плеваться от половины текста, а неопытный, по-моему, не поймёт ничего. Мне доводилось делать такие вещи, как дизассемблирование компонентов ядра Windows, но фраза «Dll — предоставляет модель расширения функционала программы через плагины, а так же механизм для реализации читалки экрана через ловушки клавиатуры» ставит меня в тупик.


  1. vvzvlad
    13.01.2020 01:48

    Отвратительно. Черти что и сбоку бантик. Автор перескакивает с уровня ядра на уровень регистров процессора, хотя в ядре ручное управление регистрами — мягко говоря, редкость. Какая-то непонятная вставка про микропроцессоры, в картинке про которую пять раз повторён avr, но ни разу stm. Но это не так страшно, потому что на материнской плате в общем случае нет микропроцессоров общего назначения.


    В общем, автор, судя по всему, замахнулся на слишком большой кусок: может быть, он хорошо знает то, что находится внутри системной части винды, но "путь от нажатия кнопки до отображения символа" несколько… шире. К тому же, явное неумение строить связный текст вносит свой вклад в общую сумятицу.


    1. Serjone
      13.01.2020 13:19

      Пусть лучше пишет, чем не пишет. Пользу он уже принёс одним только созданием этой дискуссии.


  1. dipsy
    13.01.2020 08:10

    Пользуясь случаем, раз тут так охотно отвечают на вопросы, позвольте спросить, пару раз пробовал ставить Windows 10 взамен 7, но пришлось откатывать из-за неработоспособности любых приложений для управления через жесты мыши (типа Just Gestures, StrokeIt, etc). Точнее часть из них работает, почти нормально, но с какими-то странными глюками, которых нет на 7, из-за чего пользоваться невозможно. Даже не знаю как вкратце описать, проще попробовать, позакрывать окна, посворачивать их, скопировать/вставить через жесты мышкой, то срабатывает, то не срабатывает, то срабатывает, но не в то окно. Just Gestures кстати вообще не работает в Win 10, в отличие от 7, так же не должно быть наверное, чтобы прикладные программы ломались при апгрейде ОС? Это даже не драйвер, не настолько там низкоуровневое взаимодействие. Может какой-то режим совместимости сделать?
    Вообщем не суть, может быть кто-то успешно пользуется такими программами в Windows 10 и проблема где-то у меня, а не системная с Windows 10?


  1. Fregl
    13.01.2020 11:15
    -1

    ТС, и когда наконецто Windows перестанет быть такой дырявой? Может пора нанимать не криворуких индусов за пару баксов? Пример их кода — Боинги 737е…


    1. sborisov
      13.01.2020 11:17

      Вы забыли приставку MAX. К обычным 737 вроде бы претензий не было (или я ошибаюсь?).


      1. emusic
        13.01.2020 11:24
        +1

        К коду 737MAX претензий тоже нет. Fregl просто слышал звон.