Fügen Sie durch Ändern von Linux 0.11 -Systemdateien einen einfachen Systemaufruf hinzu
Auf Ubuntu20.04.1 Virtuelle Maschine erfordert die Verwendung von Bochs zum Ausführen von linux0.11-kompilierten Bilddateien, um Linux0.11 zu kompilieren, eine 32-Bit-GCC-Umgebung, und ein einfacher und realisierbarer Konfigurationsverbindungsverbindungslink ist beigefügt: https://gitee.com/cn-guoziyang/oslababs
Durch Ändern der Systemdatei von Linux 0.11 (mit Bochs ausführen) wird die Implementierung ein einfacher Systemaufruf hinzufügen. Hier ist der Anruf nameout.c Ausgabe "Hallo, ich bin lwh"
Schreiben Sie den Programm nameout.c auf Benutzerebene, öffnen Sie das Fenster, um die Systemfunktion über das SYSCALL -Makro aufzurufen und die Sys_Nameout -Systemfunktion aufzurufen. Schreiben Sie das Funktion sys_nameout, der im Systemkern in linux0.11 im Dateiformat von Name gespeichert wird. sys_nameout ruft printk () an, um den Ausdruck zu vervollständigen. Ändern Sie die Makefile -Datei, damit der von uns hinzugefügte Kernel/WHO.c kompiliert und mit anderen Linux -Codes verknüpft werden kann.

Detaillierte Schritte: Fügen Sie die Makrodefinition von IAM und Whoami -System -Anrufnummern hinzu (_nr_xxxxxx)
Dateipfad: /linux-0.11/**include/unistd.h ** 
Ändern Sie die Gesamtzahl der Systemaufrufe Dateipfad: /linux-0.11/**kernel/system_call.s ** 
Fügen Sie dem neu hinzugefügten Systemanruf einen Systemanrufnamen hinzu und pflegen

Schreiben Sie die Code-Implementierung für den neu hinzugefügten Systemaufruf und erstellen Sie einen name.c .

Schreiben Sie Printk ("Hallo, ich bin lwh") in name.c
Makefile ändern
Um dem Kernel/WHO.c, den wir hinzufügen
Dateipfad: /linux-0.11/kernel/makefile

Schreiben eines Testprogramms
Bisher wurde der Teil, der im Kernel geändert werden muss, abgeschlossen. Als nächstes müssen Sie ein Testprogramm schreiben, um zu überprüfen
Dateipfad: /oslab/nameein.c /oslab/nameout.c

/ * nameout.c */
#define Bibliothek
#include <unistd.h>
#include <errno.h>
#include <asm/segment.h>
#include <linux/kernel.h>
#include <stdio.h>
_syscall2 (int, nameout, char *, name, unsigned int, Größe);
int main (int argc, char *argv [])
{
char userername [64] = {0};
/ System Call nameout () / /
Nameout (Benutzername, 24);
printf ("%s n", Benutzername);
Rückkehr 0;
}
Führen Sie den folgenden Befehl im oslab -Verzeichnis mithilfe der Mount -Methode zur Realisierung der Dateifreigabe zwischen dem Host und dem Betriebssystem Virtual Machine, um das HDC -Verzeichnis auf das Betriebssystem Virtual Machine zu montieren

Kompilieren Sie Linux -Kernel -Dateipfad: /Oslab /Linux
Führen Sie den Befehl machen im Terminal aus 
Erfolg machen
Führen Sie den Bochs Virtual Machine Datei Path: / Oslab / Terminal aus, um den Befehl zum Ausführen auszuführen 
Fügen Sie einen neuen Call-Number-Dateipfad für Linux-0.11: /usr/include/unistd.h in der virtuellen Maschine hinzu (kann auch in der grafischen Schnittstelle nach der Montage geändert werden) 
(Wenn in der virtuellen Maschine modifiziert)
(Wenn Sie nach der Montage in der grafischen Schnittstelle des Hosts modifiziert werden)

GCC Run gibt erfolgreich den Fall Text aus


Die Festplattenplanung wird mit FIFO (First Come First Service), SSTF (kürzester Such -Priorität) und Scan (Aufzugsplanungsalgorithmus) durchgeführt.
Sehen Sie die Planungsreihenfolge an, berechnen Sie die durchschnittliche Anzahl beweglicher Tracks
Schreiben Sie ein Datei -Tool -Filetools mit Dateisystemaufrufen, um die folgenden Funktionen zu erhalten:
Erstellen Sie eine neue Datei, schreiben Sie eine Datei, lesen Sie eine Datei, ändern Sie Dateiberechtigungen, anzeigen Sie die aktuellen Dateiberechtigungen und beenden Sie
Verwenden Sie Pipelines, um die Prozesskommunikation zwischen übergeordneten und untergeordneten Prozessen zu implementieren
Generieren Sie 320 Anweisungssequenzen
Umwandeln Sie die Anweisungssequenz in Seitenadressenstrom
Berechnen Sie den First-in-First-Out-Seiten-Permutationsalgorithmus (FIFO), den neuesten und am längsten anhaltenden Seitenpermutationsalgorithmus und die Trefferquote des optimalen (optimalen) Seitenpermutationsalgorithmus unter verschiedenen Speicherseitenblöcken
Verwenden Sie Pipelines, um die Prozesskommunikation zwischen übergeordneten und untergeordneten Prozessen zu implementieren
Verwenden Sie Message Puffer -Warteschlangen, um die Kommunikation zwischen Client- und Serverprozessen zu aktivieren
Verwenden Sie den gemeinsam genutzten Speicher, um die Prozesskommunikation zwischen zwei Prozessen zu erreichen