BIOS

BIOS () on tietokoneohjelma, joka etsii ja lataa käyttöjärjestelmän keskusmuistiin sekä käynnistää sen tietokoneen käynnistyessä. BIOS hoitaa myös matalan tason kommunikoinnin tietokonelaitteiston kanssa ja laitteiston hallinnan, joka vähimmillään on tuki näppäimistölle ja alkeellinen tuki näytölle ja levylle jolta BIOS ladataan. BIOS on usein kirjoitettu suorittimen assembly-kielellä.
Termi esiintyi ensimmäisen kerran Gary Kildallin kehittämässä CP/M-käyttöjärjestelmässä, jossa se kuvaili sitä osaa käyttöjärjestelmästä, joka ladattiin käynnistyksen aikana ja joka kommunikoi suoraan laitteiston kanssa. CP/M:ssä BIOS muodosti rajapinnan eri valmistajien laitteiston ja käyttöjärjestelmän välille. PC-DOSissa ja MS-DOSissa tiedosto IBMBIO.COM tai IO.SYS sisältää CP/M:n BIOSia vastaavat toiminnallisuuden. MS-DOSissa useimmat kehittyneemmät ohjelmat kuitenkin ohittavat kokonaan BIOSin tarjoamat palvelut, ja käyttävät laitteistoa suoraan, esim. kirjoittavat suoraan näyttömuistiin tulostuskutsujen sijaan.
Aikaisemmin BIOS tallennettiin usein ROM-muistiin, mutta nykyaikaisissa tietokoneissa BIOS on yleensä tallennettu tietokoneen emolevyllä olevalle flash-muistille tietokoneen valmistuksen yhteydessä. Flash-muistilla oleva BIOS on käyttäjän päivitettävissä tarvittaessa.
Nykyaikaisissa tietokoneissa BIOSin (nk. ”Legacy BIOS”) tehtävä on lähinnä toimia tukena vanhemmille käyttöjärjestelmille, kuten MS-DOSille. Useimmat uudet käyttöjärjestelmät, kuten Microsoft Windows ja Linux, sisältävät omat alustus- ja käyttörutiininsa kaikille oheislaitteille, eli laitteisto valmistellaan käyttökuntoon kahdesti käynnistyksen aikana, BIOSin ja sitten käyttöjärjestelmän kautta.
Nykyisissä tietokoneissa BIOS on usein korvattu kokonaan UEFI-järjestelmällä. Yksi UEFI:n vaihtoehdoista on Open Firmware -spesifikaatio, joka ei ole rajattu PC-laitteisiin. On myös olemassa avoimen lähdekoodin projekti coreboot, jonka tarkoituksena on korvata perinteinen suljetun lähdekoodin BIOS. Corebootissa on myös BIOS-yhteensopivat ajonaikaiset palvelut.
Historia.
IBM PC:ssä BIOS oli keskeinen osa. IBM:n alkuperäisen suunnitelman mukaan ROM-muistissa sijaitseva BIOS sisälsi palvelut laitteiston käyttöön.
BIOS kloonattiin takaisinmallinnuksella, ja useat valmistajat toivat markkinoille IBM PC -yhteensopivat tietokoneet.
PC:n BIOS oli sidottu x86-arkkitehtuuriin ja toimi 16-bittisessä "real mode" -tilassa. 16-bittisen moodin käyttö oli hidasta ja 32-bittisen "protected mode" -tilan myötä toimintoja tehtiin käyttöjärjestelmän laiteajureihin BIOSin käytön sijaan. BIOSin rooli jäi varhaiseksi käynnistyslataajaksi. Intelin tarvittua vaihtoehtoa IA-64 "Itanium" -arkkitehtuuria varten syntyi EFI. EFI:n käytön tullessa myös x86-arkkitehtuurille se nimettiin UEFI:ksi.
Intel on ilmoittanut aikeesta säilyttää vain UEFI ja jättää pois viimeiset BIOSit vuoteen 2020 mennessä.
Käyttöliittymä.
Biosin alkuperäinen ja eivät sisältäneet interaktiivista käyttöliittymää. Virhekoodit ja viestit näyttäytyivät näytöllä, tai koodisarjatut äänet oli luotu viestittämään virheistä milloin käynnistyksen itsetesti ( tai POST) ei ollut suoriutunut onnistuneesti alustamaan videonäytön sovitinta. Asetukset IBM PC ja XT:ssä asetettiin kytkimillä ja jumppereilla emolevyyn ja . Alkaen 1990-luvun puolesta välistä, BIOS-ROMille tuli tyypilliseksi sisällyttää "BIOS kokoonpano apuohjelma" (BCU[14])  tai "BIOS setup apuohjelma", antaen pääsyn järjestelmään käynnistyksen yhteydessä painamalla tiettyä näppäinyhdistelmää. Tämä ohjelma mahdollisti käyttäjän asettaa järjestelmän kokoonpanoasetuksia, samoin kuin aiemmin asetettiin käyttäen , interaktiivista järjestelmävalikkoa käytettiin näppäimisöllä. Väliaikaisesti, IBM-yhteensopivat PC:t-sisältäen -held kokoonpanoasetukset akkukäyttöisessä RAMissa, käyttivät käynnistettävää kokoonpano-ohjelmaa floppy diskillä (lerppu), ei ROMissa, asettaakseen kokoonpanoasetukset tästä muistista. Lerppu toimitettiin tietokoneen mukana, ja jos se meni hukkaan, järjestelmäasetuksia ei voinut muuttaa. Sama päti yleisesti -väyläisiin tietokoneisiin, jonka kokoonpano-ohjelmaa kutsuttiin nimellä EISA Configuration Utility (ECU).
Moderni -yhteensopiva tietokone tarjoaa setup rutiinin käytännössä olennaisesti muuttumattomana ROM-asukkaan BIOS setupin apuohjelmia 1990-luvun lopulta; käyttäjä voi konfiguroida laitteistovaihtoehtoja käyttäen näppäimistöä videonäytöllä. Moderni Wintel kone voi sisältää BIOS kokoonpanoasetukset flash ROMissa, kenties sama flash ROM joka sisältää BIOSin itsessään.
BIOS-asetukset.
BIOS-asetukset tehdään yleensä tietokoneen käynnistyksen yhteydessä funktionäppäimellä (esim. F2, ESC) aktivoitavassa käyttöliittymässä. UEFI-käynnistys saattaa piilottaa tämän vaihtoehdon kokonaan, jolloin asetuksiin pääsy edellyttää käyttöjärjestelmän asettamista tilaan, jossa BIOS-asetukset tuodaan valittavaksi seuraavalla käynnistyskerralla. Varhaisimmissa IBM PC-yhteensopivissa tietokoneissa BIOSin asetukset säädetään emolevyllä olevilla jumppereilla.
Tyypillisiä asetusvalintoja ovat emolevyn perustoimintojen aktivoiminen ja passivoiminen. Ennen asetusten muuttamista vanhoista valinnoista kannattaa säilyttää tieto.
Tehdyt valinnat tallentuvat erilliseen pysyväismuistiin, minkä jälkeen valittuja arvoja sovelletaan seuraavilla käynnistyskerroilla. Tehdyt valinnat voivat sekoittaa käynnistyksen niin, ettei kuvaa ilmesty tai kone ei käynnisty lainkaan.
Useimmilla emolevyillä nämä tallennusarvot voidaan palauttaa valmistajan oletusarvoihin CMOS clear/reset -toimenpiteellä, mikä edellyttää 
Palautus oletusarvoihin saattaa palauttaa itsestään toimimattomaksi päätyneen tietokoneen toimivuuden.
Käyttöjärjestelmän käynnistys.
BIOS lataa massamuistista, eli kiintolevyltä tai levykkeeltä ensimmäisen sektorin (ns. käynnistyssektori) sisällön muistiosoitteeseen 0:7C00 ja alkaa sen jälkeen suorittamaan ohjelmakoodia kyseisestä osoitteesta. Kiintolevyltä käynnistettäessä sektorin lopussa pitää olla tavut 0x55 ja 0xAA (ns. Boot Sector Signature), mutta levykkeen käynnistyssektorilla kyseisiä tavuja ei tarvitse olla. Levykkeeltä käynnistettäessä BIOS tukee useita eri sektorikokoja, mutta kiintolevyltä käynnistäessä sektorikoko on aina 512 tavua.
Koska 512 tavun (tai kiintolevyjen tapauksessa 510 tavun) tilaan mahtuu vain rajallinen määrä ohjelmakoodia, useimpien käyttöjärjestelmien tapauksessa käynnistyssektori vain lataa enemmän koodia muistiin toisista sektoreista, jonka jälkeen hyppää tuoreeltaan ladattuun koodiin. Usein myös osiotaulu vie tilaa käynnistyssektorilta, jolloin suoritettavaa koodia voi olla vielä vähemmän. Tällaista monivaiheista alkulataajaa kutsutaan englanniksi nimellä ”multi stage bootloader”. Monivaiheinen alkulataaja voi sisältää enemmän koodia ja siinä voi olla varsin edistyneitäkin toimintoja, kuten muistiin ladattavan kernelin aitouden varmentaminen. Käynnistyssektorille on kuitenkin mahdollista mahduttaa alkulataajan perustoiminnot kuten esimerkiksi FAT-tiedostojärjestelmän parseri, jolloin koko alkulataaja voi olla käynnistyssektorilla, eikä monivaiheista alkulatausta välttämättä tarvita - näin toimii esimerkiksi suurin osa DOS-käyttöjärjestelmistä.
BIOS-virus.
BIOS-virus on tietokonevirus, joka tarttuu tietokoneen emolevyllä olevan BIOSin flash-muistiin. BIOSin tartuttavilta viruksilta voi suojautua BIOS-piirin fyysisellä kirjoitussuojauksella. Useimmissa nykyaikaisissa emolevyissä ei ole kuitenkaan mahdollista firmwarepiirin kirjoitussuojaukseen.
Virus sijaitsee emolevyllä, joten virusta ei pysty poistamaan samoin keinoin kuin perinteiset massamuisteissa sijaitsevat virukset (esimerkiksi virustentorjuntaohjelmalla, asentamalla käyttöjärjestelmä uudelleen tai vaihtamalla kiintolevyn käynnistyslohkon). BIOS-viruksia on kehitetty muutamia erityyppisiä, tunnetuimpana esimerkkinä virus nimeltään Meningitis. BIOS-viruksen poisto vaatii koneen Flash-muistissa olevan BIOS-ohjelman uudelleenasennuksen.
Uusin vuonna 2009 ilmaantunut viruslaji on "Persistent BIOS Infection" (”Pysyvä BIOS-infektio”), joka tarttuu koneen virranhallintaan ACPI:iin. Jotta tämä virus voisi asentua koneeseen, sen sisältämän ohjelman ajajalla on oltava koneen pääkäyttäjän oikeudet. "Persistent BIOS Infectionin" saa tilapäisesti estettyä siten, että ottaa koneen Setupissa ACPI:n pois päältä.