Hårdvaruabstraktionslager

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 9 juli 2021; kontroller kräver 5 redigeringar .

Hardware Abstraction Layer (HAL, Hardware Abstraction Layer ) är ett abstraktionslager implementerat i programvara, placerat mellan det fysiska hårdvarulagret och programvaran som körs på den här datorn. HAL är utformad för att dölja skillnader i hårdvara från huvuddelen av operativsystemets kärna , så att mycket av koden som körs i kärnläge inte behöver ändras när den körs på system med annan hårdvara.

På persondatorer kan HAL i huvudsak ses som en moderkortsdrivrutin , vilket tillåter instruktioner från högnivåprogrammeringsspråk att interagera med lågnivåkomponenter som hårdvara.

I operativsystem i Windows NT- familjen är HAL en integrerad del av koden som körs i kärnläge och finns i en separat startmodul som laddas med kärnan. [1] [2] Detta gör det möjligt att använda samma inbyggda Windows NT kärnladdare på ett antal system med olika I/O-, avbrotts- och timerarkitekturer.

Till exempel var arbetsstationer baserade på SGI Intel x86 inte kompatibla med IBM PC-kompatibla arbetsstationer , men tack vare HAL kunde Windows NT köras på dem. På liknande sätt används samma Windows NT-kärna både på moderna system med en APIC- avbrottskontroller och på äldre system utan APIC-stöd.

Windows Vista och senare ( Windows Server 2008 och senare för servrar) upptäcker automatiskt vilken HAL-nivå som ska användas vid uppstart. [3]

BSD , Mac OS X , Linux , Solaris , CP/M , MS-DOS och vissa andra bärbara operativsystem har också en HAL, även om den inte uttryckligen utformades för att utföra de funktioner som beskrivs ovan. Vissa system, som Linux, har möjlighet att infoga ett liknande lager, som Adeos, medan du arbetar. Operativsystemkärnan NetBSD är allmänt känd för att ha ett rent hårdvaruabstraktionslager (HAL), vilket gör att den är mycket portabel . En del av detta system är uvm(9)/ pmap(9), bus_space(9), bus_dma(9)och andra delsystem. Populära bussar som används på mer än en arkitektur, såsom ISA , EISA , PCI , PCI-E och andra, är också abstraherade, vilket gör att drivrutiner som är skrivna för dem också är mycket portabla med minimala kodändringar.

Ett "extremt" exempel på en HAL finns i System/38- arkitektureroch AS/400 . De flesta kompilatorer för sådana system genererar abstrakt maskinkod . Licenserad intern kod (LIC) översätter denna virtuella maskinkod till den interna (native) koden för processorn den körs på och exekverar den resulterande interna koden (med undantag för kompilatorer som själva genererar LIC:er; dessa kompilatorer är inte tillgängliga utanför IBM ) .

Till exempel, applikations- och operativsystemmjukvara ovanför LIC-lagret kompilerade på den ursprungliga System/38-arkitekturen körs utan modifiering eller omkompilering på de senaste AS/400-systemen. Detta trots att den underliggande hårdvaran har förändrats drastiskt; minst tre olika typer av mikroprocessorer användes. [fyra]

HAL är lägre nivå i datorprogrammeringsspråk än API eftersom det interagerar direkt med hårdvaran istället för systemkärnan , därför kräver HAL mindre CPU-tid än API. Språk på hög nivå använder ofta HAL:er och API:er för att interagera med komponenter på lägre nivå.

Operativsystem som har en HAL portas enkelt till olika hårdvara. Detta är särskilt viktigt för inbyggda system , som måste köras på ett stort antal olika plattformar.

Se även

Anteckningar

  1. Windows NT Hardware Abstraction Layer (HAL) . Microsoft (31 oktober 2006). Hämtad 25 augusti 2007. Arkiverad från originalet 3 mars 2012.
  2. Helen Custer (1993), Inside Windows NT , Microsoft Press 
  3. Russinovich, Mark. E.; Solomon, David A.; Ionescu, Alex. Windows Interns : Inklusive Windows Server 2008 och Windows Vista  . — 5:a. — Redmond, Wash.: Microsoft Press, 2008. - S. 65. - ISBN 978-0-7356-2530-3 .
  4. Soltis, Frank G. Inuti AS/400 : Med AS/400e-serien  . — 2:a. — Loveland, Colo.: Duke Press, 1997. — ISBN 978-1-882419-66-1 .