| De Unix-architectuur wordt gekenmerkt door zijn eenvoud, elegantie en modulariteit. Er is geen enkele, strak gedefinieerde architectuur, aangezien verschillende Unix-achtige systemen (waaronder Linux) hun eigen implementaties hebben, maar de kernprincipes blijven consistent. Dit zijn de belangrijkste aspecten:
1. Kernel:
* Monolithische kernel: De kern van het Unix-systeem. Het beheert de bronnen van het systeem (CPU, geheugen, I/O-apparaten), biedt systeemoproepen voor programma's in de gebruikersruimte om met deze bronnen te communiceren, en handelt processen af. Dit is in tegenstelling tot microkernels, waar meer functionaliteit zich in de gebruikersruimte bevindt.
* Gelaagde architectuur (in veel implementaties): Hoewel niet strikt gehandhaafd op alle Unix-systemen, vertonen veel systemen een gelaagde architectuur waarbij verschillende kernelmodules verschillende niveaus van privileges en toegang tot hardware hebben.
* Apparaatstuurprogramma's: Modules binnen de kernel die interageren met specifieke hardwareapparaten, waardoor hun complexiteit wordt geabstraheerd van toepassingen in de gebruikersruimte.
2. Schaal:
* Opdrachtregelvertaler: De primaire interface waarmee gebruikers met het systeem kunnen communiceren. Het neemt opdrachten als invoer en voert deze uit, vaak door programma's in de gebruikersruimte aan te roepen. Voorbeelden hiervan zijn bash, zsh en ksh.
3. Systeemoproepen:
* Interface tussen kernel en gebruikersruimte: De enige manier waarop gebruikersruimteprogramma's toegang kunnen krijgen tot kernelservices en systeembronnen is via systeemaanroepen. Dit zorgt voor een goed gedefinieerde en veilige interface.
4. Bestandssysteem:
* Hierarchisch bestandssysteem: Organiseert bestanden en mappen in een boomachtige structuur. Dit biedt een consistente manier om toegang te krijgen tot gegevens en deze te beheren. De belangrijkste kenmerken zijn onder meer:
* Inodes: Gegevensstructuren die bestanden en mappen vertegenwoordigen, met metagegevens zoals machtigingen en tijdstempels.
* Mappen: Speciale bestanden die verwijzingen naar andere inodes bevatten.
* Draagbaarheid: Het ontwerp van het bestandssysteem vergemakkelijkt de portabiliteit tussen verschillende Unix-systemen.
5. Hulpprogramma's:
* Kleine, gespecialiseerde programma's: Unix legt de nadruk op het gebruik van veel kleine hulpprogramma's voor één doel die kunnen worden gecombineerd met behulp van pipelines en omleiding om complexere functionaliteit te creëren. Dit bevordert de modulariteit en herbruikbaarheid.
6. Pipes en omleiding:
* Communicatie tussen processen: Mechanismen waarmee programma's met elkaar kunnen communiceren door hun standaard invoer-/uitvoerstromen met elkaar te verbinden. Dit maakt krachtige combinaties van eenvoudige hulpprogramma's mogelijk.
7. Bibliotheken:
* Herbruikbare code: Bibliotheken bieden vooraf geschreven functies en datastructuren die applicaties kunnen gebruiken, waardoor de ontwikkeltijd wordt verkort en hergebruik van code wordt bevorderd.
Samengevat: De Unix-architectuur is gebaseerd op een eenvoudige, maar krachtige ontwerpfilosofie die de nadruk legt op modulariteit, draagbaarheid en de combinatie van kleine, gespecialiseerde programma's. De kernel biedt kerndiensten, de shell biedt gebruikersinteractie en hulpprogramma's bieden specifieke functionaliteiten. Dit gelaagde ontwerp, samen met een robuust bestandssysteem en communicatiemechanismen tussen processen, is zeer invloedrijk gebleken in de ontwikkeling van besturingssystemen en software. Het is echter van cruciaal belang om op te merken dat "Unix" een brede term is die veel verschillende implementaties omvat, en dat specifieke details aanzienlijk kunnen variëren. |