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 "machine/apicsystem.h"
#include "machine/lapic.h"
#include "device/cga_stream.h"
#include "debug/output.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.

◆ 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