О работе ПК на примере Windows 10 и клавиатуры ч.2

    В этой части мы рассмотрим какой путь проходит информация о нажатой клавише от клавиатуры до CPU, будет очень много картинок и это не последняя часть. Я буду рассказывать об этом с точки зрения программиста который пишет в режиме пользователя — пользовательские програмы, web, мобильные приложения — поэтому здесь могут быть неточности. Люди занимающиеся электроникой навряд ли найдут для себя что-то полезное. Первая часть находится здесь.


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

    Под катом трафик.

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


    “Мозгами” клавиатуры которые могут определять нажатие клавиши является микроконтроллер, который по сути является мини-компьютером с программой проверяющей каждую клавишу подавая на неё напряжение и если оно проходит то клавиша нажата. Ножки микроконтроллера имеют свои названия и к ним можно обращаться в коде, они используются для общения с внешним миром. Ножки могут управлять работой микроконтроллера, сообщать состояние чипа или служить для чтения/передачи данных.
    Программу (прошивку) можно писать на языке С или ассемблере, она заливается на микроконтроллер через программатор. Он представляет из себя устройство с разъёмом для установки микроконтроллера и может подключаться к компьютеру через USB, на котором запущен специальный софт. Вот как выглядит программатор в реальной жизни:
    Через программу на каждую ножку можно установить либо замерить напряжение. Алгоритм нахождения нажатой клавиши заключается в том чтобы подавать напряжение на одну ножку и замерять его на другой и если клавиша была нажата, то на второй ножке будет примерно столько же вольт сколько на входной. Так в бесконечном цикле проверяются все клавиши. Как правило клавиатура имеет 80-110 кнопок, а у контроллера контактов (пинов) гораздо меньше. Поэтому используют такой подход как “клавиатурная матрица” — все клавиши распределяют по столбцам и строкам и алгоритм сводится к нахождению столбца который пересекается со строкой на которую программа подала напряжение. Здесь отмечено цветом соответствие столбцов/строк контактам.


    В реальности матрица может выглядеть так. Слева промышленная и справа самодельная.


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

    for (int i = 0; i < COLSC; i++) {
     	SetPower(columns[i], 3.0 f);
      	for (int j = 0; j < ROWSC; j++) {
        		float power = GetPower(rows[j]);
        		if (power >= 3.0f - THRESHOLD) {
          			BYTE key = keys[i, j];
          			SendKey(key);
        		}
      	}
    }
    

    Каждой клавише соответствует скан код, он стандартизирован и представляет из себя 8ми битное число, т.е. один байт. Поэтому когда нажата клавиша Y контроллер клавиатуры должен будет отправить число 21 (0x15), а когда отпущена — 149 (0x95). Каким образом происходит отправка? Наверняка вы работали с JSON, веб-сервисами или отправляли данные между процессами и знаете что для отправки данные надо сериализовать, т.е. превратить в массив байт или отформатированный текст, которые получатель может десериализовать, т.е. воссоздать объект в своём адресном пространстве. А во что можно сериализовать данные на таком низком уровне? Нам нужно передать всего лишь 1 байт (8 бит). Забегая вперёд скажу, что данные мы будем передавать побитно.

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

    Скан код нажатой клавиши Y в двоичном виде выглядит как 0001 0101. Передавать мы их будем по ножке микроконтроллера которая отвечает за данные (DATA). Логическая единица — это напряжение 3.3В и выше, логический ноль — напряжение около 0В. Здесь возникает загвоздка — как передать три нуля подряд? Для этого нам нужна вторая ножка которую назовём CLOCK, когда на ней единичка это значит что сеанс передачи одного бита начался, а ноль — закончился. Такая перемена значений (напряжений) будет происходить с определённым интервалом времени, скажем 50 наносекунд, потому что на другом конце находится второй микроконтроллер который работает со своей скоростью и в бесконечном цикле слушает ножки к которым подключены CLOCK и DATA. В данном примере я буду исходить из того что клавиатура подключается через разъём PS2, который показан ниже. Через USB порт алгоритм передачи будет другим. Как видите у порта PS2 есть пины которые называются Data, Clock. Помимо них есть ещё контакт по которому контроллер порта PS2 раздаёт клавиатуре напряжение 5В необходимое для работы и контакт заземления, который просто выводится на корпус клавиатуры. Остальные контакты не используются.
    Порт PS/2 называется последовательным портом (serial bus), потому как передаёт биты один за другим (последовательность битов). Паралельный порт передаёт данные сразу по нескольким контактам и может за один сеанс передачи данных передать к примеру сразу один байт (8 бит).

    В чём разница между портом, шиной (bus) и протоколом? Шина как и порт это набор контактов (проводков) и соглашение как их использовать, только порт имеет соединение для подключения внешних устройств, а шина используется для общения компонентов на материнской плате. Порт это по сути шина с разъёмом по середине. Протокол — это порядок взаимодействия через контакты. В примере с PS/2 это был порядок передачи данных через контакты Clock и Data.

    Раньше микроконтроллер Intel 8042 был очень распространённым и использовался как в клавиатуре, так и в качестве контроллера порта PS2, т.е. данными обменивались два одинаковых чипа. Драйвер порта PS2 в Windows называется 8042prt.sys.

    На самом деле мы передаём не 8 бит, а 11, потому что данные передаются в виде пакета данных или же сообщения. Дополнительные 3 бита обозначают начало и конец данных — один нолик в начале и 0 1 в конце, такой протокол передачи данных от устройства хосту в PS2. Так может выглядеть функция SendKey в псевдокоде, если вам удобнее понимать код. Она отправляет данные о нажатой клавише через шину PS2.

    
    void SendBit(BYTE bit) {
    	float power = (bit != 0) ? 3.3f : 0.0f;
    	SetPower(DATA, power);
    	SetPower(CLOCK, 3.3f);
    	Sleep(50);
    	SetPower(CLOCK, 0.0f);
    	Sleep(50);
    }
    
    void SendData(BYTE data) {
    	SendBit(0);
    	
    	for (BYTE i = 0; i < sizeof(BYTE); i++) {
    		BYTE bit = (data >> i) & 1;
    		SendBit(bit);
    	}
    
    	SendBit(0);
    	SendBit(1);
    }
    

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

    На графике такая передача данных будет визуализирована следующим образом. По оси X время, по Y — напряжение.


    В аналоговой технике сигнал может искажаться, т.е. лежит провод ни к чему не подключённый, но вольтметр показывает на нём 0.5В из-за того что рядом есть электромагнитное поле. Поэтому используется понятие порогового напряжения. Если напряжение меньше порогового, то считаем что получили логический ноль, иначе единичка. С учётом возможных искажений скан-код нажатой клавиши Y может прийти вот таким:


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

    Микроконтроллеры и микросхемы


    Микроконтроллер может выполнять вшитую в него программу, имеет некоторый объём RAM памяти и место для хранения данных и кода программы. В микросхему программу можно задать ещё на этапе проектирования. Вручную создавать электрическую схему реализующую алгоритм очень трудоёмко и поэтому для проектирования микросхем может использоваться специальный язык программирования который называется VHDL (Hardware Description Language). Это высокоуровневый язык программирования который транслируется в план электрической схемы, она прогоняется через программу находящую оптимальное расположение радиоэлементов на плате и в конечном счёте производится в физическом виде. Изображения носят иллюстративный характер.



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


    На входную ножку подаётся напряжение, если управляющая имеет напряжение, то ток проходит на выходную, иначе там будет 0В. Имея 8 транзисторов у каждого из которых на выходной ножке подключен светодиод который либо горит либо нет, мы можем представить 256 уникальных комбинаций (2 в степени 8). Лапочки интерпретируются справа налево, так же как и десятичные числа. Младшие разряды находятся справа.
    Т.е. одна лампочка представляет один бит информации (0 или 1), а восемь таких лампочек соответствуют одному байту. На транзисторах можно строить и логические операторы И, ИЛИ, НЕ, XOR.


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


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


    Микросхемы могут содержать на той же плате и в том же корпусе и микроконтроллер.

    Шины


    Обычно в учебниках шины показывают в виде жирных стрелок, как на картинке ниже. Это делается чтобы не рисовать все соединения контактов, которых может быть много. Работа шины PS2 очень простая, там всего нужно три контакта. Но есть шины у которых к примеру 124 контакта для передачи данных.



    Различают шины следующих типов:
    • Данных — биты на этих контактах интерпретируются как данные: число, символ, часть картинки или других бинарных данных. Ширина шины влияет на пропускную способность, количество переданных бит за секунду
    • Адреса — биты на этих пинах интерпретируются как физический адрес в памяти. Ширина этой шины определяет максимальный поддерживаемый объём RAM.
    • Управления — контакты которые используются для передачи управляющих сигналов на подключенные устройства. CPU использует их для отправки команд чтения записи памяти RAM и устройств I/O.
    • Питания. Хоть она обычно и не упоминается в списке шин, но привести в пример её стоит. Вот как выглядит ATX 24 Pin 12V PSU Connector, она подаёт разные напряжения для разных подсистем.


    Шина может состоять из подшин, т.е. одни контакты используются для данных, другие для адресов, третьи для управления и контакты по которым передаётся питание. Подход когда одни и те же контакты используются попеременно для передачи и данных и адресов называется мультиплексированием. К примеру процессор Intel 8086 имеет шину данных и адресов 20 бит, на диаграмме пинов её контакты обозначены AD0-AD19 (ножки 16-2 и 39-35).


    В более сложном случае у нас могут быть несколько микросхем подключенных к тем же контактам. Для нормального общения им нужен дополнительный чип, который будет определять кто в какой момент времени может их использовать, он называется контроллер шины. На рисунке ниже сферическая шина в вакууме: четыре одинаковых микроконтроллера передают данные микроконтроллеру-потребителю через контроллер шины. Красный провод — напряжение, которое контроллер шины раздаёт всем подключенным к нему чипам. По зелёным проводам передаются данные и производится “договаривание” с контроллером шины и синий провод это Clock, по которому контроллер шины синхронизирует общение контроллеров, потому как они могут работать с разной скоростью. Если на синем проводе логическая единица, то чип имеющий право на пользование шиной может выполнить один акт взаимодействия со внешним миром — прочитать бит например.


    Контроллер шины можно рассматривать как цельный компонент, потому общение со внешним миром будет проходить через него и сколько реально на шине чипов или реальных внешних устройств не важно. Для передачи данных в материнской плате имеется разветвленная сеть шин. Несмотря на то что чип-сетов великое множество, в большинстве своём они следуют типовой компоновке, потому что все устройства подключённые к материнской плате делятся на:
    • Медленные — клавиатура, жёсткий диск, сетевая карта, аудио и пр.
    • Быстрые — CPU, RAM, GPU.
    Исходя из этого деления в материнской плате есть два главных чипа — Южный мост, координирующий работу всех медленных устройств, и Северный мост для координации быстрых устройств. В современных компьютерах Северный мост находится в самом CPU, а Южный может называться Platform Controller Hub, но сути это не меняет. Оба эти моста соединены между собой шиной по которой и сообщают друг другу о значимых событиях. Особый интерес представляет собой генератор тактовой частоты по которому процессор, оперативная память и графическая карта синхронизируют свою работу, тот самый синий провод. Оверклокинг это по сути изменения настроек BIOS, чтобы синхронизация происходила чаще, при этом железо, в первую очередь CPU будет сильнее греться, потреблять больше энергии и быстрее вырабатывать свой ресурс. Противоположностью является андерклокинг, когда скорость работы понижается ради экономии заряда батареи или уменьшения шумности.

    Чипсет — это набор микросхем, которые все были созданы для работы друг с другом. Они обеспечивают коммуникацию компонентов на материнской плате и предоставляют функциональность, например таймеры. Чип-сет работает только с одной маркой процессоров, AMD нельзя вставить в материнку с чипсетом Intel, у них даже контакты разные. Схема материнской платы представлена ниже:
    Хотите пример хардверной инкапсуляции? В чипсетах фирмы Intel имеется чип под названием Super IO, он представлен на картинке ниже и через шину LPC подключен к Южному мосту. LPC — умное название проводков CLOCK, DATA, VCC (POWER). Этот чип содержит в себе эмуляцию всех старых чипов которые когда-либо использовались для периферийных устройств, в том числе и чип 8042 который использовался для PS2 порта. Там же находится и эмулятор контроллера порта для Floppy и прочие реликты которые мешают прогрессу. На общей схеме материнской платы выше указаны и Super IO и шина LPC.


    Современный порт PS2 напрямую подключается к чипу Super I/O. Зелёное — клавиатура, фиолетовый — мышка. Раньше он подключался к микроконтроллеру Intel 8042.


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

    Дорога от PS2 к процессору


    Как правило архитектуру компьютера рассматривают на процессоре 8086. С одной стороны это правильно, потому как он достаточно простой по сравнению с современными CPU, с другой стороны неправильно, потому что он старый и не отражает архитектуру современной машины. Intel 8086 не нужны были никакие мосты, потому что он был настолько медленный что мог работать с периферией на одной шине, т.е. на одной частоте. Я плохо знаю современные CPU и чип сеты, поэтому буду объяснять на выдуманных, которые напоминают реальные. В моём примере будет вымышленный CPU сильно похожий на Intel 8086. У Super IO чипа больше ста котактов и по ним есть документация в Интернете, но я не вижу смысла разбирать какие пины используются клавиатурой и LPC-шиной для общения с South Bridge на самом деле. Главное это принцип, который может быть реализован по-разному.

    Давайте быстренько посмотрим на картинку чтобы вспомнить что мы уже прошли. Зелёные стрелки показывают путь который мы рассмотрим.


    Итак данные от клавиатуры уже пришли в контроллер порта PS2, который когда-то был чипом Intel 8042, а теперь эмулируется чипом Super IO. А теперь давайте разбирать дальнейший ход действий на моей выдуманной материнке с выдуманным CPU. Контроллер PS2 получил скан код нажатой клавишы Y и теперь подаёт напряжение на контакт сигнал (фиолетовая линия, см картинку ниже) на котором должен уведомить программируемый контроллер прерываний о данных с клавиатуры. Этот сигнал передаётся от одного чипа к другому пока Северный мост не передаст его чипу управляющему прерываниями.


    Programmable Interrupt Controller представляет из себя чип Intel 8259 у которого 8 ножек (их имена IRQ0-IRQ7) зарезервированы для получения уведомлений от определённых портов (Interrupt ReQuest). На пин IRQ1 подвязана клавиатура, IRQ7 — принтер, на какой-то пин Floppy диск, звуковая карта, параллельные порты и другие. Конечно устройств может гораздо больше восьми, поэтому применялся такой приём как каскадирование, когда к ножке с именем IRQ2 подключался другой такой же PIC, у которого отсчёт начинался не с 0, а 7. Мышка привязана к IRQ12, т.е. ножка IRQ5 на втором PIC.

    Сейчас контроллер прерываний должен уведомить CPU о событии на клавиатуре. Это происходит следующим образом:
    1. Контроллер прерываний подаёт на свою ножку INT (Interrupt) напряжение, которое идёт на ножку INTR (Interrupt Request) процессора. CPU может быть в данный момент занят и потому будет игнорировать этот сигнал, потому что уведомление от клавиатуры считается маскируемым прерыванием, т.е. его можно игнорировать до поры до времени. Немаскируемое прерывание требует немедленного внимания, к примеру ошибки внутри логики работы чипсета. Ошибку следует понимать так же как и exception внутри приложения.
    2. Процессор наконец обращает внимание на сигнал и несколько раз снижает и повышает сигнал на ножке INTR, давая понять что к приёму номера прерывания готов.
    3. Контроллер прерывания выводит на свою шину данных (ножки D0-D7) номер прерывания, который называется вектором прерывания. Во время загрузки ОС настраивает PIC возвращать определённый номер когда происходит уведомление от определённого устройства (сигнал на ножку IRQ).

      Почему вектор, а не номер? У меня есть два объяснения. Вектором называется одномерный массив и данные здесь передаются по сути как массив нулей и единиц. Второе объяснение — вектор в математике обозначает направление (x, y, z, w). В процессоре вектор прерывания меняет направление исполнения программы.
    4. CPU считывает со своих ножек AD0-AD7 этот номер, вектор прерывания. Операционная система сохранила в регистре IDT (Interrupt Descriptior Table) указатель на массив функций, которые называются таблица векторов прерываний, где вектор прерывания используется как индекс в этом массиве. По нему CPU вызывает обработчик прерывания.

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

      struct IDT_entry{
      	unsigned short int offset_lowerbits;
      	unsigned short int selector;
      	unsigned char zero;
      	unsigned char type_attr;
      	unsigned short int offset_higherbits;
      };
       
      struct IDT_entry IDT[256];
      
    5. Обработчик клавиатуры вызывает команду процессора которая завершает обработку прерывания, о чем сообщает контроллеру прерываний подав напряжение на ножку INTA (Interrupt Acknowledged).

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

    void irq1_handler(void) {
    	  outb(0x20, 0x20); //EOI
    }
    

    Более подробно ознакомится с тем как настраивается таблица векторов прерываний можно на osdev.

    Теперь мы знаем о том как произошло прерывание, но не знаем как обработчик прерываний считывает информацию о нажатой клавише. С программной точки зрения порт PS2 представляет собой два регистра, только обращение к ним происходит не по именам или адресам в памяти о по номеру порта ввода/вывода. Эти два однобайтовых регистра закреплены за портами 0x60 и 0x64, в первом (0x60) будет лежать скан-код клавиши. Второй порт используется для передачи статуса и комманд порту PS2 (не клавиатуре!). В наборе инструкций архитектуры x86 есть команда IN storeTo, fromPortNum, которая считывает значение из указанного I/O port в указанный регистр. Например IN AL, 0x60 сохранит данные с клавиатуры в регистр AL. Она может работать примерно так:

    1. В процессоре который мы рассматриваем есть ножки AD0-AD20, они могут использоваться для указания адреса так и данных. Это и шина данных и шина адреса. Помимо них есть ряд управляющих ножек, к примеру пин №28 (S2) значение которого укажет северному мосту откуда будет происходить чтение — из памяти или устройства ввода вывода. Команда IN выставляет сюда значение говорящее об I/O устройстве.
    2. На шину адреса CPU (какие-то из ножек AD0-AD20) выставляется последовательность 0110 0000, что и есть 0x60. Совместно с другими управляющими ножками CPU отправляет сообщение Северному мосту, оно направляется на Южный мост. Между чипами сообщение может передаваться по разным протоколам, где-то это последовательная шина, где-то параллельная. Южный мост приняв сообщение видит порт 0x60 и понимает что его надо направить в SuperIO чип, у того будет какое-то количество времени его обработать.
    3. Как мы уже говорили Super IO чип нужен для того чтобы скрыть в себе архаичный функционал старых устройств. По номеру 0x60 он понимает что это сообщение предназначено контроллеру PS2, который уже выставляет скан код на свою шину данных.
    4. Теперь скан код идёт обратно. От эмулятора Intel 8042, через внутреннюю схему чипа SuperIO, по шине LPC состоящей из трёх контактов в Южный мост, оттуда в Северный в виде расширенного сообщения. Т.е. к скан коду было добавлено чуть больше информации, к примеру откуда она.
    5. Северный мост уведомляет комбинацией сигналов CPU о прибытии данных с запрошенного порта и выставляет скан код на шину данных (какие-то 8 пинов из AD0-AD20).
    6. Микроархитектура CPU считывает эту последовательность высоких и низких сигналов с шины данных и и помещает её на транзисторы представляющие регистр AL. С этого момента программа может обрабатывать данные от клавиатуры.

    Весь этот алгоритм работает в масштабе наносекунд и потому выполняется почти моментально, хоть процессор и провёл некоторое время в ожидании операции ввод-вывода.

    Как вы теперь понимаете чтение с внешних устройств, даже таких как память RAM с т.зр. CPU достаточно медленное. Эту медлительность можно заметить написав программу которая печатает 10 000 строчек в файл построчно, вместо того чтобы скопить их в буфере и сохранить сразу. Жёсткий диск подключен к Южному мосту и внутри него так же есть контроллер управляющим непосредственным размещением данных.

    Оперативная память подключается к CPU через шину и чтение с неё занимает некоторое время. Для ускорения работы CPU у него имеется кэш, т.е. область в которой расположены транзисторы представляющие данные которые скоро понадобятся или часто используются, их чтение происходит гораздо быстрее чем из платы RAM, которая общается с CPU через Северный мост. Оперативная память называется Dynamic Random Access Memory, потому как для представления данных в ней используются конденсаторы. Конденсатор это радиоэлемент который как аккумулятор держит некоторое время заряд пока полностью не разрядится. Только здесь разрядка происходит очень быстро. Поэтому конденсаторы надо перезаряжать, это происходит моментально, достаточно подать напряжение. Заряженный конденсатор — логическая 1, иначе 0. Для памяти кэша используется Static RAM, т.е. её не надо перезаряжать и поэтому она работает быстрее, но стоит дороже. Кэш делится на 3 уровня, которые последовательно проверяются в процессе поиска запрошенных данных, прежде чем процессор обратиться к RAM. На старых процессорах кэш первого уровня (L1) был частью CPU и работал с ним на одной частоте, когда как L2 и L3 кэши были внешними чипами. Сейчас они все находятся на одной микросхеме с процессором. Кэш L1 самый быстрый и самый маленький по объёму памяти, L2 имеет больше памяти но медленнее. L3 самый большой кэш и самый медленный, часто его называют shared cache, потому что он хранит данные для всех ядер CPU, в то время как L1 и L2 созданы для каждого отдельного ядра.

    В следующей части поговорим как Windows принимает и обрабатывает полученные данные.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 67

      +3
      Современный порт PS2

      Современный

      PS2

      Сколько лет статья пролежала в «песочнице»?
        0
        на моём рабочем компе есть PS2 порты с обратной стороны. Комп 2019го года c 32Гб оперативки и 16 (вроде) ядрами
          +1
          Вних что-то включено?

          «Микроконтроллеры и микросхемы» шедевр.
            –2
            Не включено.

            Что не так с "«Микроконтроллеры и микросхемы» шедевр."?
              0
              Да, вижу что прошляпил с этой секцией. Сейчас поправлю.
              0
              Можно смело подключить в них клавиатуру, если вы геймер и вам важны задержки
          +12
          Люди занимающиеся электроникой навряд ли найдут для себя что-то полезное.
          Вы знаете, проблема в том, что вся часть статьи, касающаяся микросхем, написана очень плохо, изобилует фактическими ошибками и вводит аудиторию в заблуждение. Так писать просто нельзя, и никакие дисклеймеры в предисловии этого не изменят.

          Ваша терминология «микросхем и микроконтроллеров» — это просто анекдот. Только от него хочется не смеяться, а плакать. Вы бы хоть в Википедии определения посмотрели. В ней, к слову, определение микроконтроллера начинается так: «микроконтроллер — это микросхема, которая...»
          Про вход и выход у транзистора — тоже очень хорошо. И про «своего рода затвор». Точнее, про затвор вдвойне хорошо, потому что дальше идёт рассказ про биполярный транзистор, у которого никакого затвора, разумеется, нет. И в принципе от рассказа про биполярный транзистор тоже хочется плакать. Ау, 2020 год на дворе, какие к черту биполярные транзисторы в микросхемах?

          А самое страшное — то, что видя такой катастрофический уровень изложения материала, в котором я разбираюсь хорошо, я имею все основания предполагать, что уровень изложения материала, в котором я разбираюсь плохо, ничуть не лучше. И тогда, прочитав эту статью, я получу не полезные знания, а набор заблуждений и кашу в голове.
            0
            Я про микросхемы знаю только приблизительно как работают поэтому неудивительно что в этой части есть неточности. Какие конкретно ошибки вы нашли? И какие заблуждения?

            Я пока не понимаю что не так с «Микросхемами и микроконтроллерами», какие принципиальные ошибки там есть?

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

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

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

              То есть человек[и], которые пишут код для драйверов WIndows, и меняют код ядра Windows не знают, что происходит на уровень ниже? А как вы вообще работаете? Не удивительно, что эта ОС стала такой ужасной.
                0
                С чего вы взяли что я пишу код драйверов?
                  +1
                  Меня зовут Андрей Артемьев, я работаю в Microsoft над ядром ОС Windows 10

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

                    +2
                    Теперь понятно, почему МелкоМягкие с такой помпой иконки презентовали…
                +5
                Если моё описание плохое и вы хорошо разбираетесь, то объясните пожалуйста сами доступно и не углубляясь в детали, чтобы человек который пишет драйвера под ОС, модифицирует ОС, пишет код в режиме пользователя понял не более чем за 40 минут чтения, что происходит на уровне ниже.
                О, «сперва добейся», все как я люблю.
                Так вот:
                Почему кремний и почему КМОП
                Проектные нормы и где 7 нм в нормах 7 нм
                Система-в-корпусе
                Кто есть кто в мировой микроэлектронике
                Первая из четырех ссылок — то, что вы просили.

                Какие конкретно ошибки вы нашли? И какие заблуждения?
                Поехали:
                Логическая единица — это напряжение 3.3В и выше, логический ноль — напряжение около 0В.
                Логические уровни при питании 3.3 В специфицируются примерно вот так, потому что, как вы сами пишете дальше, на линии могут быть помехи. Итого в разных частях текста вы сами себе противоречите.


                . Это высокоуровневый язык программирования который транслируется в план электрической схемы, она прогоняется через программу находящую оптимальное расположение радиоэлементов на плате и в конечном счёте производится в физическом виде.
                0) Вы описываете маршрут разработки цифровых микросхем. Микроконтроллеры разрабатываются принесу же.
                1) Языков несколько, хоть это и не так важно. Но Verilog популярнее.
                2) В этом предложении подлежащее — слово «язык». И дальше в микросхему преобразуется именно он. То есть весь язык VHDL, а не написанный на нем код.
                3) Не «план электрической схемы», а в саму электрическую схему. Бдок-схема — это другое.
                4) Программы, синтезирующие топологию микросхем и печатных плат — это очень разные программы. Примерно как Skype и Photoshop.

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

                Рисунок ниже иллюстрирует работу транзистора, вода иллюстрирует ток.
                Так вот, биполярный транзистор управляется током, а не напряжением. И вся аналогия с затвором для воды никак не объясняет принципы работы биполярного транзистора, зато прекрасно подходит для JFET или MOSFET, у которых даже управляющий вход называется«затвор».
                Резисторно-транзисторная логика с ваших картинок-примеров устарела примерно пятьдесят лет назад. Это как устройство электропривода в «Тесле» объяснять на примере ВАЗ-2101.
                Это даже безотносительно того, что биполярные транзисторы намного менее интуитивны для понимания, чем МОП. Пока они были популярны, смысл в примерах на них был, а сейчас его не осталось ровно никакого.

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

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

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


                  Не совсем. Тут больше вопрос, что первично. Вот есть модель Эберса-Молла. По этой модели как раз токи биполярного транзистора определяются напряжениями (что логично — без напряжений токи не потекут). Именно поэтому в Искусстве схемотехники написано:
                  Следует запомнить, что в транзисторе коллекторный ток зависит от напряжения между базой и эмиттером, а не от тока базы (ток базы в грубом приближении определяется коэффициентом h21э)·


                  Логические уровни при питании 3.3 В


                  Тут бы ещё надо бы автору напомнить про ЭСЛ-логику. :)
                    0
                    Если идти так глубоко, то биполярный транзистор управляется наличием электрического заряда в базе. И его изменением по времени, то есть током.

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

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


                      Так нет же. Ему заряд на базе не нужен, ему нужна разность потенциалов между базой и эмиттером.
                      В активном режиме работы транзистор включён так, что его эмиттерный переход смещён в прямом направлении (открыт), а коллекторный переход смещён в обратном направлении (закрыт). Для определённости рассмотрим npn транзистор, все рассуждения повторяются абсолютно аналогично для случая pnp транзистора, с заменой слова «электроны» на «дырки», и наоборот, а также с заменой всех напряжений на противоположные по знаку. В npn транзисторе электроны, основные носители тока в эмиттере, проходят через открытый переход эмиттер-база (инжектируются) в область базы. Часть этих электронов рекомбинирует с основными носителями заряда в базе (дырками). Однако, из-за того что базу делают очень тонкой и сравнительно слабо легированной, большая часть электронов, инжектированных из эмиттера, диффундирует в область коллектора[1]. Сильное электрическое поле обратно смещённого коллекторного перехода захватывает электроны, и проносит их в коллектор. Ток коллектора, таким образом, практически равен току эмиттера, за исключением небольшой потери на рекомбинацию в базе, которая и образует ток базы (Iэ=Iб + Iк). Коэффициент α, связывающий ток эмиттера и ток коллектора (Iк = α Iэ) называется коэффициентом передачи тока эмиттера. Численное значение коэффициента α 0.9 — 0.999. Чем больше коэффициент, тем эффективней транзистор передаёт ток. Этот коэффициент мало зависит от напряжения коллектор-база и база-эмиттер. Поэтому в широком диапазоне рабочих напряжений ток коллектора пропорционален току базы, коэффициент пропорциональности равен β = α / (1 − α) =(10..1000). Таким образом, изменяя малый ток базы, можно управлять значительно большим током коллектора.

                      (из Википедии)


                      И его изменением по времени, то есть током.


                      А это изменение тока зависит от напряжения Uбэ (и, например, температуры). :)

                      Статика биполярных схем прекрасно считается в приближении, что напряжение база-эмиттер всех транзисторов одинаково и равно напряжению открытого диода.


                      А вот Хоровиц считает иначе:
                      Мы рассматривали транзистор как усилитель тока, вход которого работает как диод. Это приближение является грубым, но для некоторых практических случаев большей точности и не требуется. Однако для того чтобы понять, как работают дифференциальные усилители, логарифмические преобразователи, схемы температурной компенсации и некоторые другие практически полезные схемы, следует рассматривать транзистор как элемент с передаточной проводимостью ‑ коллекторный ток в нем определяется напряжением между базой и эмиттером.
                        0
                        Ему заряд на базе не нужен, ему нужна разность потенциалов между базой и эмиттером
                        … создаваемая попадающим в базу зарядом)

                        А вот Хоровиц считает иначе
                        Моя фраза про статику никак не противоречит Хоровицу, потому что она только про статику.

                        Но мы с вами окончательно скатываемся в дискуссию про курицу и яйцо, которая по определению бесплодна.
                          0
                          … создаваемая попадающим в базу зарядом)


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

                          Моя фраза про статику никак не противоречит Хоровицу, потому что она только про статику.


                          Тогда у вас это не статика, а режим насыщения.
                          В зависимости от напряжения на выводах транзистор может находиться в следующих основных режимах:
                          1) Режим отсечки;
                          2) Активный режим;
                          3) Режим насыщения.

                          Но аналоговая электроника довольно редко в нём работает (разве что ключи и мультивибраторы и, может, ещё что-то).

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


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

                            Тогда у вас это не статика, а режим насыщения.
                            Почему режим насыщения?
                            imageВот тут задайте входное/выходное напряжение и питание, а дальше статическая рабочая точка прекрасно считается в приближении с V* на базах всех транзисторов. Грубое приближение, но довольно удобное для этой цели.
                              0
                              Почему режим насыщения?


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

                    В хорошо спроектированной системе различного рода нюансы скрыты за абстракцией. Если я меняю код уведомляющий читалку экрана о нажатии клавиши, мне не надо думать на какой материнке и с каким CPU работает код. В Windows есть HAL.dll и ACPI.sys которые скрывают все нюансы материнских плат и тем самым облегчают разработку драйверов и ОС, поэтому Windows будет работать одинаково хоть на новом хоть на старом поддерживаемом железе. Для человека который пишет код в режиме пользователя — таких очень много на этом ресурсе — абсолютно ничего не меняется. Если удалось установить и запустить Win10, то на ней будет работать всё что было написано под Win10. Возможно будут ошибки из-за недостатка памяти, медленная работа, но это уже отдельный вопрос. К слову, Windows идёт к тому чтобы UWP apps работали везде — Desktop, IoT, XBox и другие платформы которые будут в будущем.

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

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

                    Тут вы или микросхему с материнской платой путаете, или микроконтроллер с микропроцессорным ядром.
                    — тут я пытаюсь объяснить, что в микросхеме может быть элемент который может быть «прошит», но это не значит что вся микро-система контролируется кодом.
                      +2
                      Микросхемы, микроконтроллеры и радиоэлементы не цель этой статьи.
                      Поэтому самым разумным с вашей стороны было бы не писать о них вовсе. Тут работает тот же принцип, что в клятве Гиппократа: самое главное — не навредить. Ваша статья, к сожалению, в части, касающейся устройства железа, вредит аудитории и ее пониманию.
                      И именно поэтому мне важны все эти неточности. Не из вредности, а потому, что мне потом работать с людьми, их усвоившими.
                      Пишите о том, у чем хорошо разобрались, или разбирайтесь в том, о чем пишете. Второй вариант, кстати, довольно крутой, советую.

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

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

                        +1
                        вы совершенно правильно все делаете… но как сказал Козьма Прутков, специалист это чел с большим флюсом… особенно если специалист специалист… бить будут все… не обращайте внимания… я по образованию радиоэлектронщик, но последние 30 лет занимаюсь софтом, проблемы IT отрасли очень понятны… дремучесть среди программеров многих чудовищна… надо все таки это менять…
                    +2
                    Вы частично сами себе противоречите.
                    Операционный усилитель есть в формате микросхемы, и в 2020 году в ОУ есть биполярные транзисторы. Да и логика TTL наверняка выпускается.
                    ps
                    промахнулся, этот коммент для amartology
                      0
                      Биполярные транзисторы используются в некоторых микросхемах, это так. Но это не повод на из примере что-то объяснять в 2020 году.
                      Также большая часть современных (=недавно разработанных) ОУ — не биполярные, а КМОП. Или БиКМОП по крайней мере. ОУ в составе микросхем — поголовно КМОП.
                      –2
                      И про «своего рода затвор». Точнее, про затвор вдвойне хорошо, потому что дальше идёт рассказ про биполярный транзистор, у которого никакого затвора

                      На иллюстрации ниже изображён затвор для воды. Если вы слышали про сток, исток, затвор то такое упоминание может ввести в заблуждение.
                      +2
                      Да ну, бред. Так много деталей нужно не столько для того, чтобы все это запомнилось, сколько для того, чтобы научить учиться и дать фундаментальные основы. И то это не помогает, потому что нынче, на высокоуровневых харчах, никто не задумывается над тем, что заставляет работать Go или js, и в результате получаем 8 гигов на десяти вкладках, Atom, который медленнее моей бабушки, и хелло ворлд на 150 мегабайт оперативы.

                      Статью не читал.
                        0
                        Современный порт PS2 напрямую подключается к чипу Super I/O своими контактами. Зелёное — клавиатура, фиолетовый — мышка.

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

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


                            Всё, дальше меня уже вытащили из-под стола, успокоили валерьянкой. Для очистки совести заглянул в первую часть. И тут меня осенило: да это же "Книга Элая", руководство по сборке Windows 10 на гидравлике!


                            Прости, парень, за такой жесткий сарказм в комментарии, но не надо таких статей! Пожалуйста!




                            Можете швырять в меня камни, но, как минимум: теги "C#" и "разработка под виндовс" тут вообще никаким боком. За ними сюда и зашел, иначе этот бред не нашел бы даже.


                            Куда смотрит смотритель песочницы?

                              0
                              del найден через реестр
                                0
                                Пожалуй самый важный из них тот что имеет встроенную программу (прошивку, BIOS, UEFI) которая начинает выполняться как только появляется электричество. Она находит жёсткий диск с загрузчиком Windows и передаёт тому управление который в свою очередь запускает исполняемый файл ОС, который можно назвать Windows10.exe, на самом деле NtOsKrnl.exe.

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

                                Но ведь причины те ушли в историю?
                                  0
                                  Вы имеете в виду PXE или что-то ещё подобное? Для бездисковых станций оно таки активно используется, хоть их, конечно, и не так много.
                                    0

                                    Да, это интересная тема. Такие варианты загрузки очень даже популярны — про линукс с флешки ведь знаете? Я проверял на убитом ноутбуке (принесли починить, тыжпрограммист), система грузится с флешки и работает, но установить нельзя: не обнаружен жесткий диск.


                                    Правда интересно, почему не популярен виндовс того (Windows ToGo), тоже с флешки грузится.

                                    0
                                    Мое мнение — отлично. Вот теперь статья получилась очень фундаментальной, а все, что пишут в комментариях накрывается первыми ее абзацами. Действительно очень серьезный экскурс в архитектуру x86 (и отчасти x64). Конечно, местами можно много дополнить, местами много Legacy, но любой кто пойдет этим путем просто вынужден будет нарваться на все это. И если первая статья была просто сборищем фактов, то эта действительно «от кнопки и дальше».

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

                                    Спасибо. Удачи. Жду следующей части.
                                      0
                                      Спасибо большое.
                                      +1
                                      >Стесняюсь даже спросить: зачем? Зачем эта статья на хабре?

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

                                      Главное то, что статья отражает общий принцип работы IBM PC совместимого компьютера. Кучу современных программистов самоучки, и понятия не имеют как оно там вообще крутится, куда им там еще вникать в ttl vs cmos и то что управляется оно не током а напряжением, и какими уровнями, не важно это всё для общего понимания :)

                                      Для более детального понимания есть книги, и заинтересованный человек статьёй, может уже дальше капнуть.
                                        0
                                        Спасибо
                                        +3

                                        Друзья! Спасибо за добросовестный труд! Кто бы ты ни был, Дорогой Друг, почистивший мне карму, огромное тебе спасибо! Теперь я буду спать спокойно, с чистой совестью и отрицательной кармой.
                                        Я нелестно высказался о статье (и первой её части), получил за это минус в карму, но всё равно не пожалел о высказанном своём про статью мнении.
                                        Ляпов в статье множество, многие были отмечены комментаторами, и это оказалось бесполезным (и даже вредным для кармы в моём случае) занятием. Все глупости перечислять тут замучаешься.


                                        Порт это по сути шина с разъёмом по середине. Протокол — это порядок взаимодействия через контакты.

                                        Смешно? Мне уже нет…
                                        За справедливую критику наказали, человек "на том конце наказания", скорее всего, сам не представляет сколько нужно изучить и понять материала, технической документации, чтобы уверенно разбираться в устройстве и принципе работы компьютерного железа. Не говорю уже про время и опыт.
                                        Тут автор хочет объяснить всё на пальцах с картинками, делает это неправильно, множество раз ошибается (чуть-ли не в каждом абзаце статьи), я не могу пройти мимо, и повторяю: не нужны такие статьи на хабре. Люди сюда приходят узнать что-то новое для себя, научиться, когда не хватает информации по вопросу. По этой теме: "Как работает компьютер" материалов более чем достаточно, материалов качественных, от авторитетных авторов.
                                        Полезность этой статьи не просто нулевая, утверждаю с уверенностью — статья вредна, вводит ищущего знаний человека в заблуждения и сомнения.


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

                                          –1
                                          Конструктивная критика это когда указывая на недостатки вы учите другого человека, а он учит вас. Т.е. идёт взаимный обмен и наносится непоправимая польза всем участникам дискуссии. Необоснованная деструктивная критика пользы не приносит. Сказать что статья какашка много усилий не надо, технического опыта тоже. Никаких обоснований своей критике Вы не приводите.

                                          Вся статья бесполезным бредом быть не может. Потому что:
                                          1. Я сравнивал материал из разных источников, освежал знания
                                          2. Час консультировался со спецами работающими над железом для MS Azure
                                          3. Консультировался по поводу микроконтроллеров со своим коллегой получавшим образование по теме
                                          4. Компетентные люди уже отозвались о ней положительно в коментариях.

                                          Неточности в статье вовсе не значат мои коллеги из MS некомпететны. Потому как я мог неправильно понять или воспроизвести их информацию. Эта статья исключительно волонтёрская работа за которую я не получаю денег и делаю из собственного интереса. Поэтому я не стал заморачиваться с наймом за деньги фрилансера-специалиста в этой области, чтобы он прочитал текст и выдал рецензию и редактора чтобы он проверил текст на читабельность. Или вы думаете кто-то будет такой большой текст за спасибо обрабатывать?
                                            +1

                                            Всё равно, непонятно, почему вам за слово Спасибо минус поставили.


                                            Я статью поругал, потому что нового ничего не написано, всё что тут есть — довольно хорошо описано в других источниках, и гораздо лучше. Вот ничего не вижу плохого в стремлении показать людям "Работу ПК на примере ...", но статья-то совсем не так выглядит, как озаглавлена. Читал внимательно, Windows 10 не встретил нигде, ни в тексте, ни на картинках. Это как? Может логичнее было бы показать диспетчер устройств, с выделенной клавиатурой, описанием её свойств, шину и т.д.
                                            Без обид, картинки в одном стиле (а не сборная солянка), скриншоты с десятки были бы уместнее.


                                            image


                                            А зачем картинка в статье "просто покажу, но описывать не буду", да ещё отвлечённая от темы?
                                            Стек вызовов от клавиатуры можно показать на примере, показать как выглядят 8 бит:


                                            image


                                            Честно, если бы меня попросили поставить оценку (5 баллов макс.), поставил бы тройку с минусом. Не 2 — за старания.
                                            Лишнего много, хорошего мало. Такое впечатление, что человеку задали в институте курсовую тему и одним из условий — выложить на хабре.

                                              0
                                              Эта статья исключительно волонтёрская работа за которую я не получаю денег и делаю из собственного интереса.
                                              Это не только не оправдание того, что сделано плохо, а отягчающее обстоятельство, потому что у вас не было KPI и дедлайнов, заставляющих сдать недоделанный текст к определенному сроку.

                                              Или вы думаете кто-то будет такой большой текст за спасибо обрабатывать?
                                              Публичная оферта всем авторам хабра-статей, касающихся микроэлектроники: я готов вычитывать и консультировать за спасибо тексты любого объема.
                                                0
                                                Вы не убедили меня что статья сделана плохо. Я знаю много людей которым хочется знать о том как работает ПК именно в таком объёме. У меня есть основания считать что она сделана хорошо, хотя можно было и лучше. Поскольку статья волонтёрская то я рассчитываю что читатель увидив ошибку сообщит о ней, а не будет говорить что вся статья кака, т.е. отнесётся к моему труду с уважением. Если бы я делал это за деньги, то тут другой вопрос.

                                                Ваш аргумент о том что приходится работать с людьми которые заблуждаются и в этом отчасти моя вина я не понимаю и не принимаю. Если человек работает с электроникой он должен полагаться не на бесплатные любительские статьи в Интернете, а на платное образование — учебники, видеокурсы, тренинги, учёбу в университете. Даже если бы Вы были преподавателем и работали со студентами. Они будут лучше понимать материал если будут рассматривать его с разных перспектив и тем более если найдёт неточности и ошибки, можете не соглашаться со мной. Если Ваши клиенты не шарят в электротехнике, то опять же претензии не ко мне.
                                                  +3
                                                  не убедили меня что статья сделана плохо.
                                                  Давайте, я напишу статью на ту же тему, что и вы, но с точки зрения хардварного инженера? И описание высокого уровня будет выглядеть примерно так: «а потом сигнал попадает в операционную систему MS Office, которая с его помощью выполняет такие программы, как „калькулятор“ и „расчет_зарплаты.xlsx. Другие популярные операционные системы — это BIOS и Total Commander“. Понравится вам такое читать? Полезно ли аудитории такое читать?
                                                    –1
                                                    Напишите, я вас поправлю если найду неточности.

                                                    Если статья для «железячников», то про Total Commander, BIOS, MS Office лучше написать что это графическая оболочка через которую пользователь взаимодействует с железом. (Это в моей первой статье я называл микросхемы микроконтроллером Total Commander операционной системой, по-вашему) Сигнал приходит в CPU, где его подбирает ОС через механизм прерываний, обрабатывает, возможно передаёт информацию о клавише активному приложению, которое может его так же обработать выполнив привязанную команду или отобразив на экран букву используя графические библиотеки ОС, которые в конечном счёте вызывают драйвер видеокарты. Я бы примерно такого подхода придерживался и придерживаюсь в своей статье.

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

                                                    Мир Алисы Селезнёвой в котором маленькая девочка знает квантовую физику гораздо ближе чем кажется. Лет 300 назад только монахи имели доступ к научным знаниям, потом аристократы, потом университетские профессора. Т.е. раньше чтобы удовлетворить тягу к знаниям надо было преодолеть огромные барьеры и мириться с неудобствами: высокомерным и хамоватым преподом, чистить парашу за монахами. Сейчас благодаря YouTube, блогам можно получить информацию доступным для себя языком и в нужном объёме. Что делать с этой инфой — личное дело каждого, Интернет сделал информацию доступной всем. Английский можно учить у носителей через Ютуб, а не через псевдоразговорники. Алиса была такой умной потому что у них в будущем квантовая физика была расжёвана блогерами и любителями с разных сторон, доступным для своей целевой аудитории языком. Потому что лучшие преподаватели настоящего и прошлого оставляли записи своих лекций доступные всем и всё что непонятно можно было понять в 5-ти 10ти минутном видео. Обсуждения на форумах людей из разных дисциплин позволяют понять информацию ещё глубже, даже если это было лет 50 назад. Это не делает людей тупее, большее количество людей получает возможность найти себя в разных областях и не за 7-10-20 лет, а за 3-5 года. Мы ещё в самом начале этого нового Мира.

                                                    Разве это плохо, что человек загорится железом или низкоуровневым программирование после моей статьи, потому что она была написана понятным для него языком? Или потому что сложила все паззлы мозаики знаний хаотично разбросанной древней и неэффективной системой образования? Человек изучит более глубокие статьи по теме и не будет говорить глупости как я. А мне не обязательно знать на отлично электротехнику, потому как я с ней не работаю и своим невежеством нанести ущерб не могу. Мною движит интерес как эта коробка на столе работает, я не собираюсь их проектировать или ремонтировать. И таких как я много.
                                                      +1
                                                      Разве это плохо, что человек загорится железом или низкоуровневым программирование после моей статьи, потому что она была написана понятным для него языком?
                                                      Плохо то, что у него с самого старта будет каша в голове, которую потом придется разгребать.

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

                                                      Сейчас благодаря YouTube, блогам можно получить информацию доступным для себя языком и в нужном объёме.
                                                      Например, информацию о том, что Земля плоская, гомеопатия работает, а микросхема и микроконтроллер — антонимы.

                                                        0
                                                        Каша в голове от обилия новой информации происходит всегда. И с ней всегда приходится разбираться через практику.
                                                        В чём будет измеряться будет ущерб? В рублях? Сожжённых ПК?
                                                        YouTube в рекомендациях выдаёт видео и с противоположной точкой зрения. Если человек верит в плоскую землю, то возможно ему это выгодно.
                                              +1
                                              Порт это по сути шина с разъёмом по середине. Протокол — это порядок взаимодействия через контакты.


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

                                                Порт, это порт, но не шина. Представьте себе аналогию: морской порт — тоже порт. Шина — это дорога, шоссе, железная дорога, не зря на монтажных платах шины называют дорожками. Так вот порт — это конец дорожки. Понятненько?

                                                  0
                                                  Видимо мое понимание аналогий совпадает в какой-то мере с авторским.

                                                  Так вот порт — это конец дорожки. Понятненько?

                                                  Я считаю что автор так и написал, шина с разьемом по середине, те по вашей аналогии, по середине дороги выкопали море и поставили два порта (то бишь разъем)
                                                    0

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

                                                  0

                                                  За протокол, смотрите определение — что такое протокол. Опять куча аналогий: полицейский протокол, протокол заседания, так же и в электронике — протокол не теряет своего смысла никогда, нигде. Причём тут контакты?

                                                    +1

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

                                                  0

                                                  Вон, человеку (artmv32) тут, вообще, за слово "Спасибо" кто-то минус поставил…
                                                  Бред? Неее… Просто властью одарённые.
                                                  Маразм крепчает...

                                                    +1

                                                    Открывая статью я подумал было, что здесь будет что-то о процессах, характерных именно для Windows 10 или хотя бы просто windows — драйвера там, всё такое. Я за этим не следил уже лет двадцать, но по случаю — почему бы не почитать? Тогда я ещё интересовался аппаратурой и уровнем аппаратной абстракции (сейчас чистый программист).
                                                    Сначала меня насторожил разрез кнопки "с кликом" — которые были в моде лет двадцать пять тому назад, и тогда же проиграли кратно более дешёвым плёнкам.
                                                    Картинку с микрухой в DIP-корпусе я привычно проигнорировал — ладно, "изображение носит справочный характер".
                                                    Дойдя до порта PS/2, я голосом Кроша из "Двигателя прогресса" признёс: "Странно… но допустим."
                                                    Начал потихоньку проматывать, вырывая отдельные картинки и фразы, и пытаясь понять, что это было. Понимание не приходило, скорее даже таяло. Использование нулей и единиц позволили, следуя логике повествования, прекратить уже эксплуатировать законы физики. Читать хотелось всё меньше и меньше, пошёл по картинкам.
                                                    Вижу процессор 8086. Кажется, Windows 10 уже совсем не здесь.


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


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


                                                    Каким бы я хотел увидеть рассказ для программистов по этой теме?


                                                    Я не считаю правильным пытаться впихнуть целый курс "устройства программного управления" (в моём техникуме это так называлось, я на наладчика ЧПУ учился) в одну статью. Тем более, не будучи глубоко в теме.


                                                    И я бы начал с конца. Даже программист может получить два уровня событий — ввод символа или нажатие/отпускание кнопки. Откуда вообще в программе берутся эти события? Здесь уместно короткое описание взаимодействия приложения и соответствующей части WinAPI, коли мы про Windows тут говорим. Можно сравнить с Линуксом и показать тем самым ценность данного уровня абстракции (вообще, спускаясь по этому пути до замыкания контактов кнопки, "показывать ценность абстракции" можно на каждом уровне). Откуда берутся события WinAPI? Что делает драйвер клавиатуры под Windows? Что там дальше — BIOS, UEFI (заранее извиняюсь, если не точен — за темой не слежу давно). Можно (программистам) рассказать о том, что прерывания — это аппаратная реализация таблицы виртуальных функций, и это очень похоже на то, что творится в объектах (для тех, кто знает, что в этих объектах творится под капотом). Можно обратить внимание на то, почему нам без разницы, воткнута ли клавиатура в USB, или в PS/2, или обе. И на каком уровне отрабатывается дребезг контактов, так, что нам про него и знать не надо. Можно откатиться назад во времена 8086 или 8088 и рассмотреть более простые и более ранние последовательности прохождения "от контакта до события в программе".


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

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

                                                      Windows изначально делался максимально переносимым на все существующие платформы и платформы которые появятся в будущем. Ему всё равно на каком железе работать, поэтому угулябляться в эту тему и приводить современные материнки, клавиатуры и USB-порты на мой взгляд не обязательно, это добавит сложности понимания и деталей которые скроют основной посыл и породят споры уводящие дискуссию в сторону. Windows 10 поддерживает PS2 и теоритически может работать с тем железом что я придумал, надо просто добавить поддержку в ACPI.sys.

                                                      Без описания процессов которые происходят на материнке для передачи сигнала о нажатой клавише статья не достигнет цели — снять ореол мистики с ПК и дать представление как машина работает в целом. Какие минусы того что человек который не проектирует железо и даже не пишет драйвера будет примерно представлять как ПК работает на уровне железа?
                                                      +1
                                                      Порт PS/2 называется серийным портом

                                                      Последовательным по-русски. Серийные производства и маньяки бывают.
                                                      Ещё желателен переход от кнопок не сразу к микросхеме, а плавнее — от транзистора к двухтранзисторному триггеру и затем из нескольких триггеров собирается регистр состояния кнопок с битами. 2-3 картинки хватит объяснить принцип работы контроллера клавиатуры.
                                                      Иначе каша в голове юных программистов не разложится по полочкам.

                                                        0
                                                        от транзистора к двухтранзисторному триггеру
                                                        В КМОП триггере минимум четыре транзистора. А практически — штук двенадцать-шестнадцать.
                                                          0
                                                          Поправил
                                                          0
                                                          Поэтому используют такой подход как “клавиатурная матрица” — все клавиши распределяют по столбцам и строкам
                                                          Много раз слышал про этот подход, но все равно не могу понять как это работает, предположим, по вашей схеме я нажму две клавиши S и С, тогда как мне определить, что не была нажата клавиша F?
                                                            0
                                                            Есть тачпады с одним касанием, есть 10-тачевые. Сколько событий одновременно может обработать контроллер, столько и будет «нажато клавиш».
                                                            Простите за столь примитивное объяснение, следую тону, заданному ТС.
                                                              0
                                                              Я не задавал вопрос сколько клавишь может определить контроллер, а задал вопрос как можно отличить, при зажатых клавишах S и С, была ли зажата клавиша F, так как если посмотреть на схему матрици, то сразу будет видно что именно клавиши S и С имеют одинаковые линии с клавишой F, из-за чего, при их замыкании, будет замыкаться и клавиша F, как я понимаю.
                                                                0

                                                                А Вы и не узнаете. Есть кнопки, которые читаются одновременно, и есть те, которые перебивают друг друга. Вы никогда не обращали внимания, что многоклавишные сочетания никогда не содержат нескольких нажатых одновременно буквенных клавиш? Клавиатуры не поддерживают, и привет.
                                                                Да и с управляющими не всегда хорошо. У меня была клавиатура, на которой не работало сочетание Ctrl + Alt + m (выделить метод в Идее).
                                                                Несовершенный мир. Мир компромиссов. Всё нормально

                                                            0
                                                            Вы писали в этой или предыдущей статье об LowLevelKeyboard Hook который позволяет программно нажимать клавиши. Но данный хук не работает с играми DirectX, нажатия не происходят, есть ли альтернативы какие-нибудь, чтобы подружиться с DirectX?
                                                              0
                                                              LowLevelKeyboardHook — позволяет перехватывать нажатые клавиши до того как они попадут в приложение. Чтобы нажимать клавиши смотрите функцию SendInput или InjectKeyboardInput. DirectX может вызывать свой API для чтения данных с клавы. Раньше он назывался DirectInput, сейчас не знаю.
                                                                0
                                                                Гляньте GetRawInputData.

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

                                                              Самое читаемое