# Besturingssystemen
## Doelstellingen

Onderstaande doelstellingen komen in meer of mindere mate aan bod. De grijze, cursieve doelstellingen komen hier niet aan bod. Dat zijn bv. praktijkoefeningen die aansluiten bij deze theorie, maar die in dit Wikibook niet behandeld worden. Of bv. theorie die in een ander hoofdstuk wordt behandeld.
Uit het leerplan D/2023/13.758/ van Applicatie- en Databeheer, een deel van leerplandoel 29:
* LPD 29: De leerlingen installeren, configureren en onderhouden on premise een client en server besturingssysteem en applicatiesoftware.
* Wenk. De nadruk ligt hier op het configureren. Het is niet de bedoeling dat leerlingen bij diverse pakketten op “Volgende” leren klikken.
* Wenk. Je kan het belang van en de mogelijkheden om het client besturingssysteem up-to-date te houden toelichten.
* Wenk. Je kan de leerlingen een aantal belangrijke bestanden en mappen aanwijzen in de documentenstructuur o.a. systeem- en gebruikersmappen.
* Wenk. Je kan de leerlingen leren om energiebesparende maatregelen in te stellen.
Voor leerlingen uit de richting Applicatie- en Databeheer is onderstaand Wikibook dus vooral als achtergrondinfo en moeten de leerplandoelen vooral in een labo aan bod komen.
Uit het leerplan Toegepaste Informatica van de richting informaticabeheer:
* 1.3.4 De functie van een controller en een driver toelichten.
* 2.1.1 Het onderscheid tussen systeemprogrammatuur en toepassingsprogrammatuur toelichten.
* 2.1.2 De functies van een besturingssysteem toelichten.
* 2.1.3 Het onderscheid tussen een clientbesturingssysteem en een serverbesturingssysteem toelichten en illustreren met enkele actuele besturingssystemen.
* 2.1.4 Aan de hand van een eenvoudig didactisch model de modulaire architectuur van een actueel besturingssysteem toelichten.
* 2.1.5 Het principe en de voordelen van multitasking en multithreading toelichten.
* 2.1.6 De betekenis en het nut van virtueel geheugen toelichten.
* 2.2.2 Een client besturingssysteem installeren en configureren volgens opgelegde vereisten.
* 2.2.3 Het belang van en de mogelijkheden om het client besturingssysteem up-to-date te houden toelichten.
* 2.2.13 Maatregelen om het verbruik van een computersysteem te beperken toelichten en uitvoeren.
* 2.5.1 Toepassingssoftware installeren, configureren en de-installeren.
* 2.5.2 Het belang van (automatische) updates van toepassingssoftware toelichten.
De uitleg is zo algemeen mogelijk gehouden, maar als je interesse hebt kan je enkele verschillen tussen Windows en Linux nalezen.

## Voorbeelden

Er zijn verschillende manieren om besturingssystemen in categorieën te stoppen. Je kan vertrekken uit een merk of bedrijf of je kan de opsplitsing maken in client en server. Die opsplitsing is nogal beperkt en dus kan je nog verder opsplitsen. Sowieso blijkt het moeilijk te zijn om een strikte scheiding te maken tussen de verschillende besturingssystemen.

### Merk/bedrijf

* Microsoft
** Windows: 3.11, '95, '98, Me, XP, Vista, 7, 8, 10, 11
** Windows Server: NT 4.x, Windows 2000 Server,..., Windows Server 2019, Windows Server 2022
** Windows Phone: Windows Phone 7,...,Windows Phone 8.1, Windows 10 Mobile
* Apple
** Mac OS: Mac OS (Classic), Mac OS X 10.0 (Cheetah),..., macOS 11.0 (Big Sur)
** iOS: iOS 4,...,iOS 14
* Linux
** Canonical
*** Ubuntu, met Ubuntu 4.10 (Warty Warthog),..., Ubuntu 24.10 (Oracular Oriole)
*** Lubuntu, met Lubuntu 4.10 (Warty Warthog),..., Lubuntu 24.10 (Oracular Oriole)
** Red Hat
*** Red Hat Enterprise Linux (RHEL)
*** Fedora
** Android: Android 1.5 Cupcake,..., Android 14

### Client of server

De vaakst voorkomende opsplitsing volgens 'doel' is deze tussen client (bv. Windows 10, Ubuntu, Android) en server (bv. Windows Server 2016, Ubuntu Server,...):
* een client OS is een besturingssysteem waar vaak maar één persoon tezelfdertijd gebruik van maakt, vaak rechtstreeks op de hardware waar het OS op is geïnstalleerd.
* bij een server OS gaat het vaak om meerdere personen die op hetzelfde moment gebruikmaken van het systeem en dit vaak via een netwerk i.p.v. rechtstreeks op de hardware.
Je merkt al dat 'client' versus 'server' niet welomlijnd is: zo kan je op je Windows10 een ftp-serverprogramma installeren, zodat je bestanden kan delen met anderen. Maakt dit je Windows client dan plots een server? Of je kan bij je Ubuntu Server een grafische schil installeren: maakt het jouw server, dan ook een client?

### Verdere onderverdeling

Ter info geven we nog een verdere onderverdeling volgens "doel":
* Desktop: Windows = 73,79 % ; Mac OS 23,21 % ; Linux = 1,1 % ; Chrome OS = 0,35 %
* Mobile: Android = 64,53 % ; iOS = 35,09 % ; Windows = 0,02 %
* Tablet: iOS = 61,55 % ; Android = 38,35 % ; Windows = 0,08 %
* Onderling: desktop = 55,14 % ; mobile = 40,31 % ; tablet = 4,55 %
* Server: hier meer Linux dan bij de desktop.
** Bestandsserver
** Webserver: Linux = 70,7 % ; Windows = 29,3 % ; OS X < 0,1 %
** Supercomputers: Linux = 100 % ; Windows = 0 %
* Cloud: Linux = 62,8 % (waarvan Ubuntu 31,2 %) ; Windows = 6,0 %
* Embedded. Een embedded system is een elektronisch systeem dat is geïntegreerd in gebruiksartikelen of apparaten, met de bedoeling deze een vorm van intelligent gedrag te bezorgen. De essentie van een embedded system is dat er software zit ingebed in een hardware-apparaat. Bv. op smartphones en tablets, waar de GUI en het gebruik dicht aanleunt bij een desktopsysteem. Maar denk ook aan set-top boxes, routers, switches en audio engineering, waar Linux weer vaak wordt gebruikt.
Ook hier lopen de categorieën in elkaar over. Zo kan je smartphone, tablet en phablet apart bekijken, maar ook samennemen onder de noemer mobile of onder embedded. En voor de cloud zijn ook serverbesturingssytemen nodig.
Het marktaandeel van het ene "doel" t.o.v. het andere verschuift in de loop van de jaren: waar je vroeger met een telefoon enkel kon bellen en sms'en, kan je op een smartphone nu ook heel wat zaken doen die vroeger enkel op de desktop konden. Het totaal aantal desktops zal dus afnemen, maar het is niet zo dat hij ten dode opgeschreven is: sommige zaken gebeuren nog efficiënter dan bij de andere mogelijkheden.
De ontwikkelaars van besturingssystemen zoeken ook naar een manier om één te onderhouden software te hebben, die zich aangepast al naargelang de form factor. Dat scheelt ontwikkelkosten. Bij Microsoft staat dit bekend als Continuum (in combinatie met Universal Windows Platform), bij Apple als Continuity en bij Ubuntu als Convergence. Synoniemen voor elkaar zijn het niet, maar je merkt wel dat ze allen zoeken naar manieren om vloeiender over te gaan van de ene form factor naar de andere. Zo is het bij Continuum en Convergence de bedoeling dat als je je smartphone dan aansluit op een muis, toetsenbord en extern scherm, vanzelf de desktop-modus te voorschijn komt.

## Architectuur

* Architectuur OS
* Toepassingsprogramma's
* Window manager
* Kernel met drivers
* Hardware
Het besturingssysteem heeft een gelaagde architectuur, waarbij hogere lagen gebruikmaken van procedures uit de lagere lagen. In de toplaag worden opdrachten gegeven, de onderste laag bevat de details op het laagste niveau (de hardware om deze opdrachten uit te voeren).
In de tabel staat een heel eenvoudig vierlagenmodel, terwijl je in de galerij kan zien hoe er het "in het echt" uitziet. De functies van een besturingssysteem die verder in dit Wikibook worden besproken, merk je vaak op in zo'n detailarchitectuur.
* Vereenvoudigde voorstelling van Windows 2000
* Detailweergave van de Linux kernel
* Linux display servers en UI toolkits
* Android architectuur
Zo'n lagenmodel is handig, omdat de verschillende types van gebruikers een OS anders bekijken. Zo bekijkt de eindgebruiker een computersysteem in termen van toepassingen (bv. een tekstverwerker). Deze toepassing of applicatie wordt in een bepaalde programmeertaal geschreven door een toepassingsprogrammeur. Hij maakt gebruik van de voorzieningen van het OS bij het ontwikkelen van de toepassing.
Zo zal bv. een tekstverwerker een systeemaanroep doen naar het OS om een bestand te openen. Het "openingsvenster" (als onderdeel van de window manager) verschijnt, waarna een stuk software (als onderdeel van de kernel) het bestand zoekt en opent vanop het opslagmedium (de hardware). De toepassingsprogrammeur hoeft zich enkel te concentreren op zijn toepassing, want de rest wordt afgehandeld door onderliggende lagen. Een gelijkaardig verhaal bij het afdrukken: de toepassingsprogrammeur doet een systeemaanroep en het zal uiteindelijk de printer driver zijn (als onderdeel van de kernel) die het bestand echt afdrukt op de printer (hardware).

### Hardware

Geen software zonder hardware (bij het deel over het opstartproces wordt dieper ingegaan op het opstarten). Het besturingssysteem verdeelt de toegang tot systeembronnen tussen de actieve processen. De belangrijkste systeembronnen zijn:
* Processor. Het is de verantwoordelijkheid van het besturingssysteem om te zorgen voor een optimale verdeling van de beschikbare verwerkingstijd tussen de verschillende toepassingen die gelijktijdig werken op een computer.
* Intern geheugen. Een belangrijke taak van het OS is het toewijzen van (RAM-)geheugen voor het uitvoeren van een proces of instructie. Meer informatie lees je straks bij de geheugenbeheerder.
* Randapparaten. Verzorgen van verkeer van (input) en naar (output) randapparaten.
** Invoer: bv. toetsenbord en muis.
** Uitvoer: bv. monitor en printer.
* Opslagmedia. Het besturingssysteem bepaalt waar gegevens geschreven worden en zorgt er ook voor dat een gevraagd bestand van de juiste plaats wordt opgehaald. Daarnaast wordt ook de beveiliging van de gegevens geregeld waaronder de toegangsrechten en machtigingen, het gemeenschappelijk gebruik en het vergrendelen van bestanden.
In de besproken functies en andere hoofdstukken (opslagbeheer, processor,...) zullen deze systeembronnen meermaals aan bod komen.

### Kernel met drivers

Een kernel is het meest centrale en meest onzichtbare onderdeel van een besturingssysteem, de kern die alle basisvoorzieningen verzorgt voor de andere delen van het besturingssysteem en voor computerprogramma's. Systeemprogrammatuur is dus software die nodig is voor het functioneren van het systeem, zoals software die zorgt voor het kopiëren van bestanden en die netwerkverkeer regelt. Deze software kan in de vorm van achtergrondprocessen zijn (bv. services/diensten/daemons). Bij functies wordt dit uitgebreider besproken.
Een driver of stuurprogramma is software dat een verbinding legt tussen de hardware (de controller) en het besturingssysteem. Dankzij de driver kan een programmeur op een uniforme manier het besturingssysteem aanspreken. Zo moet een programmeur van een tekstverwerker niet weten welke printer precies aanwezig is bij de eindgebruiker.
De controller is hardware dat zorgt voor de communicatie tussen randapparaat en driver. Het is een chip, een uitbreidingskaart of een losstaand apparaat, bv. memory controller, USB controller, Network interface controller.

### De windowmanager

Een windowmanager, ook wel Windowing system of Desktop environment (DE), is software die de plaatsing en het uiterlijk van vensters afhandelt in een venstersysteem. Zo hebben de programmeurs minder werk en krijg je een consistent gebruik en uiterlijk binnen het OS.
Bij Mac en Windows is er altijd gekozen voor een gecontroleerd en beperkt aantal manieren voor interactie met, en weergave van vensters op een scherm. Dit t.o.v. Unix-achtige besturingssystemen, waar er meer dan 100 windowmanagers beschikbaar zijn (zo gebruikt Lubuntu een andere, lichtere window manager dan Ubuntu). Bij Android heb je stock Android (bv. de Nexus- en Pixel-lijn), fabrikanten die een aangepaste Android installeren of een aangepaste Android die je zelf installeert (bv. LineageOS.

### Toepassingsprogramma's

Toepassingsprogramma's, toepassingsprogrammatuur of applicaties zijn algemene benamingen voor alle software die een voor de eindgebruiker (min of meer) nuttige toepassing heeft. Over het algemeen draaien toepassingsprogramma's 'op' (of 'onder') een bepaald besturingssysteem (d.i. systeemprogrammatuur).
Voorbeelden van applicaties zijn: tekstverwerker (zoals LibreOffice of Word), e-mailprogramma (zoals Thunderbird en Outlook) en mediaspelers (zoals VLC en Windows Media Player). Er bestaan ook steeds meer webapplicaties zoals Pixlr of de e-mailapplicaties van Outlook en GMail). De term apps wordt vaak gebruikt voor toepassingsprogramma's die draaien op een smartphone, smartwatch, tablet of een ander mobiel apparaat (alhoewel de term ook al wordt toegepast voor software die op gewone desktop draait).

### Systeem- en gebruikersmappen

Bij de architectuur van een besturingssystemen moet ook nagedacht worden waar belangrijke bestanden en mappen hun plaats krijgen in de documentenstructuur van dit besturingssysteem. Ter info geven we enkele voorbeelden mee. Zo merk je dat elk besturingssystemen zijn eigen aanpak heeft om deze ergens in de documentenstructuur te kunnen bewaren. De code met % of $ verwijst naar omgevingsvariabelen van het besturingssysteem (meer info bij Gebruik van de opdrachtprompt > Batchbestanden).
In Windows wordt heel wat van de basis geïnstalleerd in C:\Windows (%windir% of %SystemRoot%), waarbij de submap System32 een belangrijke rol speelt. In Linux is dat meer verspreid over verschillende mappen (bv. /, /bin, /etc, /lib, /usr, /var), waar iedere map zijn eigen doel heeft. Zo bevat /bin uitvoerbare bestanden, /etc configuratiebestanden voor het systeem en /var variabele bestanden (bv. logbestanden). Voor configuratie in Windows wordt vaak het instellingenprogramma geopend (vlag + i), het oudere Configuratiescherm of het register (regedit).
Software (zowel het besturingssysteem als de toepassingsprogramma's) zijn gemaakt voor een bepaalde processorarchitectuur (%PROCESSOR-ARCHITECTURE%): 32 bit of 64 bit, waar die van 64 ook compatibel is met 32 bit (zie Processor). Als toepassingsprogramma's in Windows systeembreed worden geïnstalleerd, dan is dat voor 64 bit software meestal in C:\Program Files (%ProgramFiles% of %ProgramW6432%) en voor 32 bit programma's in C:\Program Files (x86) (%ProgramFiles(x86)%).
Het is belangrijk om gebruikersdata maximaal te scheiden van data van het besturingssysteem. Zo krijgt iedere gebruiker zijn eigen map. In Windows is dat standaard een map onder C:\Users (%userprofile%), in Linux standaard onder /home ($HOME). Vervolgens kan onder die map niet alleen gewone data geplaatst worden, maar ook software geïnstalleerd worden die enkel voor die gebruiker toegankelijk is. In Windows gebeurt dit onder een verborgen map AppData\Local (%LOCALAPPDATA%), in Linux vaak onder de verborgen map .local.
Naast de mappen heb je ook altijd belangrijke bestanden. Denk in Windows aan de kernel ntoskrnl.exe, wat bij Linux meestal /boot/vmlinuz is. Om als gebruiker grafisch te kunnen aanmelden heb je winlogon.exe in Windows en bv. gdm in Linux.

## Functies
### Software...
#### ... uitvoeren

Dit is waarschijnlijk de bekendste functie van een besturingssysteem: dankzij het OS kunnen we programma's opstarten. Dit komt o.a. neer op:
* Het opstarten van het besturingssysteem zelf: er wordt gezorgd dat alle benodigde bestanden worden geladen. Meer info bij het opstartproces.
* Het uit te voeren programma staat vaak op een opslagmedium, dat veel te traag is om snel uit te voeren. Dus wordt het programma naar het snellere interne geheugen (RAM) geschreven. De processor voert de opdracht uit.
* Actieve programma's de mogelijkheid bieden om een gebruikersinterface weer te geven (via de windowmanager), dit kan zowel grafisch (GUI) als via een commandolijn (CLI).
Dit uitvoeren is in drie puntjes opgesomd, maar er komt nog meer bij kijken, zoals zal blijken uit de andere functies van het OS.

#### ... configureren

Zowel toepassingssoftware, als besturingssystemen hebben manieren om de software naar je hand te zetten: te configureren dus. Klik niet zomaar op volgende of voer niet blindelings commando's uit: zeker als administrator kunnen deze grote gevolgen hebben voor je systeem.
* Als gebruiker is het interessant om de machtigingen van toepassingen te controleren: welke app heeft bv. toegang tot camera, microfoon, ...
* Als beheerder kan het interessant zijn om verborgen (systeem)mappen en bestanden zichtbaar te zetten, zodat je een maximaal zicht hebt op het systeem.
* In bv. Windows zullen de systeeminstellingen (vlag + i) of het oudere Configuratiescherm interessant zijn. Eventueel moet je nog wat dieper duiken en open je de registereditor.

#### ... installeren

Het besturingssysteem komt vaak al out of the box met enkele toepassingsprogramma's, maar dat is vaak niet voldoende. Het systeem moet dus een mogelijkheid aanbieden om extra software te gebruiken:
* Je hebt een setupprogramma, dat je doorheen de installatie loodst. Bij sommige (system)setups heb je beheerdersrechten nodig en wordt de software systeembreed geïnstalleerd, zodat ook andere gebruikers van het OS deze software kunnen gebruiken. Er zijn ook (user)setups die in de gebruikersmap (bv. Visual Studio Code) of in een map naar keuze geïnstalleerd kunnen worden, zodat geen extra rechten nodig zijn. Een veelgebruikt platform voor Windows waarop portable software wordt aangeboden is PortableApps.com.
* Er bestaat direct uit te voeren software, zonder dat je deze eerst moet installeren (bv. PuTTY). Eventueel moet je wel een gecomprimeerde map uitpakken naar een map naar keuze (bv. HWiNFO).
* Je gebruikt een pakketmanagersysteem (PMS) (ook bekend als store), een collectie van software om het proces van het installeren, upgraden, configureren en verwijderen van software van een computer gemakkelijker te maken. De stappen verlopen ongeveer als volgt:
** De gebruiker vraagt de installatie van een bepaalde toepassing. Bij commerciële software moet mogelijks betaald worden.
** De PMS bepaalt alle afhankelijkheden: sommige programma's hangen af van andere deelprogramma's of frameworks om te kunnen werken. Soms is dat heel complex en heeft men het over de dependency hell.
** De PMS haalt alle benodigde software op vanuit een repository (dit is een opslaglocatie vanwaar softwarepakketten gedownload kunnen worden, vaak te vinden op het internet).
** De PMS installeert en configureert en vraagt soms interactie van de gebruiker (bij het installeren van een nieuwe kernel zal de PMS aanraden om het systeem opnieuw te starten ; de eindgebruiker moet akkoord gaan met een specifieke licentie).
** De gebruiker gebruikt de software.
* PortableApps
* cli-PMS Chocolatey
* cli-PMS apt
* Ubuntu Software Center
Bij het grote publiek is het PMS idee wellicht het bekendst geworden onder de App Store van Apple en Google Play in 2008. Later zijn er nog vele app stores bijgekomen die dit voorbeeld volgden, bv. Windows Store in 2012. Voor wie de geschiedenis goed heeft gevolgd, weet dat dit concept het eerst op grote schaal aanwezig was binnen de Linux distributies, al vanaf 1993! Enkele bekende pakketmanagers, waarvan sommige eerder voor de "gewone" eindgebruiker zijn bedoeld, terwijl andere eerder voor de IT'er handig zijn:
| | Eindgebruiker | IT'er |
| Windows | Microsoft Store | Chocolatey, winget en Intune |
| Mac OS | Mac App Store | HomeBrew |
| Linux | GNOME Software | apt en dpkg |
| Android | Google Play | F-Droid |
| iOS | App Store | |
De tools in de kolom IT'er kunnen handig zijn, omdat bv. heel wat beheer mogelijk is (Intune) of dat zaken via de commandolijn kunnen worden bediend, waardoor je dit kan scripten. Enkele voorbeelden van commando's (waarbij het eigenlijk voldoende is het help-commando te onthouden):
| | Chocolatey | Apt-cache, apt-get en dpkg-query |
| Help | choco /? | man apt-cache (man van manual) man apt-get |
| Zoeken | choco search firefox | apt-cache search firefox |
| Installeren | choco install firefox choco install keepassx of choco install firefox keepassx | sudo apt-get install firefox sudo apt-get install keepassx of sudo apt-get install firefox keepassx |
| Overzicht | choco list | dpkg-query -l |
| Verwijderen | choco uninstall keepassx | sudo apt-get remove keepassx |
| Update 1 | choco upgrade firefox | sudo apt-get install –only-upgrade firefox |
| Update all | choco upgrade all | sudo apt-get update sudo apt-get dist-upgrade |
| Info | chocolatey.org > Docs | help.ubuntu.com |

#### ... updaten

Het up-to-date houden van software is belangrijk. Niet alleen voor de nieuwe mogelijkheden, maar ook voor het oplossen van bugs. Vooral als het gaat om security bugs.
Het belang van een up-to-date systeem
Begin augustus 2014 worden verschillende gebruikers van Synology-systemen getroffen door ransomware, waardoor hun bestanden versleuteld worden. Ze moeten aan de criminelen honderden euro's betalen om weer bij hun bestanden te kunnen. Er werd gebruik gemaakt van een kwetsbaarheid die al in december gedicht was. Wie DiskStation Manager had bijgewerkt naar de nieuwste versie, liep geen gevaar, aldus Synology.
(nl) Synology: ransomware treft alleen ongepatchte systemen. tweakers.net (2014-08-06).
Microsoft stopt met veiligheidsupdates voor Windows 7 vanaf 14 januari 2020. Begin oktober 2019 heeft Tweakers.net geïnformeerd bij de Nederlandse gemeenten en meer dan de helft heeft hun systemen nog niet gemigreerd. Een handvol zegt dat de deadline van 2020 niet zal lukken. Volgens Netmarketshare zijn er zelfs nog 2,67 % gebruikers van Windowps XP, waarvan de ondersteuning afliep in 2014! Wereldwijd draait een vijfde van alle pc's nog Windows 7.
(nl) Gemeenten moeizaam naar Windows 10. tweakers.net (2019-10-09). (nl) NetMarketShare: Vijfde van alle pc's wereldwijd draait nog op Windows 7. tweakers.net (2020-11-04).
Vaak bevat het besturingssysteem mogelijkheden om zichzelf up-to-date te houden. Voor de toepassingssoftware zijn er enkele mogelijkheden:
* Je controleert zelf of er een nieuwe versie ter beschikking is. Maar vaak gebeurt dit niet of niet regelmatig genoeg.
* De toepassing heeft zijn eigen updatemechanisme. Het nadeel is hier dat iedere toepassing dan zijn eigen updatemechanisme moet hebben en dat je als beheerder vaak een afzonderlijke goedkeuring per toepassing moet geven.
* Het updaten van toepassings- en systeemprogrammatuur wordt uitbesteed aan het OS, meer specifiek aan een pakketmanager of App store. Het voordeel is dat dit centraal kan gebeuren.
Er is altijd een afweging die moet gemaakt worden, want een update kan ook nieuwe bugs met zich meebrengen. Hoe belangrijker de software voor een organisatie, hoe belangrijker het testen van zo'n update. Bij software die nog werkt, maar niet meer ondersteund wordt, moet altijd de afweging gemaakt worden of het niet beter is te upgraden naar de nieuwste versie (ook als je moet betalen) of naar alternatieve software moet uitwijken.
Het veilig houden van een OS betekent ook dat je als beheerder moet nagaan of alle geïnstalleerde software wel nog wordt gebruikt. Hoe meer software op een systeem staat, hoe groter de kans op lekken.

#### ... verwijderen

Zowel op vlak van veiligheid (machtigingen, updates, ...) als op vlak van opslagruimte is het interessant om regelmatig te kijken als bepaalde toepassingen wel nog nodig zijn. Gebruik de mogelijkheden van het besturingssysteem om bv. te sorteren op installatiedatum, datum laatst gebruikt, grootte, ... Uiteraard ga je niet in het wilde weg zaken verwijderen: een vreemde naam kan helemaal ok zijn en een vertrouwde naam kan malware zijn. Wees kritisch.

### Gebruikersbeheer

Het kunnen aanmaken van gebruikers is belangrijk, zodat iedere gebruiker zijn eigen werkomgeving kan hebben. Er zijn verschillende types van accounts: beheerders (die bv. software kunnen installeren), gewone gebruikers (die vaak geen software kunnen installeren, maar wel een eigen werkomgeving hebben) en gasten (die kunnen gebruikmaken van de pc, maar na afmelden worden instellingen en documenten vaak gewist). Aan de gebruikers kunnen ook rechten worden toegekend, zodat de ene gebruiker niet zomaar toegang heeft tot de documenten van een andere gebruiker. De controle van deze toegang gebeurt door het OS.
Multiuser is een begrip dat gebruikt wordt als een besturingssysteem of een applicatie concurrente (tezelfdertijd) toegang toelaat van meerdere gebruikers van een computer. Zo zal een databank vaak meerdere gebruikers tezelfdertijd toegang kunnen verlenen. Ook bij een multiseat of een LTSP-systeem hebben meerdere gebruikers tezelfdertijd toegang. Merk op dat bv. een “gewone” Windows XP maar één gebruiker tezelfdertijd toeliet (single-user). Verwar multi-user dus niet met het feit dat je meerdere gebruikers kan aanmaken.

### Energiebeheer

Samen met de toename van toestellen die op batterijen werken, wordt het ook belangrijker om het energieverbruik onder controle te houden. Enkele mogelijkheden:
* Het OS zet het scherm op zwart bij niet-gebruik.
* Het OS kan het scherm dimmen.
* Het OS kan de processor (of zijn kernen) onderklokken of bepaalden kernen uitschakelen/laten idlen.
* Het OS zet het toestel in slaapstand (of suspend to RAM) na enkele minuten inactiviteit. De status van het toestel (oa. openstaande programma's en documenten) wordt dan in RAM bewaard, daarna wordt de stroom naar onnodige subsystemen afgesloten. Het RAM-geheugen verbruikt enkel nog net voldoende energie, om zijn inhoud niet te verliezen.
* Een stapje verder is hibernation (of suspend to disk) waar de status van het toestel op permanente opslag wordt bewaard (bv. HDD of SSD). Het voordeel is dat deze permanente opslag geen energie verbruikt om zijn inhoud te bewaren. Het nadeel is dat het iets langer duurt om terug de oorspronkelijke status te krijgen, omdat permanente opslag trager is dan RAM-geheugen.
* Een mengvorm is hybrid sleep (of suspend to both) waarbij zowel de slaapstand als hibernation wordt toegepast. Zolang de batterij van bv. een laptop het uithoudt is de slaapstand handig, maar als deze uiteindelijk toch leeg is, kan alsnog de status van de machine hersteld worden, dankzij hibernation.
Dit energiebeheer kan je via het OS naar de hand zetten. Je hebt er bv. onderstaande mogelijkheden, die je vaak verder kan verfijnen:
* Energiebesparing: als je een harde schijf trager laat draaien of een CPU trager laat werken, dan verbruikt je systeem minder energie. Het scherm is ook een grote slokop, dus door deze te dimmen kan je ook veel besparen.
* Hoge prestaties: het tegengestelde van energiebesparing.
* Gebalanceerd: er wordt een evenwicht gezocht tussen het energieverbruik en de prestaties.

### Multitasking en de scheduler

Een computer/besturingssysteem lijkt op één moment met alles tezelfdertijd bezig: muziek afspelen, e-mail binnenhalen, foto uploaden, klok wijzigen, updates op de achtergrond starten, een bestand opslaan, een bestand openen,... Dat is echter maar schijn: op één bepaald moment is een (single) core in theorie maar bezig met één iets (het running proces). Maar door de snelheid waarmee de processor werkt lijkt het echter dat hij veel op één moment doet. Een 3 GHz core kan zo 3 miljard "dingen" per seconde doen!
Er zijn vijf mogelijke toestanden voor de processen:
* New is de toestand als een proces net wordt aangemaakt en de nodige zaken voorzien moeten worden (bv. toewijzen RAM-geheugen).
* Een ready-proces is klaar om te worden uitgevoerd, maar wordt op dat eigenste moment niet uitgevoerd. Zo staan er heel wat van die ready-processen klaar.
* Een running-proces is de processor nu aan het uitvoeren. Als het gaat om een systeem met maar 1 processor(kern), dan is er ook maar 1 running-proces, zelfs al staan er heel wat klaar (ready) om uitgevoerd te worden!
* Een blocked-proces is niet klaar om (verder) uit te voeren, vaak omdat de processor moet wachten op randapparaten. Denk bv. aan een running-proces dat een bestand van het opslagmedium moet laden. Voor de giga-snelle processor is het wachten op dat trage opslagmedium een eeuwigheid. In plaats van niets te kunnen doen (idlen) wordt dit proces van de running-status, naar de blocked-status gebracht. De scheduler kiest dan een proces uit de ready-verzameling, zodat dit kan worden uitgevoerd (het wordt dus running). Eens het bestand is ingeladen kan het blocked-proces, de ready-status krijgen (om uiteindelijk opnieuw de running-status te verkrijgen).
* Als je een proces sluit, komt het in de dead-toestand terecht. Dan wordt bv. het RAM-geheugen terug vrijgegeven.
De kunst van een goede scheduler (een soort dienstregeling) bestaat er nu in om efficiënt te wisselen tussen al die toestanden. Als bv. het ene proces te lang de running-status krijgt, dan betekent het dat andere ready-processen niet aan de beurt kunnen komen. Als eindgebruiker zou je dat zeker merken, dus moet de scheduler op tijd zorgen voor een timeout voor het running-proces, zodat een ander proces uit de ready-groep kan worden uitgevoerd (running).
De scheduler zal giga-snel wisselen tussen ready en running, zodat het voor de eindgebruiker lijkt alsof alles tezelfdertijd wordt uitgevoerd. Multitasking is een methode om één processor schijnbaar meerdere taken (programma's of delen daarvan) tegelijkertijd te laten uitvoeren. Het besturingssysteem wisselt giga-snel tussen de verschillende actieve programma's. Bij onderstaand voorbeeld wordt bij de ene core gewisseld tussen de tekstverwerker en het e-mailprogramma en bij de andere core tussen de browser en antivirus. In het echt zijn er véél meer processen waartussen gewisseld moet worden.

### Multithreading

Multithreading is een programmeermodel dat een grotere taak (het proces) opsplitst in meerdere kleinere taken (de threads), op een zodanige manier dat de threads afzonderlijk van elkaar kunnen worden uitgevoerd. Threads binnen één proces delen elkaars resources (bv. het geheugen), wat bij twee afzonderlijke processen (standaard) niet zo is.
Binnen één proces (of programma) kunnen zo verschillende taken van één proces "tegelijkertijd" op meerdere cores worden uitgevoerd. Zo krijg je een snelheidswinst. Een webbrowser kan bijvoorbeeld met behulp van threads meerdere taken tegelijk uitvoeren zoals het ophalen van een webpagina van een server en het afhandelen van de acties van de gebruiker in menu's of dialoogvensters.
Hieronder merk je een gelijkaardig voorbeeld zoals bij multitasking, maar hier gaat het om één proces (i.p.v. vier afzonderlijke), met vier threads. Het proces is een meet- en controleprogramma, met daarin een thread voor het bekomen van data, een voor de gebruikersinterface, een voor de netwerkcommunicatie en een voor het loggen. Door de aanwezigheid van twee cores, kunnen twee van de vier threads tezelfdertijd worden uitgevoerd. Zonder threads kan dit programma maar aan één core worden toegekend. De Apache HTTP server maakt gebruik van thread pools: een pool van listener threads om te luisteren naar binnenkomende aanvragen en een pool van server threads voor het behandelen van die aanvragen.
Zelfs als er maar een single core is, kan er met threads snelheidswinst zijn, omdat de scheduler sneller kan wisselen tussen threads van één proces, dan tussen afzonderlijke processen (bv. omdat het geheugen tussen threads gedeeld wordt, maar niet tussen afzonderlijke processen).
Programmeurs moeten goed nadenken bij gebruik van multithreading! Threads hebben nl. toegang tot hetzelfde geheugendeel en als de ene thread iets wijzigt, waarvan de andere niet weet, kan dit fouten opleveren. Bovendien kan een crash van één thread het volledige proces laten crashen!
Multitasking en multithreading lijken wel op elkaar, maar verwijzen duidelijk naar iets anders:
* Multitasking verwijst naar meerdere programma’s, elk met hun eigen bronnen (resources, zoals bv. geheugen). Het is alsof er een kookwedstrijd is, waarbij elke kok zijn eigen ingrediënten en kookboek gebruikt.
* Multithreading verwijst naar delen van één programma of toepassing, waarbij de bronnen (zoals het geheugen) gedeeld worden. Het is alsof meerdere koks hetzelfde kookboek aan het lezen zijn, hun ingrediënten delen en zijn instructies volgen (niet noodzakelijk vanaf dezelfde pagina).

### De geheugenbeheerder

Met betrekking tot het (RAM-)geheugen zijn er bepaalde zaken die we verwachten:
* Als een programma wordt opgestart zorgt het OS dat er niet alleen geheugen is gereserveerd voor het programma zelf, maar ook voor bepaalde datastructuren. Als je je tekstverwerker opstart en vervolgens een bestand opent, dan moet voor dit alles het nodige geheugen voorzien worden.
* Bij het ontwerpen van een programma is het gemakkelijk om uit te gaan van veel geheugen, netjes aaneengesloten en voor jouw programma alleen. Dit is het virtueel geheugen. Gelukkig kan je volgens dit idee programmeren, maar 'in het echt' moet het OS wel voor volgende zaken zorgen:
** Het fysieke RAM-geheugen kan te klein zijn om alle programma's te kunnen laden. In dat geval zal het OS een stuk van een ander opslagmedium (HDD, SSD,...) gebruiken als uitbreiding van het RAM-geheugen: de swap-ruimte of wisselgeheugen. Tijdelijk niet gebruikte gegevens uit het RAM-geheugen kunnen daar worden bewaard om zo meer werkgeheugen (RAM) vrij te houden voor belangrijkere zaken. Het voordeel is dat er zo kan worden verder gewerkt, het nadeel is dat het opslagmedium niet zo snel is als het RAM-geheugen.
** Het adres in dat virtueel geheugen is niet hetzelfde als het fysieke adres, dus moet er een vertaling van het ene naar het andere gebeuren. Zo kan blijken dat de fysieke plaats versnipperd is en dus niet netjes aaneengesloten is.
** Het fysieke geheugen is er niet voor één programma alleen, maar het moet gedeeld worden met andere processen, waarbij het ene proces niet zomaar toegang mag krijgen tot het geheugen van een ander proces.
* Als de eindgebruiker een programma sluit, dan verwacht je dat het geheugen dat dit programma innam netjes terug wordt vrijgegeven.
Het is duidelijk dat een besturingssysteem geheugenbeheer moet voorzien, zodat alles beheersbaar kan verlopen.

## Noten en referenties

* ↑ Leerplan Applicatie- en databeheer - 3de graad - D/A-finaliteit
* ↑ Leerplan Informaticabeheer D/2015/7841/003
* ↑ In het tweakers.net-artikel "De lange weg naar Android 1.0" lees je meer over het parcours van Android.
* ↑ (en) Informatie over de marktaandelen: zie bv. de engelstalige wikipedia
* ↑ Global Stats, België, Desktop
* ↑ Global Stats, België, Mobile
* ↑ Global Stats, België, Tablet
* ↑ Global Stats, België, Desktop vs Mobile vs Tablet
* ↑ w3techs.com: Usage of operating systems for websites
* ↑ Supercomputers, bron TOP500. Zie deze afbeelding
* ↑ (en) thecloudmarket.com, gegevens op 11 september 2017.
* ↑ (nl) Bv. de Digicorder van Telenet, zie tweakers.net
* ↑ (nl) Zie 10 Voorbeelden van Linux-succes, Linux everwhere: routers and audio en Linux gebaseerde toestellen
* ↑ (nl) Zie ook de review van Tabletsmagzine: "Continuum: maak van je tablet of smartphone een Windows 10 desktop"
* ↑ (en) Op getwired.com kan je lezen over Continuum vs. Continuity – Seven letters is all they have in common
* ↑ (en) Enkele voorbeelden van kernelarchitecturen: De Linux kernel map, De Linux kernel (Wikimedia Commons) en de Window NT architectuur
* ↑ Merk op dat Windows Update geen pakketmanager is: je kan er niet zomaar software mee installeren en bovendien zal deze enkel Microsoft programma's updaten (bv. de Windows-kernel, Internet Explorer en Microsoft Office).