Hardware Abstraction Layer (HAL, Hardware Abstraction Layer ) on ohjelmistossa toteutettu abstraktiokerros , joka sijaitsee fyysisen laitteistokerroksen ja tässä tietokoneessa käynnissä olevan ohjelmiston välissä. HAL on suunniteltu piilottamaan laitteistoerot käyttöjärjestelmän ytimen pääosasta, jotta suurta osaa ydintilassa toimivasta koodista ei tarvitse muuttaa, kun se toimii järjestelmissä, joissa on eri laitteisto.
Henkilökohtaisissa tietokoneissa HAL voidaan pohjimmiltaan ajatella emolevyn ajurina , joka sallii korkean tason ohjelmointikielien ohjeiden olla vuorovaikutuksessa matalan tason komponenttien, kuten laitteiston, kanssa.
Windows NT -perheen käyttöjärjestelmissä HAL on olennainen osa koodia, joka toimii ydintilassa ja sijaitsee erillisessä käynnistysmoduulissa, joka ladataan ytimellä. [1] [2] Tämä mahdollistaa saman alkuperäisen Windows NT -ytimen latausohjelman käytön useissa järjestelmissä, joissa on erilaiset I/O-, keskeytys- ja ajastinarkkitehtuurit.
Esimerkiksi SGI Intel x86 -pohjaiset työasemat eivät olleet yhteensopivia IBM PC -yhteensopivien työasemien kanssa , mutta HAL:n ansiosta Windows NT saattoi toimia niissä. Samoin samaa Windows NT -ydintä käytetään sekä nykyaikaisissa järjestelmissä, joissa on APIC -keskeytysohjain , että vanhoissa järjestelmissä, joissa ei ole APIC-tukea.
Windows Vista ja uudemmat ( Windows Server 2008 ja uudemmat palvelimille) tunnistavat automaattisesti, mitä HAL-tasoa tulisi käyttää käynnistyksen yhteydessä. [3]
BSD- , Mac OS X- , Linux- , Solaris- , CP/M- , MS-DOS- ja joissakin muissa kannettavissa käyttöjärjestelmissä on myös HAL, vaikka sitä ei ole nimenomaisesti suunniteltu suorittamaan yllä kuvattuja toimintoja. Joissakin järjestelmissä, kuten Linuxissa, on mahdollisuus lisätä samanlainen kerros, kuten Adeos, työskennellessä. NetBSD - käyttöjärjestelmän ydin tunnetaan laajalti puhtaasta laitteiston abstraktiokerroksesta (HAL), jonka ansiosta se on erittäin kannettava . Osa tätä järjestelmää ovat uvm(9)/ pmap(9), bus_space(9), bus_dma(9)ja muut alijärjestelmät. Suositut väylät, joita käytetään useammassa kuin yhdessä arkkitehtuurissa, kuten ISA , EISA , PCI , PCI-E ja muut, ovat myös abstrakteja, jolloin niille kirjoitetut ohjaimet ovat myös erittäin siirrettävissä minimaalisilla koodimuutoksilla.
"Äärimmäinen" esimerkki HAL:sta löytyy System/38- arkkitehtuureistaja AS/400 . Useimmat tällaisten järjestelmien kääntäjät luovat abstraktin konekoodin . Licensed Internal Code (LIC) kääntää tämän virtuaalikoneen koodin prosessorin sisäiseksi (natiivi) koodiksi ja suorittaa tuloksena olevan sisäisen koodin (lukuun ottamatta kääntäjiä, jotka luovat itse LIC-koodit; nämä kääntäjät eivät ole saatavilla IBM :n ulkopuolella ) . .
Esimerkiksi alkuperäiseen System/38-arkkitehtuuriin käännetty LIC-kerroksen yläpuolella olevat sovellusohjelmistot ja käyttöjärjestelmäohjelmistot toimivat ilman muutoksia tai uudelleenkääntämistä uusimmissa AS/400-järjestelmissä. Tämä huolimatta siitä, että taustalla olevaa laitteistoa on muutettu dramaattisesti; käytössä oli ainakin kolme erityyppistä mikroprosessoria . [neljä]
HAL on alempi taso tietokoneohjelmointikielissä kuin API , koska se on vuorovaikutuksessa suoraan laitteiston kanssa järjestelmän ytimen sijaan , joten HAL vaatii vähemmän suoritinaikaa kuin API. Korkean tason kielet käyttävät usein HAL:eja ja API:ita ollakseen vuorovaikutuksessa alemman tason komponenttien kanssa.
Käyttöjärjestelmät, joissa on HAL, siirretään helposti erilaisille laitteille. Tämä on erityisen tärkeää sulautetuille järjestelmille , joiden on toimittava useilla eri alustoilla.
Käyttöjärjestelmien näkökohdat | |||||
---|---|---|---|---|---|
| |||||
Tyypit |
| ||||
Nucleus |
| ||||
Prosessien hallinta |
| ||||
Muistinhallinta ja osoitus |
| ||||
Lataus- ja alustustyökalut | |||||
kuori | |||||
Muut | |||||
Luokka Wikimedia Commons Wikikirjat Wikisanakirja |