#Klooienmetcomputers

De TSR en protected mode

Arnout van Kempen over rommelen in een digitale wereld.

MS-DOS was, zeker in zijn tijd, een behoorlijk geavanceerd operating system. Het had nog een paar trucjes in zich, waarmee slimme programmeurs prachtige dingen konden doen. Als eerste wil ik de TSR noemen. Een TSR is een programmaatje dat na uitvoering in het geheugen achterblijft: Terminate and Stay Resident. Het geheugen werd door MS-DOS niet vrijgegeven, maar het programma was daarna in principe ook niet meer bereikbaar. Wat heb je daar dan aan? Nou, best veel. Wat je kon doen was de interruptvector van een specifieke interrupt verleggen naar het begin van je TSR en de oude vector met een JMP aan het einde toevoegen. Daarmee voegde je feitelijk functionaliteit toe aan je systeem. Met name voor BIOS-vectoren kon je zo aardige dingen doen. Een commercieel verkrijgbare toepassing koppelde zo bijvoorbeeld aan het toetsenbord, zodat je met sneltoetsen functies als een agenda of rekenmachine kon toevoegen. Ik heb zelf indertijd een TSR geschreven die ik aan INT 13h koppelde. Iedere keer dat welk programma dan ook, inclusief MS-DOS zelf, code wilde schrijven naar een bepaalde positie op de harde schijf die kwetsbaar was voor virussen, weigerde mijn TSR die opdracht uit te voeren. Alle andere opdrachten werden doorgelaten naar de oorspronkelijke vector. Effectief had ik daarmee een basale virusbescherming, zonder dat 'nette' programma's daar iets van merkten.

Hoewel MS-DOS een single user, single task systeem was, waren er wel mogelijkheden om een rudimentaire vorm van multi-tasking mogelijk te maken. Een van de oudste commercieel goed doorontwikkelde systemen daarvoor was Desqview. En ook de eerste versies van MS Windows waren multi tasking systemen bovenop MS-DOS. Omdat de 8086 zelf de basisvoorzieningen voor multitasking mist, was het behelpen. Desqview bijvoorbeeld vereiste dat programma's zelf na een tijdje de controle teruggaven aan het systeem, zodat een volgend programma verder kon draaien. Liep een programma vast, dan liep het hele systeem vast.

Hoe mooi ook, voor veiligere multi tasking en ook voor multi users is een CPU nodig, die bijvoorbeeld op basis van een externe klok-interrupt regelmatig de macht overneemt en tijd toekent aan verschillende processen. Pas de 80386 kreeg de daarvoor benodigde voorzieningen.

Maar er is meer nodig. Om echt goed multi user, multi tasking in te kunnen richten wil je een besturingssysteem dat de gebruikersprogramma's voor de gek houdt. In feite wil je niet alleen dat het besturingssysteem kan ingrijpen om de beschikbare CPU-tijd over processen te verdelen, je wil dat al die processen elkaar niet zien. Dat betekent dat het operating system in staat moet zijn zelf alle toegang tot geheugen en randapparatuur te beheren. En zelfs adressen moet kunnen vertalen tussen wat het programma denkt te zien en welk geheugen echt wordt gebruikt. We zagen dat al toen we in C aan het programmeren waren. Met bijvoorbeeld een malloc() konden we geheugen reserveren bij het systeem. Het leverde een pointer op naar dat geheugen. Maar wijst die pointer naar het echte geheugen? Nee, naar virtueel geheugen, dat door de CPU, om precies te zijn de Memory Management Unit of MMU, wordt omgezet naar het echte adres. De commando's die dit soort zaken regelen moeten beschikbaar zijn voor het besturingssysteem, maar mogen niet worden gebruikt door gebruikersprogramma's. Daarom wordt dit in de 80x86 protected mode genoemd, de toestand die in alle moderne besturingssystemen wordt gebruikt. Voor de gebruiker ziet alles er uit alsof processen draaien op een 80x86 in real mode, zonder andere gebruikers en met alle hardware beschikbaar, maar in werkelijkheid beheert het besturingssysteem alles.

Het zal duidelijk zijn dat directe benadering van hardware in een dergelijke omgeving is uitgesloten. Zelfs indirecte toegang, via het BIOS, kan niet langer worden toegestaan. Alles zal moeten lopen via het besturingssysteem. Wat onder MS-DOS de INT 21h was, krijgt daarmee niet langer de status van 'handige optie' maar van 'enige keuze'.

Deze manier van werken is overigens ouder dan MS-DOS. Het is bijvoorbeeld de manier waarop UNIX werkt, een systeem dat al in 1971 populair werd op de PDP-11. Door een fascinerende samenloop van copyright en antitrust regels in Amerika is het echte UNIX niet erg populair meer, maar bestaat er wel een hele familie van lookalikes, veelal verenigd onder de POSIX-standaard, zoals Linux, MacOS, Pi OS, FreeBSD, Android en talloze anderen. Maar ook OS/2 en Windows NT werken volgens hetzelfde principe. Alle moderne Windows-versies zijn op diezelfde techniek gebouwd.

Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.

Arnout van Kempen di CCO CISA is directeur compliance & risk bij aaff, de fusieorganisatie van Alfa en ABAB. Hij schrijft op persoonlijke titel.

Gerelateerd

reacties

Reageer op dit artikel

Spelregels debat

    Aanmelden nieuwsbrief

    Ontvang elke werkdag (maandag t/m vrijdag) de laatste nieuwsberichten, opinies en artikelen in uw mailbox.

    Bent u NBA-lid? Dan kunt u zich ook aanmelden via uw ledenprofiel op MijnNBA.nl.