Informationen zum Betrieb eines PCs am Beispiel von Windows 10 und der Tastatur von Teil 2

In diesem Teil werden wir überlegen, in welche Richtung die Informationen über die gedrückte Taste von der Tastatur zur CPU gelangen. Es werden viele Bilder angezeigt, und dies ist nicht der letzte Teil. Ich werde darüber aus der Sicht eines Programmierers sprechen, der im Benutzermodus schreibt - Benutzerprogramme, Web, mobile Anwendungen - daher kann es zu Ungenauigkeiten kommen. Es ist unwahrscheinlich, dass Menschen, die mit Elektronik zu tun haben, etwas Nützliches für sich finden. Der erste Teil ist hier .


Das Problem der Hochschulausbildung von Programmierern besteht darin, dass die Schüler einzelne Aspekte, die aus dem Zusammenhang gerissen wurden, detailliert untersuchen, ohne zu verstehen, wie dies alles zusammenpasst. Mehrere Semester höherer Mathematik, um Physik zu verstehen, um Elektrotechnik, Elektrogeräte, Assembler, Betriebssystem, Algorithmen, Systemprogrammierung und eine Reihe anderer Fächer zu verstehen, die in einem Standard-Fünfjahresprogramm zusammengefasst sind. Die Fülle an Details und niemand erklärt, wie dies in das Gesamtbild passt. Es wird davon ausgegangen, dass der Schüler es nach 5 Jahren selbst in seinen Kopf bindet und dann mit .Net arbeitet und niemals den Elektronik- und Kernel-Modus berührt. Ich glaube, dass es nicht notwendig ist, so detailliert über den Betrieb eines Computers Bescheid zu wissen. Es reicht aus, ein allgemeines Verständnis dafür zu haben, was auf dem technologischen Stapel geschieht. Wenn die Personen, aus denen die Ausbildungsprogramme für Universitäten bestehen, Fahrschulen eröffnen,Sie würden Russisch, Kalligraphie und Hydrodynamik lernen, weil Sie mit Inspektoren kommunizieren, Flüssigkeiten wechseln und Erläuterungen schreiben müssen. Der Artikel enthält einige Ungenauigkeiten, sodass er nicht zum Bestehen der Prüfung in speziellen Fächern geeignet ist. Danach ist das PC-Gerät leichter zu verstehen.

Unter Katzenverkehr.

Eine Tastaturtaste ist eine Taste, die die Kontakte schließt und durch die elektrischer Strom fließt. Der Mechanismus zum Schließen / Öffnen ist so ausgeführt, dass der Knopf nicht vollständig gedrückt werden muss, da sonst die Finger schnell müde werden und die Tastatur nicht ergonomisch ist. Im Abschnitt sieht der Schlüssel so aus. Auf der rechten Seite befindet sich der Kontakt, an den die Spannung angelegt wird.


Das „Gehirn“ der Tastatur, das den Tastenanschlag bestimmen kann, ist ein Mikrocontroller , bei dem es sich im Wesentlichen um einen Mini-Computer handelt, dessen Programm jede Taste durch Anlegen einer Spannung überprüft. Wenn sie übergeben wird, wird die Taste gedrückt. Die Beine des Mikrocontrollers haben ihre eigenen Namen und können im Code abgerufen werden. Sie dienen zur Kommunikation mit der Außenwelt. Die Beine können den Betrieb des Mikrocontrollers steuern, den Status des Chips melden oder zum Lesen / Übertragen von Daten dienen.
Das Programm ( Firmware ) kann in C oder Assembler geschrieben werden, es wird über den Programmierer auf den Mikrocontroller hochgeladen . Es ist ein Gerät mit einem Anschluss zum Installieren eines Mikrocontrollers und kann über USB an einen Computer angeschlossen werden, auf dem spezielle Software ausgeführt wird. So sieht der Programmierer im wirklichen Leben aus:
Durch das Programm kann jeder Zweig eingestellt oder die Spannung gemessen werden. Der Algorithmus zum Finden der gedrückten Taste besteht darin, Spannung an einen Zweig anzulegen und auf dem anderen zu messen. Wenn die Taste gedrückt wurde, hat der zweite Zweig ungefähr die gleiche Spannung wie der Eingang. In einer Endlosschleife werden also alle Tasten überprüft. In der Regel verfügt die Tastatur über 80-110 Tasten und der Kontaktcontroller (Pins) ist viel kleiner. Daher verwenden sie einen solchen Ansatz wie die „Tastaturmatrix“ - alle Tasten sind in Spalten und Zeilen verteilt, und der Algorithmus ist darauf reduziert, eine Spalte zu finden, die die Zeile schneidet, an die das Programm Spannung angelegt hat. Die Spalten- / Zeilenkorrespondenz zu Kontakten wird hier hervorgehoben.


In Wirklichkeit kann die Matrix so aussehen. Links ist industriell und rechts ist hausgemacht.


Im Pseudocode kann der Teil des Firmware-Programms, der die gedrückten Tasten bestimmt, so aussehen.

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);
    		}
  	}
}

Jeder Schlüssel entspricht einem Scan-Code, ist standardisiert und eine 8-Bit-Zahl, d.h. ein Byte. Wenn die Y-Taste gedrückt wird, muss der Tastaturcontroller daher die Nummer 21 (0x15) und beim Loslassen die Nummer 149 (0x95) senden. Wie erfolgt der Versand? Sicherlich haben Sie mit JSON, Webdiensten oder gesendeten Daten zwischen Prozessen gearbeitet und wissen, dass Sie zum Senden von Daten serialisieren müssen , d. H. in ein Array von Bytes oder formatiertem Text verwandeln, das der Empfänger deserialisieren kann , d.h. Erstellen Sie ein Objekt in seinem Adressraum neu. Und was kann Daten auf so niedrigem Niveau serialisieren? Wir müssen nur 1 Byte (8 Bit) übertragen. Mit Blick auf die Zukunft werde ich sagen, dass wir Daten Stück für Stück übertragen werden.

In der Mathematik gibt es eine Formel, die jede uns bekannte Dezimalzahl in eine Folge von Nullen und Einsen umwandeln kann und umgekehrt. Diese Formel hat Anwendung in der Computertechnologie gefunden. Im ersten Teil erwähnte ich beiläufig, dass die analoge Technologie die Gesetze der Physik ausnutzt, während die digitale auf der Ebene von Nullen und Einsen arbeitet. Dies bedeutet, dass ein analoges Telefon das gesamte Spektrum der menschlichen Stimme in eine Folge elektromagnetischer Wellen codiert und ein digitales Telefon einen Chip verwendet, der die menschliche Stimme beispielsweise in WAV-Dateien in digitale Daten umwandelt und diese dann in einer Folge von Nullen und Einsen in Form elektromagnetischer Wellen überträgt. Nur in diesem Fall müssen anstelle des gesamten Spektrums der Stimme nur zwei Werte dargestellt werden - 0 und 1. Sie können durch Wellen unterschiedlicher Länge, unterschiedlicher Spannungen, dargestellt werden.Lichtimpulse durch die Glasfaser, schwarze und weiße Streifen auf Papier, Löcher in der Lochkarte.

Der Scan-Code der gedrückten Y-Taste in Binärform sieht aus wie 0001 0101. Wir übertragen sie entlang des Mikrocontroller-Abschnitts, der für die Daten ( DATA ) verantwortlich ist. Die logische Einheit ist 3,3 V oder höher, logische Null- Die Spannung beträgt ca. 0V. Hier ist der Haken: Wie übergebe ich drei Nullen hintereinander? Dazu benötigen wir einen zweiten Abschnitt, den wir CLOCK nennen, wenn auf diesem eine bedeutet, dass die Übertragungssitzung eines Bits begonnen hat und Null beendet ist. Eine solche Änderung der Werte (Spannungen) tritt mit einem bestimmten Zeitintervall auf, beispielsweise 50 Nanosekunden, da sich am anderen Ende ein zweiter Mikrocontroller befindet, der mit seiner eigenen Geschwindigkeit arbeitet und auf die Beine hört, mit denen CLOCK und DATA in einer Endlosschleife verbunden sind. In diesem Beispiel gehe ich davon aus, dass die Tastatur über den unten gezeigten PS2-Anschluss angeschlossen ist. Über den USB-Anschluss unterscheidet sich der Übertragungsalgorithmus. Wie Sie sehen können, verfügt der PS2-Port über Pins namens Data, Clock.Zusätzlich gibt es einen Kontakt, über den der PS2-Port-Controller die für den Betrieb erforderliche 5-V-Spannung auf die Tastatur verteilt, und einen Erdungskontakt, der einfach auf dem Tastaturkörper angezeigt wird. Andere Kontakte werden nicht verwendet.
Der PS / 2- Port wird als serieller Bus bezeichnet , da er nacheinander Bits überträgt (eine Folge von Bits). Der parallele Port überträgt Daten gleichzeitig an mehrere Kontakte und kann beispielsweise ein Byte (8 Bit) gleichzeitig für eine Datenübertragungssitzung übertragen.

Was ist der Unterschied zwischen einem Port, einem Bus und einem Protokoll? Ein Bus ist wie ein Port eine Reihe von Kontakten (Verkabelung) und eine Vereinbarung über deren Verwendung. Nur der Port verfügt über eine Verbindung zum Anschließen externer Geräte, und der Bus wird zur Kommunikation von Komponenten auf der Hauptplatine verwendet. Ein Port ist im Wesentlichen ein Bus mit einem Anschluss in der Mitte. Ein Protokoll ist eine Interaktion durch Kontakte. Im Beispiel mit PS / 2 war dies die Reihenfolge der Datenübertragung über die Clock- und Datenkontakte.

Zuvor war der Intel 8042-Mikrocontroller sehr verbreitet und wurde sowohl in der Tastatur als auch als PS2-Port-Controller verwendet, d. H. Zwei identische Chips tauschten Daten aus. Der PS2-Porttreiber in Windows heißt 8042prt.sys.

Tatsächlich übertragen wir nicht 8 Bits, sondern 11, da die Daten als Datenpaket oder Nachricht übertragen werden . Zusätzliche 3 Bits geben den Anfang und das Ende der Daten an - eine Null am Anfang und 0 1 am Ende, ein solches Protokoll zum Übertragen von Daten vom Gerät zum Host in PS2. Dies kann wie die SendKey- Funktion im Pseudocode aussehen , wenn Sie den Code besser verstehen möchten. Es sendet Daten über die gedrückte Taste über den PS2-Bus.


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);
}

Es ist nicht immer erforderlich, die Spannung an jedem Zweig für die Datenübertragung manuell einzustellen. In einigen Fällen wird der im Register gespeicherte Wert automatisch auf den Kontakten angezeigt.

In der Grafik wird eine solche Datenübertragung wie folgt dargestellt. Die Zeit liegt entlang der X-Achse und die Spannung entlang der Y-Achse.


In der analogen Technologie kann das Signal verzerrt sein, d.h. Der Draht ist an nichts angeschlossen, aber das Voltmeter zeigt 0,5 V an, da sich in der Nähe ein elektromagnetisches Feld befindet. Daher wird das Konzept der Schwellenspannung verwendet. Wenn die Spannung kleiner als der Schwellenwert ist, nehmen wir an, dass wir eine logische Null haben, andernfalls Einheit. Unter Berücksichtigung möglicher Verzerrungen kann der Scan-Code der gedrückten Y-Taste folgendermaßen aussehen:


Bevor wir uns genauer ansehen, wie Daten von der Tastatur zur CPU gelangen, wollen wir uns mit Mikrochips , Bussen und Motherboards befassen .

Mikrocontroller und Mikroschaltungen


Der Mikrocontroller kann ein in ihn eingenähtes Programm ausführen, verfügt über einen bestimmten RAM-Speicher und einen Speicherort für Daten und Programmcode. Im Chip kann das Programm bereits in der Entwurfsphase eingestellt werden. Das manuelle Erstellen einer elektrischen Schaltung, die einen Algorithmus implementiert, ist sehr zeitaufwändig und daher kann eine spezielle Programmiersprache namens VHDL (Hardware Description Language) zum Entwerfen von Mikroschaltungen verwendet werden . Dies ist eine Programmiersprache auf hoher Ebene, die in einen Schaltplan übersetzt wird. Sie wird durch ein Programm ausgeführt, das die optimale Position der Funkelemente auf der Platine findet und letztendlich in physischer Form erstellt wird. Die Bilder dienen nur zur Veranschaulichung.



Wie werden die Daten und Befehle in Mikrochips und Mikrocontrollern dargestellt? Die Basis der Computertechnologie ist ein Transistor, den die Menschheit in mikroskopischen Dimensionen herstellen gelernt hat. Ein Transistor ist ein solches Funkelement, das drei Zweige hat: einen Eingang, einen Ausgang und zwischen ihnen eine Steuerung, die einen Strom zwischen zwei Zweigen öffnet oder schließt. Die folgende Abbildung zeigt den Betrieb des Transistors, Wasser zeigt den Strom.


An den Eingangszweig wird eine Spannung angelegt. Wenn die Steuerung eine Spannung hat, fließt der Strom zum Ausgang, andernfalls liegt 0 V an. Mit 8 Transistoren, von denen jeder eine LED an den Ausgangszweig angeschlossen hat, die entweder aufleuchtet oder nicht, können wir uns 256 einzigartige Kombinationen vorstellen (2 hoch 8). Lapochki werden von rechts nach links sowie Dezimalzahlen interpretiert. Die unteren Ziffern befinden sich rechts.
Jene. Eine Lampe repräsentiert ein Informationsbit (0 oder 1), und acht solcher Lampen entsprechen einem Byte. Es ist möglich, logische Operatoren AND, OR, NOT, XOR auf Transistoren zu erstellen.


In der UND-Operatorschaltung (links im Bild oben) hat der Ausgang beispielsweise nur dann eine Spannung, wenn beide Eingangsspannungen ungleich Null sind. Jemand hat bereits Algorithmen für Addition, Multiplikation, Division und Subtraktion erfunden, die auf bitweisen logischen Operationen und Bitverschiebungen basieren. Chiphersteller müssen sie nur implementieren. Die Funktionsweise des bitweisen Additionsalgorithmus ist unten dargestellt, wir werden ihn nicht analysieren:


Die Nanotransistoren sind mikroskopisch klein und können millionenfach auf der Platine platziert werden. Der Intel-Prozessor wird unten gezeigt und wie ungefähr einer seiner Kerne aussehen könnte. Das Bild ist illustrativ.


Mikroschaltungen können einen Mikrocontroller auf derselben Platine und im selben Fall enthalten.

Reifen


In Lehrbüchern werden Reifen normalerweise als fette Pfeile angezeigt (siehe Abbildung unten). Dies geschieht, um nicht alle Verbindungen der Kontakte zu zeichnen, die viele sein können. Die Bedienung des PS2-Busses ist sehr einfach. Sie benötigen lediglich drei Pins. Es gibt jedoch Busse, die beispielsweise 124 Kontakte für die Datenübertragung haben.



Es gibt folgende Reifentypen:
  • Datenbits auf diesen Kontakten werden als Daten interpretiert: Nummer, Symbol, Teil eines Bildes oder andere Binärdaten. Die Busbreite beeinflusst den Durchsatz und die Anzahl der pro Sekunde übertragenen Bits
  • Adressen - Bits auf diesen Pins werden als physikalische Adresse im Speicher interpretiert. Die Breite dieses Busses bestimmt die maximal unterstützte RAM-Kapazität.
  • — . CPU RAM I/O.
  • . , . ATX 24 Pin 12V PSU Connector, .


Ein Reifen kann aus Substraten bestehen , d.h. Einige Kontakte werden für Daten verwendet, andere für Adressen, andere für die Steuerung und Kontakte, an die Strom übertragen wird. Der Ansatz, bei dem dieselben Kontakte abwechselnd zum Übertragen von Daten und Adressen verwendet werden, wird als Multiplexing bezeichnet . Beispielsweise verfügt der Intel 8086-Prozessor über einen Daten- und Adressbus von 20 Bit. Auf dem Pin-Diagramm sind seine Kontakte mit AD0-AD19 ( Abschnitte 16-2 und 39-35) gekennzeichnet.


In einem komplexeren Fall sind möglicherweise mehrere Mikroschaltungen mit denselben Kontakten verbunden. Für die normale Kommunikation benötigen sie einen zusätzlichen Chip, der bestimmt, wer zu welchem ​​Zeitpunkt sie verwenden kann. Dieser wird als Buscontroller bezeichnet. In der folgenden Abbildung ein sphärischer Bus im Vakuum: Vier identische Mikrocontroller übertragen Daten über den Buscontroller an den Consumer-Mikrocontroller. Das rote Kabel ist die Spannung, die der Buscontroller an alle daran angeschlossenen Chips verteilt. Daten werden über die grünen Drähte übertragen und es wird ein „Verhandeln“ mit der Bussteuerung durchgeführt, und die blaue Leitung ist Clock, über die die Bussteuerung die Kommunikation der Steuerungen synchronisiert, da diese mit unterschiedlichen Geschwindigkeiten arbeiten können. Befindet sich die logische Einheit auf dem blauen Draht, kann der Chip, der zur Nutzung des Busses berechtigt ist, einen Interaktionsakt mit der Außenwelt ausführen - zum Beispiel ein bisschen lesen.


Der Buscontroller kann als integraler Bestandteil betrachtet werden, da die Kommunikation mit der Außenwelt über ihn erfolgt und es nicht wichtig ist, wie viele Chips oder echte externe Geräte sich tatsächlich auf dem Bus befinden. Für die Datenübertragung verfügt das Motherboard über ein umfangreiches Busnetz. Trotz der Tatsache, dass es sehr viele Chipsätze gibt, folgen sie größtenteils einem typischen Layout, da alle an das Motherboard angeschlossenen Geräte unterteilt sind in:
  • Langsam - Tastatur, Festplatte, Netzwerkkarte, Audio usw.
  • Schnell - CPU, RAM, GPU.
Basierend auf dieser Aufteilung verfügt das Motherboard über zwei Hauptchips - die South Bridge , die die Arbeit aller langsamen Geräte koordiniert, und die North Bridge zur Koordination schneller Geräte. In modernen Computern befindet sich die Northbridge in der CPU selbst, und die Southbridge kann als Platform Controller Hub bezeichnet werden, dies ändert jedoch nichts an der Essenz. Beide Brücken sind durch einen Bus miteinander verbunden, über den sie sich gegenseitig über wichtige Ereignisse informieren. Von besonderem Interesse ist der Taktgenerator, mit dem der Prozessor, der RAM und die Grafikkarte ihre Arbeit synchronisieren, das gleiche blaue Kabel. ÜbertaktenDadurch werden die BIOS-Einstellungen im Wesentlichen geändert, sodass die Synchronisierung häufiger erfolgt, während sich die Hardware, hauptsächlich die CPU, stärker erwärmt, mehr Strom verbraucht und ihre Ressourcen schneller entwickelt. Das Gegenteil ist das Untertakten , wenn die Geschwindigkeit abnimmt, um Batteriestrom zu sparen oder Geräusche zu reduzieren.

Ein Chipsatz ist ein Satz von Chips, die alle so konzipiert sind, dass sie miteinander arbeiten. Sie bieten Kommunikation zwischen Komponenten auf dem Motherboard und Funktionen wie Timer. Der Chipsatz funktioniert nur mit einer Prozessormarke, AMD kann mit dem Intel-Chipsatz nicht in das Motherboard eingesetzt werden, sie haben sogar unterschiedliche Kontakte. Das Motherboard-Diagramm ist unten dargestellt:
Möchten Sie ein Beispiel für die Hardware-Kapselung? Intel-Chipsätze haben einen Chip namens Super IO , der in der folgenden Abbildung dargestellt ist und über den LPC-Bus mit der South Bridge verbunden ist. LPC ist der intelligente Name für die Verkabelung von CLOCK, DATA, VCC (POWER). Dieser Chip enthält die Emulation aller alten Chips, die jemals für Peripheriegeräte verwendet wurden, einschließlich des 8042-Chips, der für den PS2-Port verwendet wurde. Es gibt auch einen Port-Controller-Emulator für Floppy und andere Relikte, die den Fortschritt stören. Im allgemeinen Diagramm des Motherboards sind oben sowohl Super IO als auch der LPC- Bus angegeben .


Der moderne PS2-Port wird direkt mit dem Super I / O-Chip verbunden. Grün ist die Tastatur, Lila ist die Maus. Zuvor war es mit dem Intel 8042-Mikrocontroller verbunden.


Das Motherboard besteht aus einem Dielektrikum, d.h. Material, das keinen Strom leitet. Der Strom kann nur über die auf der Tafel gedruckten Linien fließen. Das Motherboard hat viele Ebenen, von denen jede ihre eigenen Kontakte gedruckt hat. Wenn Sie also das Motherboard dort bohren, wo die Linien nicht sichtbar sind, können Sie es verderben, indem Sie die unsichtbaren Kontakte im Board beschädigen. Jetzt können Sie sich den Prozess der Verteilung von Daten von der PS2 an die CPU genauer ansehen.

Der Weg von der PS2 zum Prozessor


In der Regel wird die Computerarchitektur auf dem 8086-Prozessor berücksichtigt. Dies ist zum einen richtig, weil sie im Vergleich zu modernen CPUs recht einfach ist, zum anderen ist sie falsch, weil sie alt ist und nicht die Architektur einer modernen Maschine widerspiegelt. Intel 8086 benötigte keine Bridges, da es so langsam war, dass es mit Peripheriegeräten an einem Bus arbeiten konnte, d. H. bei einer Frequenz. Ich kenne die modernen CPU- und Chipsätze nicht, daher werde ich sie an fiktiven erklären, die echten ähneln. In meinem Beispiel wird es eine fiktive CPU geben, die Intel 8086 sehr ähnlich ist. Der Super IO-Chip hat mehr als hundert Kontakte und es gibt Dokumentationen im Internet, aber ich sehe keinen Sinn darin, herauszufinden, welche Pins die Tastatur und der LPC-Bus tatsächlich für die Kommunikation mit South Bridge verwenden. Hauptsache das Prinzip, das unterschiedlich umgesetzt werden kann.

Werfen wir einen kurzen Blick auf das Bild, um uns daran zu erinnern, dass wir bereits bestanden haben. Die grünen Pfeile zeigen den Weg an, den wir nehmen werden.


Die Daten von der Tastatur sind also bereits auf den PS2-Port-Controller gelangt, der einst ein Intel 8042-Chip war und jetzt von einem Super IO-Chip emuliert wird. Und jetzt analysieren wir die weitere Vorgehensweise auf meinem fiktiven Motherboard mit einer fiktiven CPU. Der PS2-Controller hat einen Scan-Code der gedrückten Y-Taste empfangen und liefert nun Spannung an das Kontaktsignal (violette Linie, siehe Abbildung unten), auf dem der programmierbare Interrupt-Controller über Daten von der Tastatur benachrichtigen soll. Dieses Signal wird von einem Chip zum anderen übertragen, bis die North Bridge es an den Interrupt-Manager weiterleitet.


Programmable Interrupt Controller ist ein Intel 8259 Chip , in dem 8 Beine (ihre Namen IRQ0-IRQ7) sind reserviert für Meldungen von bestimmten Ports empfangen ( I nterrupt R e Q uest). Eine Tastatur ist mit dem IRQ1-Pin verbunden, IRQ7 mit einem Drucker, eine Diskette mit einem Pin, einer Soundkarte, parallelen Anschlüssen und anderen . Natürlich kann es viel mehr als acht Geräte geben, so dass eine Technik wie Kaskadierung verwendet wurde, wenn ein anderer ähnlicher PIC mit einem Bein mit dem Namen IRQ2 verbunden wurde, bei dem die Zählung nicht bei 0, sondern bei 7 begann. Die Maus ist an IRQ12 gebunden, d.h. Fuß IRQ5 auf dem zweiten PIC.

Der Interrupt-Controller sollte nun die CPU über das Ereignis auf der Tastatur informieren. Dies geschieht wie folgt:
  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).

Der Tastatur-Interrupt-Handler im einfachsten Code sieht folgendermaßen aus. Es ruft einen Befehl auf, der den Abschluss der Interrupt-Verarbeitung signalisiert, d. H. sendet ein Signal an den INTA-Fuß.

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

Sie können mehr darüber erfahren, wie die Interrupt- Vektortabelle auf osdev konfiguriert ist .

Jetzt wissen wir, wie der Interrupt passiert ist, aber wir wissen nicht, wie der Interrupt-Handler Informationen über die gedrückte Taste liest. Aus Softwaresicht besteht der PS2-Port aus zwei Registern, auf die nur über die E / A-Portnummer nicht über Namen oder Adressen im Speicher zugegriffen werden kann . Diese beiden Einzelbyte-Register sind den Ports 0x60 und 0x64 zugeordnet, das erste (0x60) enthält den Scan-Code des Schlüssels. Der zweite Port wird verwendet, um Status und Befehle an den PS2-Port (nicht an die Tastatur!) Zu übertragen. Der x86 - Architektur - Befehlssatz hat den Befehl IN storeTo , fromPortNumHiermit wird der Wert vom angegebenen E / A-Port in das angegebene Register gelesen. Zum Beispiel IN 0 AL speichert 0x60 die Daten von der Tastatur im AL-Register. Es könnte ungefähr so ​​funktionieren:

  1. In dem Prozessor, den wir in Betracht ziehen, gibt es Beine AD0-AD20, die zur Angabe der Adresse und der Daten verwendet werden können. Dies ist sowohl ein Datenbus als auch ein Adressbus. Zusätzlich zu ihnen gibt es eine Reihe von Steuerzweigen, zum Beispiel Pin Nr. 28 (S2), deren Wert der Nordbrücke anzeigt, wo das Lesen stattfinden wird - aus dem Speicher oder einem Eingabe- / Ausgabegerät. Der Befehl IN legt hier den Wert fest, der sich auf das E / A-Gerät bezieht.
  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. .

Dieser gesamte Algorithmus arbeitet im Nanosekundenbereich und wird daher fast sofort ausgeführt, obwohl der Prozessor einige Zeit auf die E / A-Operation gewartet hat.

Wie Sie jetzt verstehen, lesen Sie von externen Geräten, auch von RAM-Speicher mit so weiter. Die CPU ist ziemlich langsam. Diese Langsamkeit kann festgestellt werden, indem ein Programm geschrieben wird, das zeilenweise 10.000 Zeilen in einer Datei druckt, anstatt sie in den Puffer zu kopieren und sofort zu speichern. Die Festplatte ist mit der South Bridge verbunden und darin befindet sich auch ein Controller, der die direkte Platzierung von Daten steuert.

Der RAM ist über den Bus mit der CPU verbunden und das Lesen dauert einige Zeit. Um die CPU zu beschleunigen, hat sie einen Cache, d.h. In dem Bereich, in dem sich Transistoren befinden, die Daten darstellen, die bald benötigt oder häufig verwendet werden, ist ihr Lesen viel schneller als von der RAM-Karte, die über die North Bridge mit der CPU kommuniziert. RAM wird als dynamischer Direktzugriffsspeicher bezeichnet , da Kondensatoren zur Darstellung der darin enthaltenen Daten verwendet werden. Ein Kondensator ist ein Funkelement, das wie eine Batterie eine Weile eine Ladung hält, bis sie vollständig entladen ist. Nur hier erfolgt die Entladung sehr schnell. Daher müssen die Kondensatoren aufgeladen werden, dies geschieht sofort, es reicht aus, Spannung anzulegen. Geladener Kondensator - logisch 1, sonst 0. Für den Cache wird Speicher verwendetStatischer RAM, d.h. es muss nicht aufgeladen werden und arbeitet daher schneller, kostet aber mehr. Der Cache ist in 3 Ebenen unterteilt, die während der Suche nach den angeforderten Daten nacheinander überprüft werden, bevor der Prozessor auf den RAM zugreift. Auf älteren Prozessoren war der Cache der ersten Ebene (L1) Teil der CPU und arbeitete mit derselben Frequenz damit, wenn sowohl L2- als auch L3-Caches externe Chips waren. Jetzt befinden sich alle mit dem Prozessor auf dem gleichen Chip. Der L1-Cache ist der schnellste und kleinste Speicher, L2 hat mehr Speicher, ist aber langsamer. L3 ist der größte und langsamste Cache, der häufig als gemeinsam genutzter Cache bezeichnet wird , da er Daten für alle CPU-Kerne speichert, während L1 und L2 für jeden einzelnen Kern erstellt werden.

Im nächsten Teil werden wir darüber sprechen, wie Windows die empfangenen Daten empfängt und verarbeitet.

All Articles