2016-06-20 8 views
0

Ich würde gerne Hilfe bei der Bestimmung der folgenden Operationen nur im Kernel-Modus durchgeführt werden. Ich habe versucht, die Antwort in Silberschatz "Betriebssystem-Konzepte" zu finden, aber es ist mir immer noch unklar. Hier ist die Liste der Operationen zu entscheiden, ob sie im Kernel-Modus oder im Benutzermodus ausgeführt werden sollte:Betriebssysteme: Kernel-Modus-Operationen

(1) disable interrupts detection 
(2) clear memory 
(3) switch from the user mode to the kernel mode 
(4) read the state of the clock/timer 
(5) determine/program timer. 

Antwort

2

Es ist nur der gesunde Menschenverstand:

  • Deaktivieren von Interrupts in einem passieren sollte nicht unprivilegierten Kontext, so dass Sie dies normalerweise nicht erlauben.
  • Löschen von Speicher in sich ist keine privilegierte Operation, so kann es in jedem Kontext passieren (wenn Speicher "freigegeben" ist, dann müssen Sie entscheiden, ob der Inhalt empfindlich ist oder nicht, bevor Zugriff aus anderen Kontext zulassen, aber immer den Inhalt zu löschen ist eine sichere Wette).
  • Der Wechsel vom Benutzermodus zum Kernelmodus kann natürlich nur im Benutzermodus erfolgen.
  • Lesen einer Uhr: Wenn es sich um Hardware-Uhren handelt, wenn sie Speicher-Mapped-Register zur Verfügung stellt, dann können Sie sicher vom Benutzermodus aus darauf zugreifen, solange die gemappte Region nichts Feines hat. hängt von der Hardware ab). Wenn nur Software, können Sie alles tun.
  • Das Programmieren eines Timers kann je nach Implementierung in beiden Kontexten stattfinden: Echtzeitgeplante Kontexte können Timer vollständig im Benutzermodus ohne Probleme implementieren, entweder durch Programmierung eines Hardware-Timers und Interrupt-Routing (das letztere muss nur noch passieren) einmal sogar, wenn es Kernel-Modus erfordert) oder alles in Software implementiert. Wenn nicht in Echtzeit, ist die Programmierung vollständig im Benutzerraum möglich, aber die Implementierung erfordert einen kernelseitigen Helfer (d. H. Eine Echtzeitaufgabe oder einen Interrupt), um das Ereignis auszulösen.