EnthĂ€lt mit den main() und main_ap() Funktionen den Startpunkt fĂŒr das System. Mehr ...
#include "boot/startup_ap.h"
#include "machine/lapic.h"
#include "debug/output.h"
#include "device/cga_stream.h"
#include "user/app1/appl.h"
#include "user/app2/kappl.h"
#include "machine/ioapic.h"
#include "machine/cpu.h"
#include "machine/plugbox.h"
#include "debug/gdb/stub.h"
#include "syscall/guarded_keyboard.h"
#include "guard/guard.h"
#include "thread/scheduler.h"
#include "thread/thread.h"
#include "device/watch.h"
#include "thread/assassin.h"
#include "meeting/bellringer.h"
#include "thread/idlethread.h"
#include "thread/wakeup.h"
#include "syscall/guarded_semaphore.h"
Funktionen | |
void | setupIdleThread (int cpuid) |
int | main () |
Einsprungpunkt ins System. Mehr ... | |
int | main_ap () |
Einsprungpunkt fĂŒr Applikationsprozessoren. Mehr ... | |
Variablen | |
CGA_Stream | kout |
CGA_Stream | dout [CPU_MAX] |
Debugausgabefenster fĂŒr die jede Zeigt Ausgaben zur Fehlersuche wie DBG << "var = " << var << endl in einem separaten Debugfenster fĂŒr die entsprechende CPU an. Mehr ... | |
Guarded_Keyboard | keyboard |
Watch | watch |
Assassin | assassin |
Bellringer | bellringer |
WakeUp | wakeup |
const unsigned long | IDLE_STACK_SIZE = 4096 |
IdleThread | idle_thread [CPU_MAX] |
Guarded_Semaphore | koutsem (1) |
int main | ( | ) |
Einsprungpunkt ins System.
Dieser Code wird nur auf der Boot-CPU (diejenige mit der ID 0) ausgefĂŒhrt.
int main_ap | ( | ) |
Einsprungpunkt fĂŒr Applikationsprozessoren.
Code in dieser Funktion wird auf allen Applikationsprozessoren ausgefĂŒhrt (entspricht allen CPUs auĂer derjenigen mit der ID 0).
CGA_Stream dout[CPU_MAX] |
Debugausgabefenster fĂŒr die jede Zeigt Ausgaben zur Fehlersuche wie DBG << "var = " << var << endl
in einem separaten Debugfenster fĂŒr die entsprechende CPU an.
WĂ€hrend fĂŒr OOStuBS nur ein Objekt dout
angelegt werden muss, ist bei MPStuBS ein Objektarray mit einem Fenster je CPU notwendig – in diesem Fall kann die direkte Listeninitialisierung verwendet werden:
Die Debugfenster sollen ĂŒberschneidungsfrei unterhalb des normalen Ausgabefensters liegen und mindestens 3 Zeilen lang sein. Zwei Debugfenster können problemlos nebeneinander liegen.
Als Erweiterung kann man die Verteilung auch automatisch (nach Anzahl der CPUS) machen lassen, dann reicht der Standardkonstruktor (ohne Parameter) aus.
IdleThread idle_thread[CPU_MAX] |