Zur Frage von Linux (L)

Wir gehen davon aus, dass Sie ein vollwertiges Betriebssystem erhalten, das sofort alles vollständig bezahlt. (Bill Gates als Antwort auf eine Frage zum Wettbewerb mit L.)


Je mehr ich über Linux lerne, desto weniger hasse ich B.G.


Eigentlich habe ich noch nie so starke Gefühle für ihn gespürt. Ich fange gerade an, besser zu verstehen, warum das Unternehmen, das Windows produziert, Geld nimmt. Und es wird klarer, warum Verbraucher es vorziehen, Bill zu bezahlen (es gibt hier natürlich Optionen, verstehen Sie), anstatt die kostenlose ("das heißt, kostenlose") Alternative zu verwenden. Aber fangen wir in der richtigen Reihenfolge an und betrachten zwei Episoden der Interaktion mit L.

In letzter Zeit hat L auf den Geräten funktioniert, die ich entwickle (in der einen oder anderen Form, verstehen Sie ...), in deren Rahmen Spezialsoftware ausgeführt wird. Bei der Interaktion mit externen Geräten (Spezialtastaturen) wurden interessante Artefakte des Betriebssystemverhaltens entdeckt, die zu den im Epigraph angegebenen Gedanken führten.

Episode 1 - Während der Korrektur des USB-Tastaturprogramms wurde ein "versehentlich, unbeabsichtigt" Fehler behoben, der zum Ausfall des String-Deskriptors des Geräts führte. Für diejenigen, die nicht sehr mit USB verbunden sind, ist die erforderliche Erklärung - ein String-Deskriptor - ein optionaler Teil der Gerätebeschreibung, der ausschließlich zur Visualisierung des Gerätetyps und des Herstellers von Systemdienstprogrammen dient. Trotzdem ist dies keine Entschuldigung für Programmierer und solche Fehler sollten nicht gemacht werden, aber alles passiert im Leben. Wie kann ein Host mit einem vernünftigen Betriebssystem reagieren, wenn ein solches falsches Gerät daran angeschlossen ist?

Persönlich sehe ich 3 mögliche Strategien:

  1. , , — , , 7, ;
  2. , , — ;
  3. , , — , , USB ( ).

PNP: Es ist zu beachten, dass der Standard für die Schnittstelle nur die Notwendigkeit vorsieht (Abbildung 8.31 auf Seite 222), während Sie auf die Eingabenachricht warten, die Zeit zu steuern und das Zeitlimit als einen der möglichen Fehler zu verarbeiten. Wiederholen Sie die Anforderung dreimal und geben Sie dann ein Signal über den Transaktionsfehler. Weitere Hostaktionen werden von der Implementierung bestimmt. Nun, zumindest habe ich solche Informationen nicht im Standard gefunden, obwohl dies nicht endgültig ist.

Die Entwickler von L beschränkten sich also nicht auf die Lösungen, die auf der Oberfläche lagen und tiefer gingen, nachdem sie eine ungewöhnlich interessante und idiotische, sehr kreative Methode entwickelt hatten:

4. Wiederholen Sie die Anforderung einige Male, nachdem die Erschöpfung des Geräts als fehlerhaft markiert und dann ausgeschaltet wurde .

Bisher nichts Kriminelles, wenn nicht für ein kleines Detail ("und alles andere sind Nuancen") - während der L-Host die obige Anfrage wiederholt, monopolisiert er den Zugriff über den Bus (höchstwahrscheinlich startet das Timeout in der Hardware nicht oder der Interrupt von ihm wird nicht verarbeitet) und Alle (!!!) anderen USB-Geräte sind inaktiv. Dieser Vorgang dauert etwa ein Dutzend Sekunden, in denen nicht alle Geräte verfügbar sind - bereits nicht schlecht. Und hier ist die Kirsche auf dem Kuchen: Nach anstrengenden Versuchen, den String-Deskriptor von der falschen Tastatur zu lesen, kommen Pakete im Allgemeinen nicht mehr dazu. Nach 2 Minuten versteht es, dass „etwas schief gelaufen ist“ und versucht, sich dem Host zu präsentieren erneut durch erneutes Verbinden, wodurch der Vorgang wiederholt wird. Die Ergebnisse sind verständlich - die Arbeit mit dem Bus ist einfach nicht möglich, wenn Sie nicht bereit sind, den Schluckaufmodus zu verwenden.Eine ungewöhnlich originelle Lösung, aber dies (Originalität) ist der einzige Vorteil.

Nachdem meine Linux-Bekannten dieses Phänomen demonstriert hatten, versuchten sie zunächst, es im Stil von "Dies ist kein Fehler, es ist eine solche Funktion" zu erklären (oder besser gesagt, sie schlugen zunächst vor, den Kernel mit den neuesten Patches neu zu erstellen. Dies ist im Allgemeinen eine universelle Antwort auf jede Nachricht in der L-Community über einen möglichen Fehler), und dann sagten sie, dass das Verhalten zwar falsch ist, aber wahrscheinlich irgendwo in den Konfigurationsdateien der Assembly ein Flag zum Zurücksetzen oder Einstellen vorhanden ist, mit dem Sie dieses Systemverhalten deaktivieren können. Wenn dies wahr ist, dann ist der einzige Name für die Flagge, die ich anbieten kann (auf Russisch): "Ich möchte wirklich_OS_be_being_being_something_failing_string_descriptor_as_hysterichka", im Stil "Bis diese Schlampe mir ihren Namen sagt, werde ich niemanden bitten, mit Ihnen zu sprechen". Entschuldigen Sie mein Französisch. Nun, selbst wenn dies der Fall ist und eine solche Flagge ist,Soll das Betriebssystem standardmäßig nicht im normalen, nicht perversen Modus erfasst werden? Aus irgendeinem Grund macht Windows genau das. Natürlich sollten Sie sich den Quelltext von Host L (höchstwahrscheinlich einen bestimmten USB-Treiber) ansehen und feststellen, ob es ein solches Flag gibt und wie ein ähnliches Systemverhalten erzielt werden kann. Aus den unten aufgeführten Gründen wurde dies jedoch nicht durchgeführt. Daher beschränken wir uns darauf, dies anzugeben .

Die zweite Funktion (viel mehr wie ein Fehler, da im ersten Fall das Gerät falsch war, was ich sofort hervorgehoben habe) wurde erkannt, nachdem der Geräteprogrammfehler behoben wurde und wir weiter arbeiteten.

Tatsache ist, dass es auf dem entworfenen Gerät zwei Controller gab, die jeweils die Joystick- und Tastaturfunktionen implementierten, während einer die linke Seite der Tastatur und der zweite die rechte verarbeitete. Ein Knopf auf der Vorderseite war jedoch mit beiden Controllern verbunden, da er die Markierung „FIRE“ aufwies und die Ergebnisse eines Ausfalls eines Controllers sehr unangenehm wären. Wenn Sie auf diese Schaltfläche geklickt haben, haben beide Controller ein Leerzeichen erzeugt und alles war in Ordnung, bis wir bemerkten, dass es manchmal (~ 10% der Fälle) nach dem Loslassen der A-Taste weiterhin als gedrückt betrachtet wird und die Anwendung in den Dauerfeuermodus wechselt. Gleichzeitig kehrte das System durch erneutes Drücken und Absenken der Taste in den normalen Modus zurück.

Es wurde vorgeschlagen, eng beieinander liegende (zeitliche) Ereignisse von der Tastatur zu überspringen, in diesem Fall eine Meldung zum Loslassen einer Taste.

Ferner wurden verschiedene Schritte unternommen, um die Ursache der Fehlfunktion zu bestimmen, aber ihre Beschreibung geht über den Umfang und den Gegenstand dieses Beitrags hinaus und wird (ich hoffe) separat beschrieben. Das Herausfinden der Ursachen eines so einfachen (auf den ersten Blick) Fehlers an sich erforderte jedoch solche Anstrengungen, dass jeglicher Wunsch, den Grund für den ersten in diesem Beitrag beschriebenen Fehler zu verstehen, verloren ging.
Zurück zum Epigraph: Ich muss sagen, dass dieser Fehler unter Windows 7 bei mindestens 100 Klicks nicht beobachtet wurde, was auf die Stabilität dieses Betriebssystems in Bezug auf diesen Faktor hinweist. Auch hier habe ich den Quellcode nicht gesehen, aber das Verhalten des Programms spricht für sich.

Es ist unwahrscheinlich, dass die Qualifikationen von Windows-Entwicklern die für die Open-Source-Community erheblich übertreffen, und die Frage ist anscheinend nur als Test, der eindeutig in größerem Umfang (und mit höherer Qualität) durchgeführt wird, wenn Personen, die Geld für ihre Arbeit erhalten, daran beteiligt sind ( neben moralischer Befriedigung).

Ich muss zugeben, dass das Verhalten von A zumindest in den beschriebenen Situationen am besten durch den Ausdruck "es funktioniert" definiert wird, der für ein Betriebssystem, das behauptet, zuverlässig und weit verbreitet zu sein, nicht als akzeptabel angesehen werden kann, weshalb meine Einstellung zu B.G. Infolge dieser Episode hat es sich verbessert, da er definitiv nicht für das verantwortlich ist, was passiert (obwohl es unterschiedliche Meinungen geben kann).

All Articles