Burroughs stora systembeskrivningar

Deskriptorer är en arkitektonisk egenskap hos Burroughs stora system , inklusive de nuvarande (från 2006) Unisys Clearpath/MCP-system. Förutom att de är stack- och taggbaserade är en anmärkningsvärd arkitektonisk egenskap hos dessa system att de är deskriptorbaserade. Deskriptorer är sättet att ha data som inte finns i stacken som för arrayer och objekt . Deskriptorer används också för strängdata som i kompilatorer och kommersiella applikationer .

Detaljer

Deskriptorer beskriver lagringsområden, I/O-förfrågningar och I/O-resultat. De innehåller fält som t.ex. anger typen av deskriptor, adressen, längden, om data finns i lagringen. Detaljerna varierar beroende på produktlinje och typ av beskrivning. Följande text numrerar den längst till vänster (mest signifikanta) biten som 0, i enlighet med Burroughs-dokumentationen.

Program- och datadeskriptorer har en bit som kallas "närvarobiten" eller "p-biten"; den indikerar om objektet som hänvisas till av deskriptorn för närvarande finns i minnet eller i sekundärt minne. Denna bit används för att implementera virtuellt minne .

Virtuellt minne utvecklades ursprungligen för Atlas -projektet vid University of Manchester i slutet av 1950-talet. Ivriga att se detta användas i kommersiella tillämpningar bjöd de in ingenjörer från flera datorföretag till ett seminarium, inklusive de från Burroughs och IBM . B5000 , som släpptes . 1961, var den första kommersiella datorn som gav virtuellt minne I mitten av 1960-talet utvecklade andra leverantörer, inklusive IBM, RCA och General Electric maskiner som stödde virtuellt minne, med operativsystem orienterade mot tidsdelning; IBM stödde inte virtuellt minne i maskiner avsedda för allmän databehandling fram till 1972.

När en deskriptor refereras, kontrollerar hårdvaran p-biten. Om det är 1 finns data i minnet på den plats som anges i adressfältet. Om p-biten är 0, är ​​datablocket inte närvarande och ett avbrott (p-bit avbrott ) höjs och MCP- kod matas in för att göra blocket närvarande. I detta fall, om adressfältet är 0, har datablocket inte allokerats (init p-bit) och MCP:n söker efter ett ledigt block vars storlek anges i längdfältet.

Det sista p-bitsscenariot är när p-biten är 0, vilket indikerar att data inte finns i minnet, men adressen är icke-noll, vilket indikerar att data har allokerats och i detta fall representerar adressen en diskadress i det virtuella minnesområdet på disken. I detta fall höjs ett p-bit-avbrott och det noteras som en "annan" p-bit.

B5000, B5500 och B5700

B5000 var den första deskriptorbaserade datorn. Varje deskriptor har en flagga (bit 0) på 1. Datadeskriptorer innehåller en 15-bitars lagringsadress och en 10-bitars storlek, liksom de flesta I/O-deskriptorer. Programbeskrivningar och externa resultatbeskrivningar har en 15-bitars adress men inget storleksfält.

B5x00 Programbeskrivningar

Programdeskriptorer används för att definiera programsegment. Antingen ett Operand-anrop eller ett Descriptor-anrop som hänvisar till en Program Descriptor kommer att orsaka ett subrutinsamtal om närvarobiten är 1, annars kommer det att orsaka ett närvaroavbrott.

B5x00 Programbeskrivningar
0 1 2 3 4 5 6 7 8-17 18-32 33-47
Flagga jag Närvaro jag Läge A Adress
1 1
0=inte i minnet 1=i minnet
1
0=ord 1=tecken

0=argument krävs inte 1=argument krävs

Datadeskriptorer

Datadeskriptorer hänvisar antingen till ett datablock som finns i minnet (P=1) eller till ett datablock som måste läsas in i minnet (P=0), beroende på värdet på närvarobiten. Antingen ett Operand-anrop eller ett Descriptor-anrop som hänvisar till en Data Descriptor kommer att kontrollera närvarobiten och storleksfältet; om närvarobiten är 0 kommer ett närvaroavbrott att inträffa; om storleksfältet inte är noll måste det andra ordet i stacken vara inom intervallet, annars kommer ett indexavbrott att inträffa.

B5x00 Data Descriptors
0 1 2 3-7 8-17 18 19 20 21-32 33-47
Flagga jag Närvaro Storlek jag C Adress
1 0
0=inte i minnet 1=i minnet

Reserverad för MCP

Reserverad för MCP

0=Flytande 1=Heltal

Reserverad för MCP

I/O-beskrivningar

B5x00 I/O-beskrivningar
0 1 2 3-7 8-17 18-32 33-47
Flagga jag
Alternativ extern
Enhet Storlek
Enhetsberoende _
Adress
1 1
0=skriv 1=läs

Externa resultatbeskrivningar

En extern resultatbeskrivning innehåller I/O-beskrivningen som används för att initiera operationen med några fält ersatta.

B5x00 Externa resultatbeskrivningar
0 1 2 3-7 8-25 26-32 33-47
Flagga jag
Alternativ extern
Enhet Irrelevant
Enhetsberoende _
Adress
1 1
0=skriv 1=läs

felförhållanden _

sista platsen

B6500, B7500 och efterföljare

Deskriptorer beskriver datablock. Varje deskriptor innehåller ett 20- bitars adressfält som refererar till datablocket. Varje block har en längd som lagras i deskriptorn, även 20 bitar. Storleken på data anges också, som är 4-, 6-, 8- eller 48-bitars data i ett trebitarsfält.

Den första datorn med denna arkitektur var B6500. i den implementeringen var innebörden av de olika statusbitarna:

  • Bit 47 – närvarobiten (P-bit)
  • Bit 46 – Kopieringsbiten
  • Bit 45 – Den indexerade biten
  • Bit 44 – Den segmenterade biten
  • Bit 43 – Den läsbara biten

I senare implementeringar utvecklades dessa statusbitar för att hålla jämna steg med växande minnesstorlekar och fick insikter.

Användning i kompilatorer

I ALGOL är gränserna för en array helt dynamiska, kan tas från värden som beräknas vid körning, till skillnad från i Pascal där storleken på arrayer är fixerad vid kompilering. Detta är den största svagheten hos Pascal enligt definitionen i dess standard, men som har tagits bort i många kommersiella implementeringar av Pascal, särskilt Burroughs-implementeringarna (både University of Tasmania- versionen av Arthur Sale och Roy Freak, och implementeringen på Burroughs Slice av Matt Miller et al.)

I ett program i Burroughs-miljön tilldelas en array inte när den deklareras, utan bara när den berörs för första gången – sålunda kan arrayer deklareras och omkostnaden för allokering av dem undvikas om de inte används.

behövs inte systemanrop på lågnivå minnesallokering som malloc -klassen av anrop för C och Unix – arrayer allokeras automatiskt efter användning. Detta besparar programmeraren den stora bördan att fylla program med minneshanteringens felbenägna aktivitet, vilket är avgörande i stordatorapplikationer .

Vid portering av program på lägre nivåspråk som C, hanteras C-minnesstrukturen genom att göra sin egen minnesallokering inom ett stort allokerat B5000-block – sålunda kan säkerheten för resten av B5000-systemet inte äventyras av felaktiga C- program . Faktum är att många - arkitekturen buffertöverskridanden i uppenbarligen annars korrekt körande C-program har fångats när de porterats till B5000 . C, liksom Pascal, implementerades också med Slice-kompilatorsystemet (som, liksom LLVM , använder en gemensam kodgenerator och optimerare för alla språk). C-kompilatorn, runtime-systemet, POSIX -gränssnitt, samt en port av många Unix-verktyg gjordes av Steve Bartels. En Eiffel- kompilator utvecklades också med hjälp av Slice.

För objektorienterade program som kräver mer dynamiskt skapande av objekt än B5000-arkitekturen, allokeras objekt bäst inom ett enda B5000-block. Sådan objektallokering är högre nivå än C:s malloc och implementeras bäst med en modern effektiv sophämtare .

Integration i minnesarkitektur

Adressfältet i B5000 är bara 15 bitar, vilket innebär att endast 32K ord (192KB) minne kan adresseras av deskriptorer. B6500 utökade detta till 20 bitar eller 1 Meg-ord (6MB). Vid mitten av sjuttiotalet var detta fortfarande en betydande begränsning av arkitekturen. För att övervinna detta implementerades två lösningar:

  1. Swapper – den här lösningen implementerar faktiskt ytterligare ett lager ovanpå minneshanteringen, och flyttar stora kluster av relaterade data in och ut ur minnet på en gång.
  2. ASN – denna lösning gör att fysiskt mer minne kan konfigureras i ett system, uppdelat i separat adresserbara bitar. Denna arkitektur blev känd som ASN-minne (Address Space Number). Minnet är logiskt uppdelat i två områden, som tilldelar adresser med lågt minne till ett globalt adressutrymme för operativsystemet och stödprogram och höga minnesadresser till flera parallella lokala adressutrymmen för enskilda program. Adressutrymmen är numrerade, noll anger Global, 1..n anger lokala adressutrymmen. Program som delar data placeras automatiskt i samma adressutrymme.

Inga programkodändringar behövdes för att dessa funktioner skulle användas. Båda lösningarna kan till och med kombineras, men så småningom växte MCP-minneskraven och kraven på programdatadelning över den maximala storleken på själva adressutrymmena.

Med tillkomsten av A-serien i början av 1980-talet ändrades innebörden av detta fält för att innehålla adressen till en masterdeskriptor, vilket innebär att 1 megabyte datablock kan allokeras, men att maskinminnet kan utökas kraftigt till gigabyte eller kanske terabyte. Denna arkitektur fick namnet ASD-minne (Advanced Segment Descriptors). Detta krävde en ny gemensam mikrokodspecifikation, kallad Beta. Den främsta visionären bakom ASD-minne är John McClintock. Senare utökades 3-bitars minnestaggen till en 4-bitars specifikation, vilket gjorde att segmentbeskrivningen kunde växa från 20 till 23 bitar i storlek, vilket gjorde att ännu mer minne kunde adresseras samtidigt. Denna mikrokodspecifikation blev känd som nivå Gamma.

Minneshantering

En annan betydande fördel realiserades för virtuellt minne. I B5000-designen, om ett datablock rullades ut, behövde alla deskriptorer som refererade till det blocket hittas för att uppdatera närvarobiten och adressen. Med huvuddeskriptorn behöver bara närvarobiten i masterdeskriptorn ändras. MCP:n kan också flytta runt block i minnet för komprimering och behöver bara ändra adressen i huvuddeskriptorn.

En skillnad mellan B5000 och de flesta andra system är att andra system huvudsakligen använde pagat virtuellt minne, det vill säga sidor byts ut i fasta bitar oavsett strukturen på informationen i dem. B5000 virtuellt minne fungerar med segment av varierande storlek enligt beskrivningarna.

När minnet är fyllt till en viss kapacitet, anropas en OS-process som kallas "Working Set Sheriff" för att antingen kompaktminna eller börja flytta segment ur minnet. Den väljer kodsegment först, eftersom dessa inte kan ändras och kan laddas om från originalet i kodfilen, så behöver inte skrivas ut, och sedan datasegment som skrivs ut till den virtuella minnesfilen.

P-bitars avbrott är också användbara för att mäta systemets prestanda. För förstagångsallokeringar indikerar 'init p-bitar' ett potentiellt prestandaproblem i ett program, till exempel om en procedur som allokerar en array anropas kontinuerligt. Att ladda om block från virtuellt minne på disk kan avsevärt försämra systemets prestanda och är inte fel på någon specifik uppgift. Det är därför många av dagens datorer kan få ökad systemprestanda genom att lägga till minne. På B5000-maskiner indikerar "andra p-bitar" ett systemproblem, som kan lösas antingen genom att bättre balansera datorbelastningen över dagen eller genom att lägga till mer minne.

Därför hjälper Burroughs stora systemarkitektur till optimering av både enskilda uppgifter och systemet som helhet.

Buffertspillskydd

Den sista och kanske viktigaste punkten att notera om deskriptorer är hur de påverkar de kompletterande begreppen systemsäkerhet och programkorrekthet. Ett av de bästa verktygen en hackare har för att kompromissa med dagens operativsystem är buffertspillet. C, i synnerhet, använder det mest primitiva och felbenägna sättet att markera slutet på strängar, genom att använda en nollbyte som en sentinel för strängen i själva dataströmmen.

Pekare implementeras på B5000 av indexerade deskriptorer. Under indexeringsoperationer pekare vid varje inkrement för att säkerställa att varken käll- eller destinationsblocken är utanför gränsen. Under en skannings- eller ersättningsoperation kontrolleras mekanismerna som används för att läsa eller kopiera stora minnesblock, både källa och destination, vid varje ordsteg för en giltig minnestagg. Varje minnessegment begränsas av tagg 3-ord, vilket skulle göra att en sådan operation misslyckas. Varje minnessegment som innehåller integritetskänslig data, såsom programkod, lagras i tagg 3-ord, vilket gör en okontrollerad läsning – än mindre modifiering – omöjlig. Således kan en betydande källa till programfel upptäckas tidigt innan programvaran börjar produceras, och en mer betydande klass av attacker mot systemsäkerhet är inte möjlig.

Anteckningar