Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik
main.cc-Dateireferenz

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"
Include-AbhĂ€ngigkeitsdiagramm fĂŒr main.cc:

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)
 

AusfĂŒhrliche Beschreibung

EnthĂ€lt mit den main() und main_ap() Funktionen den Startpunkt fĂŒr das System.

Dokumentation der Funktionen

◆ main()

int main ( )

Einsprungpunkt ins System.

Dieser Code wird nur auf der Boot-CPU (diejenige mit der ID 0) ausgefĂŒhrt.

◆ main_ap()

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).

Variablen-Dokumentation

◆ dout

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:

{0, 39, 17, 20}, // Debugfenster fĂŒr CPU 1, quasi CGA_Stream(0, 39, 17, 20)
{40, 79, 17, 20}, // Debugfenster fĂŒr CPU 2, quasi CGA_Stream(40, 79, 17, 20)
//...
};

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.

◆ idle_thread

IdleThread idle_thread[CPU_MAX]
Initialisierung:
= {
IdleThread(&idle_stack[1 * IDLE_STACK_SIZE]),
IdleThread(&idle_stack[2 * IDLE_STACK_SIZE]),
IdleThread(&idle_stack[3 * IDLE_STACK_SIZE]),
IdleThread(&idle_stack[4 * IDLE_STACK_SIZE]),
IdleThread(&idle_stack[5 * IDLE_STACK_SIZE]),
IdleThread(&idle_stack[6 * IDLE_STACK_SIZE]),
IdleThread(&idle_stack[7 * IDLE_STACK_SIZE]),
IdleThread(&idle_stack[8 * IDLE_STACK_SIZE])
}
Thread, der immer dann lÀuft, wenn eine CPU nichts zu tun hat.
Definition: idlethread.h:21