


Ein genauerer Blick auf Linux-Kernel-Timer: Interrupt-basierte asynchrone Mechanismen und Nicht-Prozess-Kontextprinzipien
1. Kernel-Timer 1. Grundkonzepte
In bestimmten Szenarien müssen wir bestimmte Aktionen nach einer bestimmten Zeit ausführen und möchten keine CPU durch Warten verschwenden. Zu diesem Zeitpunkt ist der Timer ein sehr geeigneter Mechanismus. Ein Timer wird verwendet, um eine Funktion zu einem bestimmten Zeitpunkt in der Zukunft auszuführen, um eine bestimmte Aufgabe abzuschließen.
Kernel-Timer weisen den Kernel an, zu einem bestimmten Zeitpunkt eine bestimmte Funktion mit bestimmten Parametern aufzurufen. Der Timer läuft asynchron auf seinem Registranten. Wenn der Timer läuft, befindet sich die Aufgabe, die den Timer registriert hat, möglicherweise im Ruhezustand oder läuft auf anderen Prozessoren oder wurde sogar schon vor langer Zeit beendet.
Der Kernel-Timer in Linux wird basierend auf (Soft-)Interrupts Linux-Anwendungs-Timer implementiert, das heißt, er befindet sich im Interrupt-Kontext und nicht im Prozesskontext. Im Nicht-Prozess-Kontext sind einige Grundsätze zu befolgen:
Der Zugriff auf den Benutzerbereich ist nicht gestattet
Strom ist bedeutungslos und daher nicht verfügbar
Kann weder schlafen noch planen. Schedule oder eine Art wait_event können nicht aufgerufen werden, noch kann eine Funktion aufgerufen werden, die Schlaf verursachen könnte. Semaphore sind ebenfalls nicht verfügbar, da Semaphore zu einem Ruhezustand führen können.
Der Kernel-Code kann feststellen, ob er sich derzeit im Interrupt-Kontext befindet, indem er die Funktion in_interrupt() aufruft. Solange er nicht 0 zurückgibt, bedeutet dies, dass er sich im Interrupt-Kontext befindet. Der Kernel kann durch Aufruf von in_atomic() ermitteln, ob die Planung derzeit zulässig ist. Zu den Situationen, in denen die Planung nicht zulässig ist, gehören: Sie befinden sich in einem Interrupt-Kontext und einem Kontext, der über eine Trägersperre verfügt.
Da der Timer asynchron ausgeführt wird, muss die Timer-Verarbeitungsfunktion auf den gegenseitigen Ausschlussschutz achten.
2.Vom Linux-Kernel unterstützte Timer
Der Linux-Kernel unterstützt zwei Arten von Timern:
Klassischer Timer: ein Timer, dessen Genauigkeit von der Häufigkeit der Unterbrechungen der Computeruhr abhängt. Die Timergenauigkeit ist mit einer Genauigkeit von 1000/HZms normalerweise relativ gering. Dieser Timer wird mit einer festen Frequenz generiert, also alle 1000/HZms. Wenn die Funktion „Dynamische Uhr“ nicht aktiviert ist, kann es beim Ablauf des Timers nicht zu echten Timing-Störungen kommen. Beispielsweise werden nur die folgenden Timer zum System hinzugefügt: 11-ms-, 52-ms- und 78-ms-Ablauftimer, und die Timer laufen genau ab Der Timer läuft nach einem Vielfachen von 4 ms (4, 8, 12 ...) ab, daher muss zum Zeitpunkt des Timerablaufs nicht unbedingt eine Zeitstörung vorliegen.
Timer mit hoher Bildrate: Die Präzision des klassischen Timers ist relativ gering. In einigen Situationen ist ein Timer mit höherer Präzision erforderlich, z. B. bei Multimedia-Anwendungen im chinesischen Linux-Betriebssystem. Daher wird dieser Timer-Typ in das System eingeführt. Dieser Timer kann grundsätzlich jederzeit auftreten.
Hier braucht es auch zwei Ausnahmekonzepte:
Dynamische Uhr: Der periodische Taktgeber Linux-Anwendungstimer wird nur aktiviert, wenn eine Aufgabe tatsächlich ausgeführt werden muss, andernfalls ist die periodische Takttechnologie deaktiviert. Der Ansatz besteht darin, die periodische Uhr zu deaktivieren, wenn Sie die Ausführung im Leerlauf planen müssen; dann aktivieren Sie die periodische Uhr, bis der nächste Timer abläuft oder ein Interrupt auftritt. Eine einmalige Uhr ist eine Voraussetzung für die Realisierung einer dynamischen Uhr, da das Hauptmerkmal der dynamischen Uhr darin besteht, dass die Uhr je nach Bedarf gestoppt oder neu gestartet werden kann und eine reine periodische Uhr für diese Szenarien nicht geeignet ist.
Periodische Uhr: Eine Uhr, die die Uhrzeit periodisch bestimmt.
In Bezug auf die Anwendung haben Timer zwei Hauptverwendungszwecke:
Timeout: Zeigt eine Störung an, die nach einer bestimmten Zeitspanne auftritt. Tatsächlich wird bei Verwendung von Timeout in den meisten Fällen nicht damit gerechnet, dass das Timeout auftritt, und der Timer wird häufig vor dem Timeout abgebrochen. Darüber hinaus ist der Timeout-Vorfall oft kein genauer Vorfall, auch wenn er nicht abgebrochen wird. Beispielsweise drücken die verschiedenen im Netzwerk verwendeten Timeout-Timer häufig aus, dass dies der Fall sein kann, wenn vor diesem Zeitpunkt kein Vorfall vorliegt berücksichtigt werden ..., der Wert dieser Zeit ist oft ein Erfahrungswert oder ein berechneter Wert und stellt keinen genauen Zeitbedarf dar. In diesen Situationen reicht der klassische Timer aus.
Timer: Wird zum Implementieren des Timings verwendet. Wenn Daten zu einem bestimmten Zeitpunkt nicht an die Soundkarte gesendet werden, gelten in diesen Situationen strenge Anforderungen Mit der Zeit kommt es zu Klangverzerrungen. Zu diesem Zeitpunkt muss ein hochpräziser Timer verwendet werden.
Linux kann durch Konfiguration dazu veranlasst werden, im folgenden Modus zu arbeiten:
Dynamischer Takt mit hoher Bildrate
Periodentakt mit hoher Bildrate
Dynamischer Takt mit niedriger Bitrate
Periodenuhr mit niedriger Coderate
3. Kernel-Timer mit niedriger Bitrate
Der Low-Bitrate-Timer ist der gebräuchlichste Kernel-Timer. Der Kernel verwendet den Takt-Interrupt des Prozessors oder eine andere geeignete periodische Taktquelle als Zeitbasis des Timers. Taktunterbrechungen treten periodisch auf, HZ-mal pro Sekunde. Die diesem Interrupt entsprechende Timer-Verarbeitungsfunktion ist normalerweise timer_interrupt. Bei der Verarbeitung dieser Funktion wird sie schließlich an do_timer und update_process_timers angepasst. Unter anderem ist do_timer für systemweite und globale Aufgaben verantwortlich: Aktualisierung von Sekundenschnelle und Verarbeitung von Prozessstatistiken, und die letztere Funktion führt Prozessstatistiken durch, um TIMER_SOFTIRQ zu bilden, um dem Planer Zeitbewusstsein zu bieten.
Wenn der Timer abläuft, wird der Timer aus dem Aktivierungsarray entfernt, bevor die Timer-Verarbeitungsfunktion aufgerufen wird. Wenn Sie daher nach einer bestimmten Zeitspanne nach dieser Ausführung erneut ausführen möchten, müssen Sie den Timer erneut hinzufügen. Gerät. Im SMP-System wird die Timer-Funktion von der CPU ausgeführt, bei der sie registriert ist.
Die Implementierung des Kernel-Timers muss die folgenden Anforderungen und Annahmen erfüllen:
Die Timerverwaltung muss so einfach wie möglich sein.
Das Design muss eine gute Skalierbarkeit aufweisen, wenn der Aktivitätstimer stark reduziert ist
Die meisten Timer laufen innerhalb weniger Sekunden oder höchstens ein paar Minuten ab, und Timer mit langen Verzögerungen sind ziemlich selten.
Ein Timer sollte auf derselben CPU laufen, auf der er registriert wurde.
Die Implementierung des Kernel-Timers mit niedriger Bitrate ist sehr clever. Es basiert auf einer Datenstruktur pro CPU. Das Basisarray von timer_list enthält Zeiger, die auf diese Struktur zeigen. Wenn base NULL ist, wurde dieser Timer nicht zur Ausführung aufgerufen. Andernfalls gibt dieser Zeiger an, welche Datenstruktur (d. h. welche CPU) ihn ausführt.
Immer wenn der Kernel-Code einen Timer registriert (über add_timer oder mod_timer), wird die Operation letztendlich von internal_add_timer (in kernel/timer.c) ausgeführt, der den neuen Timer zur „Kaskadentabelle“ hinzufügt, die der aktuellen CPU „im Timer“ zugeordnet ist Einweg-Array.
So funktionieren kaskadierende Tabellen:
Wenn der Timer innerhalb der nächsten 0 bis 255 Augenblicke abläuft, wird er mithilfe von „expires“ zu einem der 256 Arrays hinzugefügt, die speziell für Kurzzeit-Timer vorgesehen sind (d. h., zu welchem Array hinzugefügt wird, wird durch die Ablaufzeitbits bestimmt). Die unteren 8 Bits des ermittelten Bits bestimmen, zu welchem Array
hinzugefügt werden sollWenn es in der Zukunft abläuft (aber vor 16384 Sekunden), wird es zu einem der 64 Arrays hinzugefügt. Diese 64 Arrays beziehen sich auf die 8-13 Bits des Ablaufs. Die 6 Bits bestimmen, welches Array verwendet wird .
Ähnliche Techniken werden auf die Ablaufbits 14–19, 20–25 und 26–31 angewendet.
Wenn der Timer zu einem späteren Zeitpunkt abläuft
Das obige ist der detaillierte Inhalt vonEin genauerer Blick auf Linux-Kernel-Timer: Interrupt-basierte asynchrone Mechanismen und Nicht-Prozess-Kontextprinzipien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Das Internet stützt sich nicht auf ein einzelnes Betriebssystem, aber Linux spielt eine wichtige Rolle dabei. Linux wird häufig auf Servern und Netzwerkgeräten verwendet und ist für seine Stabilität, Sicherheit und Skalierbarkeit beliebt.

Der Kern des Linux -Betriebssystems ist die Befehlszeilenschnittstelle, die verschiedene Operationen über die Befehlszeile ausführen kann. 1. Datei- und Verzeichnisoperationen verwenden LS, CD, MKDIR, RM und andere Befehle, um Dateien und Verzeichnisse zu verwalten. 2. Benutzer- und Berechtigungsverwaltung sorgt für die Systemsicherheit und die Ressourcenzuweisung über UserAdd, PASSWD, CHMOD und andere Befehle. 3. Process Management verwendet PS, Kill und andere Befehle, um Systemprozesse zu überwachen und zu steuern. 4. Netzwerkoperationen umfassen Ping, IFConfig, SSH und andere Befehle zum Konfigurieren und Verwalten von Netzwerkverbindungen. 5. Systemüberwachung und Wartung Verwenden Sie Befehle wie Top, DF, DU, um den Betriebsstatus und die Ressourcennutzung des Systems zu verstehen.

Das durchschnittliche Jahresgehalt der Linux -Administratoren beträgt in den USA 75.000 bis 95.000 USD und 40.000 bis 60.000 € in Europa. Um das Gehalt zu erhöhen, können Sie: 1. kontinuierlich neue Technologien wie Cloud Computing und Containertechnologie lernen; 2. Projekterfahrung sammeln und Portfolio einrichten; 3. Geben Sie ein professionelles Netzwerk ein und erweitern Sie Ihr Netzwerk.

Zu den Hauptaufgaben von Linux -Systemadministratoren gehören Systemüberwachung und Leistungsstimmen, Benutzerverwaltung, Softwarepaketverwaltung, Sicherheitsmanagement und Sicherungssicherung, Fehlerbehebung und Lösung, Leistungsoptimierung und Best Practices. 1. Verwenden Sie Top-, HTOP- und andere Tools, um die Systemleistung zu überwachen und sie einzustellen. 2. Verwalten Sie Benutzerkonten und Berechtigungen über UserAdd -Befehle und andere Befehle. 3. Verwenden Sie APT und YUM, um Softwarepakete zu verwalten, um Systemaktualisierungen und Sicherheit zu gewährleisten. 4. Konfigurieren Sie eine Firewall, überwachen Sie Protokolle und führen Sie die Datensicherung durch, um die Systemsicherheit zu gewährleisten. 5. Fehlerbehebung und Behebung durch Protokollanalyse und Werkzeuggebrauch. 6. Optimieren Sie die Kernelparameter und die Anwendungskonfiguration und befolgen Sie die Best Practices, um die Systemleistung und -stabilität zu verbessern.

Zu den Hauptanwendungen von Linux gehören: 1. Server -Betriebssystem, 2. Eingebettes System, 3. Desktop -Betriebssystem, 4. Entwicklungs- und Testumgebung. Linux zeichnet sich in diesen Bereichen aus und bietet Stabilität, Sicherheits- und effiziente Entwicklungstools.

Die Hauptunterschiede zwischen Linux und Windows in der Virtualisierungsunterstützung sind: 1) Linux liefert KVM und Xen mit hervorragender Leistung und Flexibilität, die für Umgebungen mit hoher Anpassung geeignet sind. 2) Windows unterstützt die Virtualisierung über Hyper-V mit einer freundlichen Schnittstelle und ist eng in das Microsoft-Ökosystem integriert, das für Unternehmen geeignet ist, die auf Microsoft-Software angewiesen sind.

Linux zu lernen ist nicht schwierig. 1.Linux ist ein Open -Source -Betriebssystem, das auf UNIX basiert und in Servern, eingebetteten Systemen und PCs häufig verwendet wird. 2. Das Verstehen von Dateisystemen und Berechtigungsverwaltung ist der Schlüssel. Das Dateisystem ist hierarchisch, und die Berechtigungen umfassen Lesen, Schreiben und Ausführung. 3.. Paketverwaltungssysteme wie APT und DNF machen das Softwaremanagement bequem. 4. Die Prozessverwaltung wird über PS- und Top -Befehle implementiert. 5. Beginnen Sie mit grundlegenden Befehlen wie Mkdir, CD, Touch und Nano und versuchen Sie dann erweiterte Verwendung wie Shell -Skripte und Textverarbeitung. 6. Häufige Fehler wie Erlaubnisprobleme können durch sudo und chmod gelöst werden. 7. Vorschläge zur Leistungsoptimierung umfassen die Verwendung von HTOP zur Überwachung von Ressourcen, die Reinigung unnötiger Dateien und die Verwendung von SY

Seit Jahren stützte sich die Linux -Softwareverteilung auf native Formate wie DEB und RPM, die im Ökosystem jeder Verteilung tief verwurzelt sind. Flatpak und SNAP sind jedoch entstanden und versprachen einen universellen Ansatz für die Anwendungsverpackung. Dieser Artikelprüfung
