Why do programmers use overlays?

Hvad er Overlays i Operativsystemer?

25/12/2015

Rating: 4.53 (3193 votes)
Indholdsfortegnelse

En Dybdegående Gennemgang af Overlays i Hukommelsesstyring

I computerens tidlige dage stod programmører over for en fundamental begrænsning: størrelsen på computerens hukommelse. Fysisk hukommelse (RAM) var ekstremt dyr og begrænset, hvilket betød, at hvis et program var større end den tilgængelige hukommelse, kunne det simpelthen ikke køres. Dette satte en alvorlig stopper for udviklingen af kompleks software. Forestil dig at skulle bygge et stort hus, men kun have plads til materialerne til ét enkelt rum ad gangen. Det var den udfordring, de tidlige softwareingeniører stod overfor. Løsningen var ikke blot at tilføje mere hukommelse, da det ville gøre computersystemerne uoverkommeligt dyre. I stedet udviklede man en smart teknik kendt som Overlays for at omgå denne begrænsning.

What are overlays in operating system?
'The process of moving a block of programme code or other data into internal memory, replacing what is previously stored,' according to the definition. Overlaying is a method of allowing applications to be larger than the primary memory of a computer.

Hvad er Overlays Præcist?

Overlays er en hukommelsesstyringsteknik, der gør det muligt at køre et program, som er større end den fysiske hukommelse. Kerneprincippet er enkelt: I stedet for at indlæse hele programmet i hukommelsen på én gang, indlæser man kun de dele af programmet (instruktioner og data), der er nødvendige på et givent tidspunkt. Når en del af programmet er færdig med at køre, bliver den fjernet fra hukommelsen (aflæst) for at gøre plads til den næste del, der er nødvendig.

Formelt kan det beskrives som: "Processen med at overføre en blok af programkode eller andre data til intern hukommelse, hvorved den erstatter, hvad der allerede er gemt."

Det er vigtigt at understrege, at ansvaret for at implementere og administrere overlays lå udelukkende hos programmøren, ikke operativsystemet. Programmøren skulle manuelt opdele sit program i logiske, selvstændige moduler eller 'overlays' og skrive den kode, der var nødvendig for at indlæse og aflæse disse moduler efter behov. Denne styringskode blev ofte kaldt en 'overlay driver'.

Et Praktisk Eksempel: En 2-Pass Assembler

For at gøre konceptet mere konkret, lad os se på et klassisk eksempel med en assembler. En assembler oversætter assembly-kode til maskinkode, og en 2-pass assembler gør dette i to omgange (pass 1 og pass 2). Det afgørende her er, at de to omgange aldrig kører samtidigt; først afsluttes pass 1, derefter kører pass 2.

Lad os antage følgende scenarie:

  • Tilgængelig hukommelse i computeren: 150 KB
  • Samlet størrelse på assembler-programmet: 200 KB

Programmets komponenter er som følger:

  • Pass 1-kode: 70 KB
  • Pass 2-kode: 80 KB
  • Symboltabel (nødvendig for begge pass): 30 KB
  • Fælles rutiner (nødvendige for begge pass): 20 KB

Uden overlays ville programmet ikke kunne køre, da 200 KB er større end de 150 KB tilgængelig hukommelse. Men med overlays kan vi indlæse de nødvendige dele separat.

Hukommelsesbehov for Pass 1:
For at køre pass 1 har vi brug for selve pass 1-koden, symboltabellen og de fælles rutiner. Hukommelsesforbruget er: 70 KB (Pass 1) + 30 KB (Symboltabel) + 20 KB (Fælles rutiner) = 120 KB.

Hukommelsesbehov for Pass 2:
Når pass 1 er færdigt, aflæses dens kode. For at køre pass 2 indlæses pass 2-koden i den samme hukommelsesplads. Hukommelsesforbruget er nu: 80 KB (Pass 2) + 30 KB (Symboltabel) + 20 KB (Fælles rutiner) = 130 KB.

Hvis vi tilføjer en lille overlay driver på f.eks. 10 KB, som altid skal være i hukommelsen for at styre processen, bliver det maksimale hukommelsesbehov 130 KB + 10 KB = 140 KB. Da 140 KB er mindre end den tilgængelige hukommelse på 150 KB, kan hele programmet nu køre succesfuldt. Overlays har løst problemet.

What are overlays in operating system?
'The process of moving a block of programme code or other data into internal memory, replacing what is previously stored,' according to the definition. Overlaying is a method of allowing applications to be larger than the primary memory of a computer.

Strukturering af Overlays med et Træ

En almindelig måde at organisere overlays på var ved hjælp af en træstruktur. Programmet blev opdelt i en 'rod' (root) og flere grene.

  • Rod (Root): En lille del af programmet, der altid er i hukommelsen. Den indeholder typisk hovedlogikken og overlay driveren.
  • Grene (Segments): Moduler, der kan indlæses efter behov. Moduler på samme niveau i træet (søskende-segmenter) deler det samme hukommelsesområde. Det betyder, at kun ét søskende-segment kan være i hukommelsen ad gangen.

Lad os se på et eksempel med følgende træstruktur og størrelser:

Root (2 KB)

  • Segment A (4 KB)
    • Segment D (6 KB)
    • Segment E (8 KB)
  • Segment B (6 KB)
    • Segment F (2 KB)
  • Segment C (8 KB)
    • Segment G (4 KB)

For at køre en bestemt funktion skal vi have hele stien fra roden til det relevante blad-segment i hukommelsen. Lad os beregne det maksimale hukommelsesbehov:

  • Sti Root-A-D: 2 KB + 4 KB + 6 KB = 12 KB
  • Sti Root-A-E: 2 KB + 4 KB + 8 KB = 14 KB
  • Sti Root-B-F: 2 KB + 6 KB + 2 KB = 10 KB
  • Sti Root-C-G: 2 KB + 8 KB + 4 KB = 14 KB

Den største sti kræver 14 KB. Derfor er den mindste mængde hukommelse, der kræves for at køre hele dette program, kun 14 KB, selvom den samlede størrelse af alle moduler er meget større. Dette illustrerer den enorme pladsbesparelse, overlays kunne opnå.

Fordele og Ulemper ved Overlays

Selvom overlays var en genial løsning på et presserende problem, havde teknikken både fordele og ulemper, som er vigtige at forstå.

FordeleUlemper
  • Reduceret hukommelseskrav: Den mest åbenlyse fordel. Store programmer kunne køre på systemer med meget begrænset RAM.
  • Muliggjorde kompleksitet: Uden overlays ville mange af de tidlige, komplekse softwareapplikationer have været umulige at udvikle.
  • Manuelt arbejde for programmøren: Hele ansvaret for at designe, opdele og administrere overlays lå hos programmøren. Dette var en kompleks og fejlbehæftet opgave.
  • Krævede dyb systemviden: Programmøren skulle have en intim viden om programmets struktur og hukommelseskrav for at designe en effektiv overlay-struktur.
  • Stiv struktur: Når først overlay-strukturen var designet, var den svær at ændre. En lille ændring i programmet kunne kræve en komplet redesign af hele strukturen.
  • Kompleks fejlfinding: Fejl relateret til indlæsning af forkerte overlays kunne være ekstremt svære at diagnosticere og rette.

Overlays i Dag: En Fortidsteknologi?

I moderne computer-operativsystemer som Windows, macOS og Linux er overlays stort set en forældet teknik. Årsagen er introduktionen af virtuel hukommelse. Virtuel hukommelse er en langt mere sofistikeret og automatiseret teknik, der håndteres af operativsystemet i samarbejde med computerens hardware (specifikt Memory Management Unit, MMU).

Virtuel hukommelse giver hvert program illusionen af at have adgang til en meget stor, sammenhængende hukommelse, uanset hvor meget fysisk RAM der faktisk er tilgængeligt. Operativsystemet håndterer automatisk indlæsning og aflæsning af data-sider mellem RAM og harddisken (eller SSD), hvilket gør hele processen transparent for programmøren. Dette fjerner fuldstændigt det manuelle arbejde og kompleksiteten forbundet med overlays.

Dog er konceptet bag overlays ikke helt dødt. I stærkt specialiserede og ressourcebegrænsede miljøer, såsom visse indlejrede systemer (embedded systems) eller mikrocontrollere, hvor der ikke er en MMU og virtuel hukommelse ikke er en mulighed, kan lignende manuelle hukommelsesstyringsteknikker stadig findes.

Ofte Stillede Spørgsmål (FAQ)

Hvem var ansvarlig for at håndtere overlays?
Det var udelukkende programmøren. Operativsystemet leverede ingen indbygget understøttelse; programmøren skulle selv designe strukturen og skrive koden (overlay driveren) til at indlæse og aflæse moduler.

Bruges overlays stadig i dag?
Meget sjældent i almindelige desktop- eller server-operativsystemer. Her har virtuel hukommelse fuldstændigt overtaget. Konceptet kan dog stadig have relevans i nicheområder som visse indlejrede systemer med ekstreme hukommelsesbegrænsninger.

Hvad er den største forskel mellem overlays og virtuel hukommelse?
Den primære forskel er automatisering og transparens. Overlays er en manuel, eksplicit proces styret af programmøren. Virtuel hukommelse er en automatisk og transparent proces håndteret af operativsystemet og hardwaren, som er usynlig for programmøren.

Sammenfattende var overlays en afgørende og innovativ løsning på et af de største problemer i computerens barndom. Selvom teknikken er blevet erstattet af overlegne metoder, står den som et vidnesbyrd om den opfindsomhed, der var nødvendig for at skubbe grænserne for, hvad der var muligt med den daværende teknologi. Den banede vejen for den komplekse software, vi tager for givet i dag, og var et vigtigt skridt på vejen mod de avancerede hukommelsesstyringssystemer, vi bruger nu.

Hvis du vil læse andre artikler, der ligner Hvad er Overlays i Operativsystemer?, kan du besøge kategorien Teknologi.

Go up