- Schutz kritischer Abschnitte im Betriebssystem mit Hilfe des Guard
- Implementierung präemptivem Scheduling durch Timer-Interrupts
Die Synchronisation der Aktivitäten innerhalb von OOStuBS/MPStuBS ist in Aufgabe 3 auf die Verwendung des Pro-/Epilogmodells umgestellt worden. Nun soll eine grobgranulare Locking-Strategie verwendet und eine Systemaufrufschnittstelle definiert werden. Der
Scheduler soll ausgelöst durch den Timer-Interrupt Threads verdrängen können.
Hierzu müssen die Klassen Guarded_Scheduler, Thread, PIT und Watch implementiert werden.
Um aus Benutzerprogrammen heraus die geschützten Methoden des Schedulers aufrufen zu können, darf die globale Variable scheduler nicht länger ein Objekt der Klasse Scheduler sein, sondern muss eine Instanz der Klasse Guarded_Scheduler sein.
Klassenübersicht für Aufgabe 5
In MPStuBS gab es schon in Aufgabe 4 die Problematik, dass die Methoden des Schedulers von mehreren Prozesoren aus gleichzeitig aufgerufen werden konnten, und deswegen die Zugriffe auf die Bereitliste synchronisiert werden mussten. Da die Betriessystemfunktionen nun in der Syscall-Schnittstelle mit dem
Guard synchronisiert werden sollen, müssen die expliziten Synchronisationsaufrufe aus Aufgabe 4 entfernt werden.
Zusätzlich zum Scheduling soll nun auch die Implementierung von Scheduler::kill(Entrant&) präemptiv erfolgen. Sollte der zu beendende Prozess gerade auf einem anderen Prozessor laufen, dann muss dieser mit Hilfe eines Interprozessorinterrupts (IPIs) unterbrochen werden. Implementiert dazu in der Klasse APICSystem die Methode APICSystem::sendCustomIPI(), die mit Hilfe des Local APICs Interrupts an andere CPUs schicken soll. Die Interruptbehandlung für den IPI soll in der Klasse Assassin implementiert werden.