Projekt:Schaffnix

Aus Schaffenburg
Wechseln zu: Navigation, Suche
Crystal Clear action run.png
Schaff*nix

Status: unbekannt

Schaffnixlogo.png
Beschreibung Unix v6 Re-Implementierung für MCT
Ansprechpartner Karsten


Schaff*nix - Re-implmentierter Unix v6 Kernel für moderne Microcontroller

Übersicht

Der Gedanke geht mindestens auf meine Spielereien mit dem ct100-Projekt bzw. SchaffenBASIC zurück:
Was mitte der 70er auf einem "günstigen" Minicomputer lief, dürfte eigentlich keine Herausforderung für halbwegs moderne Mikrocontroller sein. Der Quellcode für ältere Unixversionen ist seit 2002 Open Source und u. A. hier bei Github gehostet.
Neulich wurde meine Aufmerksamkeit durch einen Artikel von Ars Technica über den PDP11 Computer wieder in diese Richtung gelenkt.

Für v6 spricht dass das System schon recht "ausgereift" war, während die Quellen noch durchaus kompakte ca. 9000 Zeilen Code umfassen. Und noch viel besser: es existiert eine filigrane, quasi Zeile-für-Zeile-Dokumentation des Quellcodes (die lange Zeit wegen des Copyrights verboten war und daher analog weiter kopiert wurde).

Ziel ist ein Funktionsfähiges System auf einem Arduino (zum. Mega) zum laufen zu bringen. Als erster Schritt würde sich aber eher ARM anbieten, um genug Leistungsreserven für suboptimale Lösungsansätze zu haben.
Tatsächlich hat jemand das schonmal für ST-basierende ARMs erfolgreich in Angriff genommen, allerdings handelt es sich dabei um einen PDP11-Emulator auf dem MCT, in dem Unix ausgeführt wird - keine Portierung des Codes.
Am MIT wurde wohl bereits eine Re-Implementierung in modernem C für Intel und Risc-V vorgenommen der auf Github gehostet ist, und zu dem eine ähnliche Dokumentation wie dem Original existiert. Um die Sache interessanter zu machen (weil sonst nicht herausfordernd genug, haha), werde ich versuchen einen Bogen darum zu machen und nur bei absoluter Verzweiflung als Krücke zu verwenden.

A commentary on the Sixth Edition UNIX Operating System

Wie bereits erwähnt existiert eine (allgemein äußerst lesenswerte!) sehr detaillierte Dokumentation der v6-Sourcen. Sie kann als pdf hier heruntergeladen werden, und ist gedruckt im Buchhandel für ca. 30 Euro verfügbar.
Der eigentliche Sourcecode ist in dem Buch allerdings nicht abgedruckt. Die dabei verwendeten Zeilenangaben beziehen sich dabei leider nicht auf die einzelnen Files, wie man sie in dem oben genanten Github-Repository findet, sondern eine durchgehende Nummerierung eines ursprünglichen Begleitwerks. Dieses kann hier heruntergeladen werden.

Warum Re-Implementierung?

..und nicht ein einfacher Port? Am besten ist das wohl an Code von zwei - weitestgehend zufällig gewählten - kompakten Funktionen zu sehen:

/*aus sig.c:*/
stop()
{
	register struct proc *pp, *cp;

loop:
	cp = u.u_procp;
	if(cp->p_ppid != 1)
	for (pp = &proc[0]; pp < &proc[NPROC]; pp++)
		if (pp->p_pid == cp->p_ppid) {
			wakeup(pp);
			cp->p_stat = SSTOP;
			swtch();
			if ((cp->p_flag&STRC)==0 || procxmt())
				return;
			goto loop;
		}
	exit();
}

/*aus slp.c:*/
setpri(up)
{
	register *pp, p;

	pp = up;
	p = (pp->p_cpu & 0377)/16;
	p =+ PUSER + pp->p_nice;
	if(p > 127)
		p = 127;
	if(p > curpri)
		runrun++;
	pp->p_pri = p;
}

Man merkt dem Code sein alter doch recht deutlich an. Davon abgesehen dass manche Teile der Syntax nicht aktuell sind (z.B. "=+" statt "+="), verwenden die Originalautoren sehr gerne direkte Zahlenwerte (mal oktal, mal dezimal) - statt definierter Konstanten mit sinnigem Namen - deren Bedeutung auch wegen der karger Kommentierung i.d.R. nicht offensichtlich ist. Als Variablen werden sehr gerne wenige Buchstaben mit mal mehr mal weniger Sinngebung verwendet und der Code ist voller GOTOs.

Wenn man Bedenkt dass die Autoren C quasi on-the-fly parallel zu Unix entwickelt haben muss man wohl verzeihen, dass die Denkweise beim Schreiben ganz offenbar des öfteren noch eher vom Assemblerprogrammieren geprägt war.
Aber natürlich ist der Code unter modernen Gesichtspunkten ziemlich schwierig zu lesen. Eine Re-Implementierung macht daher definitiv Sinn, wobei der Lerneffekt dadurch natürlich auch wesentlich größer ist.

Durchführung

ja.

..irgendwann..
..deswegen ist das Projekt auch als Idee eingetragen..

Obwohl ca. 9000 Zeilen nicht gigantisch viel ist, ist das dennoch ein ziemlich ambitioniertes Projekt, das ein gewisses Maß an Konzentration erfordert...vllt ein Urlaubsprojekt..