xv6 fügt einen Systemaufruf hinzu, der Systemaufrufe zählt

BEARBEITEN:

VERSTANDEN

hier ist was ich getan habe:

in syscall.c:

extern int numSysCalls;

in sysproc.c:

int numSysCalls = -1;

Okay, ich arbeite an der Implementierung eines einfachen Systemaufrufs, der die Anzahl der Systemaufrufe zurückgibt. Scheint einfach, aber ich erhalte eine Fehlermeldung, die ich nicht verstehe ...

Grundsätzlich habe ich Folgendes getan: In syscall.c gibt es eine Funktion namens syscall (), die prüft, ob es sich um einen Syscall handelt oder nicht. Grundsätzlich habe ich eine Variable deklariert und erhöhe sie jedes Mal, wenn diese Funktion aufgerufen wird.

Var-Deklaration in syscall.c:

18: int16_t numSysCalls = -1; //global

Syscall () -Funktion:

115:  void syscall(void){
116:     numSysCalls++; 
...

Fehler, den ich erhalte:

kernel/syscall.c:116: error: ‘numSysCalls’ undeclared (first use in this function)
kernel/syscall.c:116: error: (Each undeclared identifier is reported only once
kernel/syscall.c:116: error: for each function it appears in.)

Dann habe ich in sysproc.c den gleichen externen int und gebe einfach den int zurück, wenn ich meine Funktion numCalls aufrufe, wie folgt:

Externe Variable in sysproc.c:

extern int numSysCalls;

In Frage kommende Methode:

int sys_numSys(void){
if (numSysCalls == -1) return numSysCalls;
else return numSysCalls + 1;
}

Fazit: numSysCalls sollten inkrementiert werdenwann immer ein syscall (jeglicher art) heißt - erfolgreich oder nicht.

numSys gibt nur die Zahl oder -1 zurück, wenn ein Fehler vorliegt.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage