Redigerer
Linuxkjernen
(avsnitt)
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
== Arkitektur == === Oversikt === {{Utdypende|Fri og åpen programvare|GNU General Public License}} {{Utdypende|Operativsystem|Operativsystemets historie|UNIX System V}} [[Fil:Unix timeline.en.svg|thumb|450px|Stamtreet til Unix og Linux.{{byline|Illustrasjon: Christoph S|13. juli 2009}}]] Linuxkjernen benyttes verden over i [[operativsystem]]et [[Linux]].<ref name="Bovet2005_1"/> Den er [[fri og åpen programvare]], og er således både [[fri programvare]] og [[åpen kildekode]]. Den blir lansert under en [[fri programvarelisens]]: Alle kan fritt bruke, kopiere, studere og forandre den og [[kildekode]]n er åpen slik at folk oppmuntres til å frivillig forbedre den. Dette står i kontrast til [[proprietær programvare]], som er begrenset av [[opphavsrett]] og hvor kildekoden vanligvis er skjult for brukerne. Linuxkjernen er lisensiert under [[GNU General Public License]] versjon 2 (GPLv2), men ikke versjon 3 (GPLv3). Den er ikke en del av [[GNU-prosjektet]] og er heller ikke dette prosjektets offisielle [[operativsystemkjerne]]. Linuxkjernen er en [[Unix-lignende]] operativsystemkjerne. Den har arvet mye fra [[UNIX]], men den følger ikke offisielt [[Single UNIX Specification]] og derfor har [[Open Group]] heller ikke sertifisert den og gitt den [[varemerke]]t «UNIX». Enkelte [[Linuxdistribusjon]]er har imidlertid blitt sertifisert med dette varemerke. Litt forenklet kan vi si at [[FreeBSD]] og beslektede Unix-lignende [[operativsystemer]] er etterfølgere av [[Berkeley Software Distribution]] (BSD), mens Linuxkjernen også har hentet mye fra [[UNIX System V]]. Linuxkjernen har i dag et stort anvendelsesområde. Den anvendes i [[personlig datamaskin|personlige datamaskiner]], [[arbeidsstasjon]]er, [[server|tjenere]] og [[superdatamaskin]]er,<ref name="Bovet2005_7"/>{{#tag:ref|I juni 2019 ble Linuxkjernen kjørt på alle de 500 kraftigste [[superdatamaskin]]er i verden, rangert på listen [[TOP500]] (de to andre benyttet [[AIX]] og [[IBM]] [[POWER7]]).<ref name=top500stats>{{cite web |url=http://www.top500.org/statistics/details/osfam/1 |title=TOP500 Supercomputer Sites: Operating system Family / Linux |publisher=Top500.org|accessdate=2. september 2016}}</ref><ref name="top500-list">{{cite web |url=http://www.top500.org/statistics/sublist/ |title=Sublist Generator |publisher=Top500.org |accessdate=2. september 2016}}</ref> Dette tallet har økt jevnt. I juni 1998 ble Linuxkjernen benyttet på 1 av de 500 raskeste superdatamaskinene; i juni 2000 var dette tallet økt til 28, i juni 2005 til 318, i juni 2010 til 456, i juni 2015 til 489, i november 2016 til 498 og i november 2017 til 500. I november 2018 og i juni 2019 var dette tallet fortsatt 500.<ref name=top500stats/> På topp i november 2016 var den [[kina|kinesiske]] superdatamaskinen [[Sunway TaihuLight]] ved ''National Supercomputer Center'', i [[Wuxi]], [[Jiangsu]], med en ytelse på 93 [[FLOPS|petaflops]]; datamaskinen benyttet 40 960 stk 260-kjerners [[SW26010]] 64-biter [[RISC]] [[mikroprosessor]]er. Den kjører ''Sunway RaiseOS 2.0.5'' som er basert på Linuxkjernen. På 2.-plass var den kinesiske superdatamaskinen [[Tianhe-2]] med en ytelse på 33.86 petaflops; datamaskinen benyttet 32 000 Intel [[Xeon]] E5-2692 12C sammen med 2.200 GHz 48 000 [[Intel Xeon Phi]] 31S1P. Den kjører [[Kylin Linux]]. På 3.-plass var Titan - Cray XK7 fra [[Oak Ridge National Laboratory]] i [[Oak Ridge (Tennessee)|Oak Ridge]], [[Tennessee]], [[USA]]. Maskinen har en ytelse på 17.5 petaflops og består av 560 640 prosessorkjerner med 2.2GHz [[AMD Opteron]] 6274 16C. Det kjører operativsystemet [[UNICOS|Cray Linux Environment]] (CLE). CLE er på sin side basert på [[Compute Node Linux]] og [[SUSE Linux Enterprise Server]]. |group="lower-alpha"|name="superdatamaskiner"}} vanligvis i form av [[Linuxdistribusjon]]er.<ref>{{cite web |title=README |publisher=Linux kernel source tree, git.kernel.org |url=https://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git%3Ba%3Dblob%3Bf%3DREADME%3Bh%3D90a07658ede14840346eee6610648bcf4ec79997%3Bhb%3Df3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b |accessdate=1. august 2016 |archive-date=2012-07-24 |archive-url=https://archive.today/20120724163945/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=README;h=90a07658ede14840346eee6610648bcf4ec79997;hb=f3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b |url-status=yes }}</ref>{{#tag:ref|En [[Linuxdistribusjon]] er et [[operativsystem]] som består av Linuxkjernen, et [[pakkesystem]], programvareverktøy og [[Bibliotek (programvare)|biblioteker]], et [[vindussystem]] (som regel [[vindussystemet X]] eller [[Wayland]]), en [[vindusbehandler]] og et [[skrivebordsmiljø]]. Nettstedet [[DistroWatch]] presenterte den 19. november 2017 en liste over 879 Linuxdistribusjoner og andre frie operativsystemer, aktive så vel som tidligere.<ref>[https://distrowatch.com/search.php?status=All Search Distributions], DistroWatch, 19. november 2017</ref> Det store antall distribusjoner kan grupperes i «familier», som er utgått fra distribusjonene [[Slackware]], [[Debian]], [[Ubuntu (operativsystem)|Ubuntu]], [[Fedora (Linux)|Fedora]], [[Red Hat Enterprise Linux]], [[Gentoo]], [[SUSE Linux]], [[Arch Linux]] og [[Mandriva Linux]].|group="lower-alpha"|name="linuxdistro"}} Linuxkjernen brukes også i [[robotikk]], [[tingenes internett]], [[smarthus]] ([[varme-, ventilasjons- og sanitærteknikk]], [[Smart Grid]], [[smart strømmåler|smarte strømmålere]], lyskontroll etc.) og i [[innebygd system|innebygde systemer]] som [[carputer]]e, [[nettop]]er, [[Ruter (IT)|rutere]], [[trådløs basestasjon|trådløse basestasjoner]], [[hustelefonsentral]]er, [[TV-mottaker]]e, [[smart-TV]]er,<ref>[https://www.linuxtv.org/ Linux TV], linuxtv.org, 26. mai 2016, besøkt 3. august 2016</ref> [[PVR|digitale videopptakere]]<ref>[http://kodi.wiki/view/PVR_recording_software PVR recording software], Kodi, 4. februar 2016</ref> og [[Nettverkstilsluttet datalager|nettverkstilsluttede datalagre]]. Diverse operativsystemer for [[mobilt internettutstyr]], [[notatblokk-PC]]er, [[Nett-PC]]er, [[nettbrett]], [[lesebrett]], [[smarttelefon]]er og [[smartur]] benytter modifiserte Linuxkjerner.{{#tag:ref|Eksempler på slike enheter er [[iPod]] og [[iPhone]] fra [[Apple|Apple Computer]], med [[iPodLinux]] og iPhone Linux ([[iOS]] fra Apple er derimot basert på [[Mac OS X]]). Andre eksempler er [[Android]], [[WebOS]], [[Tizen]], [[Sailfish OS]], [[Maemo]], [[Openmoko Linux]] og [[Ångström (linuxdistribusjon)|Ångström]], så vel som de tidligere operativsystemene [[Familiar Linux]], [[Firefox OS]], [[H5OS]], [[MeeGo]], [[Moblin]], [[OpenZaurus]] og [[Symbian]]. I 2013 var Android blitt det mest utbredte operativsystemet i hele verden.|group="lower-alpha"|name="mobil"}} Linuxkjernen ble skapt av [[Finland|finnen]] [[Linus Torvalds]] (1969–),<ref>{{cite web |last=Richardson |first=Marjorie |date=1. november 1999 |title=Interview: Linus Torvalds |publisher=Linux Journal |url=http://www.linuxjournal.com/article/3655 |accessdate=2. august 2016}}</ref> som lanserte første utviklingsversjon den 17. september 1991.<ref name="History">[http://history-computer.com/ModernComputer/Software/Linux.html Linux] {{Wayback|url=http://history-computer.com/ModernComputer/Software/Linux.html |date=20160710155255 }}, history-computer.com, 2007</ref> Første stabile versjon kom 14. mars 1994. I dag vedlikeholdes den av et [[Brukernettverk|nettverk med brukere]], hvor det inngår en rekke [[multinasjonalt selskap|multinasjonale selskaper]]. I 2015 hadde nesten 12 000 [[programmerer]]e fra omkring 1 200 selskaper bidratt til kjernens utvikling,<ref name="LinuxContributor">{{cite web |date=18. februar 2015 |title=The Linux Foundation Releases Linux Development Report |publisher=[[Linux Foundation]] |url=http://www.linuxfoundation.org/news-media/announcements/2015/02/linux-foundation-releases-linux-development-report |accessdate=1. august 2016 |url-status=dead |archiveurl=https://web.archive.org/web/20160719042639/https://www.linuxfoundation.org/news-media/announcements/2015/02/linux-foundation-releases-linux-development-report |archivedate=2016-07-19 |tittel=Arkivert kopi |besøksdato=2016-08-01 |arkivurl=https://web.archive.org/web/20160719042639/https://www.linuxfoundation.org/news-media/announcements/2015/02/linux-foundation-releases-linux-development-report |arkivdato=2016-07-19 |url-status=død }}</ref><ref name="Corbet2012"/> mens gruppen «amatører» i 2007 stod for 3,9 % av endringene.<ref name="Marti">Don Marti: [http://www.computerworld.com/article/2542300/network-software/linux-contributor-base-broadens.html Linux contributor base broadens], Computerworld, 2. juli 2007</ref> Siden 1996 har utviklingsdiskusjoner foregått daglig på [[Linuxkjernens e-postliste]].<ref name="Love2015"/> Historien om Linuxkjernen er et viktig kapittel i [[operativsystemets historie]]. Denne artikkelen nevner også andre operativsystemer av betydning: [[Windows 3.0]], [[Windows 3.1]], [[Windows 95]], [[Windows 98]], [[Windows NT]], [[OS/2]], [[Klassisk MacOS]], [[Mac OS X]], [[NeXTSTEP]] og [[Novell]] [[NetWare]]. De blir sammenlignet med Linuxkjernen på flere områder, for å skape en større kontekst. Etterhvert har Linuxkjernen blitt endret fra å støtte [[kooperativ fleroppgavekjøring]] til å støtte [[forkjøpsrett (informatikk)|fleroppgavekjøringen med «forkjøpsrett»]]. Den har også blitt utvidet med [[symmetrisk flerprosessering]], [[Tråd (informatikk)|multitråder]], [[bibliotek (programvare)|delte biblioteker]], [[virtuell hukommelse]] og [[behovsbetinget sideveksling]], [[dynamisk lastbare moduler]], støtte for et tyvetalls ulike [[filsystem]]er, avansert støtte for [[datanett]] og kommunikasjon med [[nettverksoperativsystem]]er (deriblant [[Network File System]] (NFS) og [[Netware]]), [[internett]], og støtte for ulike [[Buss (datakommunikasjon)|busser]] for [[periferienhet]]er etter hvert som disse har utviklet seg. Opprinnelig ble den utviklet for [[Intel]]s [[32-biter]] [[mikroprosessor]] [[Intel 80386|80386]]. I årenes løp har den blitt [[Portering|portert]] til de fleste [[datamaskinarkitektur]]er, deriblant [[x86-64]], [[Motorola 68000]], [[SPARC]], [[PowerPC]], [[IBM POWER]], [[MIPS (andre betydninger)|MIPS]], [[PA-RISC]], [[DEC Alpha]], [[SuperH]], [[IBM System z9]], [[Intel Itanium]], [[ARM (prosessorarkitektur)|ARM]] og [[RISC-V]]. Linuxkjernen er skrevet nesten utelukkende i [[programmeringsspråk]]et [[C (programmeringsspråk)|C]] (med noen [[GNU Compiler Collection|GNU C]] syntaksutvidelser)<ref name="coding style">[https://www.kernel.org/doc/Documentation/CodingStyle Linux kernel coding style], kernel.org, Documentation, 28. juli 2016</ref> og [[AT&T]] [[assembler]].<ref name="coding style"/> Linuxkjernen har vokst fra 8 413 linjer med C-kode i første utviklingsversjon, som ble lansert 17. september 1991, til å omfatte 26 552 127 linjer med C-kode i versjon 5.2.0 som ble lansert 7. juli 2019. Den 23. desember 2018 var det 104 258 registrerte brukere på 62 446 registrerte datamaskiner ifølge nettstedet [[Linux Counter]].<ref name="linuxcounter">[https://www.linuxcounter.net/statistics LinuxCounter] {{Wayback|url=https://www.linuxcounter.net/statistics |date=20170615234801 }}, besøkt 21. september 2018</ref> === Monolittisk kjerne === {{Utdypende|Monolittisk kjerne|mikrokjerne|MINIX}} {{Utdypende|GNU Mach|GNU Hurd|debatten mellom Tanenbaum og Torvalds}} [[Fil:OS-structure.svg|thumb|450px|Strukturen til [[operativsystem]]er som benytter henholdsvis [[monolittisk kjerne|monolittiske kjerner]] og [[mikrokjerne]]r.{{byline|Illustrasjon: Wooptoo|23. juni 2008}}]] Linuxkjernen er en [[monolittisk kjerne]]. Dette betyr at hele operativsystemet kjører i [[kjerne (operativsystem)|operativsystemkjernen]]. I [[mikrokjerne]]r opererer derimot det absolutt minste antall tjenester innenfor kjernen, og andre tjenester bygges lag på lag omkring den. [[Unix]] og [[Unix-lignende]] [[operativsystem]]er benytter stort sett monolittiske kjerner, som er den tradisjonelle arkitekturen. Mikrokjerner oppstod i 1980-årene som en reaksjon på utfordringer som tradisjonelle kjerner hadde i møtet med den teknologiske utvikling. Stadige teknologiske forandringer gjorde at det stadig måtte utvikles nye [[driver|utstyrsdrivere]], nye [[Protokoll (datamaskiner)|nettverksprotokoller]] og nye [[filsystem]]er, såvel som andre deler av operativsystemene. I [[distribuert operativsystem|distribuerte operativsystemer]] var dette spesielt følbart, fordi [[datanett]] kunne bestå av mange ulike [[datamaskinarkitektur]]er, som hver enkelt hadde sin egenarter og gjennomgikk sin egen særegne utvikling, noe som igjen førte til enda mer arbeid for utviklere. Mikrokjerner er implementert ved hjelp av [[modulær programmering]]: Utstyrsdrivere, nettverksprotokoller, filsystemer og flere ting er fjernet fra kjernen. De er isolert i moduler utenfor kjernen, hvor de er lettere å håndtere og modifisere. Forløperen til Linuxkjernen var [[MINIX]], og i begynnelsen var Linuxkjernen avhengig av MINIX under [[oppstart]]. MINIX ble opprinnelig utviklet av [[Andrew S. Tanenbaum]] ved [[Vrije Universiteit Amsterdam]], og første versjon ble lansert i 1987. MINIX er et [[POSIX]]-kompatibelt Unix-lignende operativsystem med en mikrokjerne. Den 29. januar 1992 startet Tanenbaum en [[debatten mellom Tanenbaum og Torvalds|debatt]] på [[Usenet]]s [[diskusjonsgruppe]] <code>[[comp.os.minix]].</code> Der hevdet han at mikrokjerner var overlegen i forhold til monolittiske kjerner, og at Linuxkjernen allerede før lanseringen i 1992 var foreldet. Debatten startet saklig, men utviklet seg etterhvert til en ''«[[Flaming (Internett)|flame war]]»''. Emnet ble tatt opp igjen den 9. mai 2006, og den 12. mai 2006 forklarte Tanenbaum på nytt sin holdning til monolittiske kjerner. Eksempler på mikrokjerner i distribuerte operativsystemer er [[Amoeba 809]], [[Eden (operativsystem)|Eden]], [[Mach (operativsystemkjerne)|Mach]] og [[V system]]. De prosessbaserte distribuerte og Unix-lignende operativsystemene [[LOCUS 845]], [[Accent]] og [[QNX]] hadde derimot en monolittisk kjerne. Windows NT var implementert rundt en mikrokjerne i versjonene 3.1, 3.5 og 3.51. I versjon 4.0 og senere har kjernen vært monolittisk. OS/2, NeXTSTEP, Novell NetWare og det distribuerte operativsystemet [[Plan 9]] benyttet [[hybridkjerne]]r; det samme gjelder Mac OS X. Klassisk MacOS hadde en monolittisk kjerne på [[Motorola 68000-serien]], men benyttet en såkalt [[mikrokjerne|nanokjerne]] (eller «picokjerne»){{#tag:ref|Benevnelsen ''picokjerne'' er noen gang blitt brukt for å ivektlegge den lille størrelsen på en [[mikrokjerne]]. Begrepet ''nanokjerne'' ble første gang brukt av Jonathan S. Shapiro i publikasjonen [http://dl.acm.org/citation.cfm?id=692230 The KeyKOS Nanokernel Architecture] i april 1992. Det var en [[sardonisk]] respons på mikrokjernen [[Mach (operativsystemkjerne)|Mach]], som Shapiro betraktet som monolittisk, ustrukturert og tregere enn de operativsystemkjerner som den hadde til hensikt å erstatte. Senere bruk har som regel ikke oppfattet dette poenget, og begrepene ''picokjerne'' og ''nanokjerne'' har vanligvis (for eksempel i [[Mac OS X]]) samme betydning som mikrokjerne.|group="lower-alpha"|name="nanokjerne"}} på [[PowerPC]]. Mikrokjernen [[GNU Mach]] er [[GNU-prosjektet]]s offisielle operativsystemkjerne. Den har sin forløper i mikrokjernen Mach fra [[Carnegie Mellon University]], og er kjernen i [[GNU Hurd]]. Selv om [[Debian]] offisielt er en [[Linuxdistribusjon]], finnes det en uoffisiell avart ([[Debian GNU/Hurd]]) som kjører GNU Hurd i stedet for Linuxkjernen. Det samme gjelder [[Arch Hurd]] (som er basert på [[Arch Linux]]), [[Guix System Distribution]], tidligere avarter av Bee og [[Gentoo]], og den tidligere distribusjon [[NixOS]]. Linuxkjernen er ikke en del av GNU-prosjektet, men er blitt utviklet ved hjelp av [[GCC|GNU C]] og andre utviklingsverktøy fra GNU. Som allerede nevnt, er den også lisensiert under GNU General Public License versjon 2 (GPLv2), men ikke versjon 3 (GPLv3). === Beskyttelsesringer === {{utdypende|vmlinux|beskyttelsesring|brukermodus}} [[Fil:Priv rings.svg|300px|thumb|right|Beskyttelsesringer for [[x86-arkitektur|x86]] i [[beskyttet modus]].{{byline|Illustrasjon: Hertzsprung|24. august 2007}}]] [[Fil:Linux kernel map.png|thumb|300px|Kart over Linuxkjernen.{{byline|Illustrasjon: Conan|27. september 2008}}]] [[Fil:Linux kernel ubiquity.svg|thumb|300px|Linuxkjernen støtter ulike [[datamaskinarkitektur]]er, og gir en felles plattform for å kjøre [[fri og åpen programvare|fri og åpen]] så vel som [[proprietær programvare]].{{byline|Illustrasjon: ScotXW|20. august 2013}}]] Moderne mikroprosessorer har [[beskyttelsesring]]er, som beskytter data og funksjonalitet fra feil. I [[Linux]] gjenspeiles de i skillet mellom [[brukermodus]] og kjernemodus. Eksempler på programmer som kjører i brukermodus er [[applikasjonsprogramvare]], [[vindussystem]]ene [[vindussystemet X|X]], [[Wayland]], [[Mir (programvare)|Mir]] og en rekke [[skrivebordsmiljø]]er. De har ikke lov til å utføre maskinvarerelaterte kommandoer direkte, men sender [[systemkall]] til Linuxkjernen som utfører disse kommandoene. Linuxkjernen er således den betrodde delen av Linux, som utfører maskinvarerelaterte kommandoer direkte. En slik beskyttelse sørger for [[feiltoleranse]], og hindrer at [[programvarefeil]] i en [[nettleser]] eller et annet brukerprogram krasjer hele operativsystemet. [[Windows 95]] og [[Windows 98]] manglet til sammenligning slik feiltoleranse. Der kunne for eksempel programvarefeil i et [[videospill]] havarere hele datasystemet. [[OS/2]] og [[Windows NT]] på den andre siden, utnyttet i likhet med Linux [[Beskyttet modus|den beskyttede modus]] i x86-arkitekturen hvor disse beskyttelsesringene blir tatt i bruk. Beskyttelsesringene gir ulike ''prioritetsnivåer'', hvor operativsystemkjernen har større ''prioritet'' enn brukerprogrammer, dersom de to kommer i konflikt. Linuxkjernen kjører i prioritetsring 0 (høyest prioritet), mens de øvrige prosesser kjører i prioritetsring 3. Den monolittiske kjernen gjør at hele Linuxkjernen kjører i ring 0. En mikrokjerne ville ha ført til at kun det absolutt minste antall tjenester hadde kjørt i ring 0, og at de resterende delene av operativsystemkjernen kjørte i ring 3. Dette ville igjen ha svekket ytelsen, fordi ring 3 er tregere enn ring 0, og fordi ulike deler av kjernen hadde vært nødt til å sende systemkall til hverandre i stedet for å utføre kommandoer direkte. Mikrokjerner er enklere å modifisere, men prisen for modulariteten er en svekket ytelse. Figuren nedenfor viser de ulike lagene i Linux. Den viser også skillet mellom brukermodus og kjernemodus. Utstyrsdrivere og kjerneutvidelser for [[Skedulering (informatikk)|skedulering]], [[interprosesskommunikasjon]], [[minnehåndtering]], virtuelle filer, [[datanett]], Fieldbus og generiske tellere kjører i operativsystemkjernen (ring 0), med full tilgang til maskinvaren. Dette gjelder også komponentene [[Advanced Linux Sound Architecture]], [[Security-Enhanced Linux]] (SELinux), etc. Nevneverdige unntak er [[Virtuelt filsystem|virtuelle filsystemer]] som er basert på ''[[Filesystem in Userspace]]'' (FUSE) og ''character in userspace'' (CUSE), såvel som deler av UIO (utstyrsdrivere i brukermodus).<ref>{{cite web | url = https://lwn.net/Articles/308445/ | title = Character devices in user space | date = 25. november 2008 | accessdate = 7. mai 2015 | author = Jake Edge | publisher = [[LWN.net]] }}</ref><ref>{{cite web | url = https://lwn.net/Articles/232575/ | title = UIO: user-space drivers | date = 2. mai 2007 | accessdate = 7. mai 2015 | author = Jonathan Corbet | publisher = [[LWN.net]] }}</ref> [[Vindussystemet X]] og [[Wayland]], som de fleste bruker sammen med Linux, kjører i brukermodus. Til forskjell fra tradisjonelle monolittiske kjerner, kan utstyrsdrivere konfigureres som [[lastbar kjernemodul|lastbare kjernemoduler]], som innlastes og avlastes mens systemet kjører. Utstyrsdrivere også under visse omstendigheter bli deaktivert og aktivert dynamisk, for å håndtere [[interrupt|maskinvareavbrudd]] og for bedre å støtte [[symmetrisk flerprosessering]].<ref name="lwn-22912">{{cite web | url = https://lwn.net/Articles/22912/ | title = Driver porting: the preemptible kernel | date = 24. februar 2003 | accessdate = 7. mai 2015 | author = Jonathan Corbet | publisher = [[LWN.net]] }}</ref> Linuxkjernen mangler et [[Binærkompatibilitet|binært applikasjonsgrensesnitt]] (ABI).<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |title=The Linux Kernel Driver Interface |last=Kroah-Hartman |first=Greg |authorlink=Greg Kroah-Hartman |url-status=dead |archiveurl=https://web.archive.org/web/20150426153026/https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |archivedate=2015-04-26 |tittel=Arkivert kopi |besøksdato=2015-04-10 |arkivurl=https://web.archive.org/web/20150426153026/https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |arkivdato=2015-04-26 |url-status=død }}</ref> Maskinvaren er også en del av filsystemets hierarki. Utstyrsdrivere har et grensesnitt til brukerapplikasjoner gjennom en definisjon i [[Mappe (filsystem)|katalogene]] <code>[[utstyrsfil|/dev]]</code> eller <code>[[sysfs|/sys]]</code>.<ref name="tldp file">{{cite web |url=http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/index.html |title=Linux Filesystem Hierarchy: Chapter 1. Linux Filesystem Hierarchy |last=Nguyen |first=Binh |date=30. juli 2004 |publisher=The Linux Documentation Project |accessdate=28. november 2012}}</ref> Prosessinformasjon blir definert i katalogen <code>[[procfs|/proc]].</code><ref name="tldp file" /> {| class="wikitable" |--style="background-color: #FFFDD0;" ! rowspan=3 | Brukermodus | colspan=1 | '''Applikasjoner''' | colspan=5 | [[Bash]], [[LibreOffice]], [[GIMP]], [[Blender (programvare)|Blender]], [[0 A.D.]], [[PostgreSQL]], [[MySQL]], [[MariaDB]], [[Mozilla Thunderbird]], [[Mozilla Firefox]], etc. |-style="background-color: #def;" | '''Lavnivå systemkomponenter''' | colspan=1 | '''[[Daemon (programvare)|Daemoner]]''':<br />''[[systemd]], [[runit]], logind, networkd, [[PulseAudio|soundd]], …'' | colspan=1 | '''[[Skrivebordsmiljø]]''':<br /> ''[[GNOME]]'', ''[[KDE Software Compilation|KDE]]'', ''[[Xfce]]'', ''[[LXDE]]'', ''[[Sugar (programvare)|Sugar]]'', ''[[MATE (programvare)|MATE]]'', ''[[Cinnamon (programvare)|Cinnamon]]'', ''[[Enlightenment (programvare)|Enlightenment]]'', ''[[LXQt]]'', ''[[Budgie (skrivebordsmiljø)|Budgie]]''<br /><br />'''[[Vindussystem]]''':<br />''[[X11]], [[XFree86]], [[Wayland]], [[Mir (programvare)|Mir]], [[SurfaceFlinger]] (Android)'' | colspan=2 | '''Andre biblioteker:'''<br />''[[GTK+]], [[Qt]], [[Enlightenment Foundation Libraries|EFL]], [[SDL]], [[Simple and Fast Multimedia Library|SFML]], [[Fast Light Toolkit|FLTK]], [[GNUstep]]'', etc. | colspan=1 | '''Grafikk''':<br />''[[Mesa (datagrafikk)|Mesa]]'', ''[[AMD Catalyst]]'', … |- style="background-color: #dfd"" | colspan=1 | '''[[C-standardbiblioteket]]''' | colspan=5 | open(), exec(), sbrk(), socket(), fopen(), calloc(), … (omkring 2000 subrutiner)<br />''[[GNU C Library|glibc]]'' er kompatibelt med [[POSIX]] og [[Single UNIX Specification]] (SUS), ''[[uClibc]]'' var for innebygde systemer, ''[[Bionic (programvare)|bionic]]'' er skrevet for [[Android (operativsystem)|Android]], etc. |-style="background-color: #ffb7b7;" ! rowspan=6 | '''Linuxkjernen (kjernemodus)''' | colspan=8 |[[stat (systemkall)|stat]], [[splice (systemkall)|splice]], [[dup (systemkall)|dup]], [[read (systemkall)|read]], [[open (systemkall)|open]], [[ioctl]], [[write (systemkall)|write]], [[mmap]], [[close (systemkall)|close]], <code>[[exit (systemkall)|exit]],</code> [[unlink (systemkall)|unlink]], [[Fork (Unix)|fork]], [[Exec (systemkall)|exec]], etc.<br />(omkring 380 POSIX/SUS-kompatible [[systemkall]]) |- style="background-color: #ffb7b7;" | colspan=2 | Delsystem for<br />Fieldbus *) | colspan=4 | Delsystem for<br />Generiske tellere *) |- style="background-color: #ffb7b7;" | Delsystem for<br />[[Skedulering (informatikk)|skedulering]] | Delsystem for<br />[[interprosesskommunikasjon]] | Delsystem for<br />[[minnehåndtering]] | Delsystem<br />for virtuelle filer | colspan=2 | Delsystem for [[datanett|nettverk]] |- style="background-color: #ffb7b7;" | colspan=8 | Andre komponenter: [[Advanced Linux Sound Architecture|ALSA]], [[Direct Rendering Infrastructure|DRI]], [[evdev]], [[Logical Volume Manager (Linux)|LVM]], [[device mapper]], [[Linux Network Scheduler]], [[Netfilter]]<br />[[Linux Security Modules]]: ''[[Security-Enhanced Linux|SELinux]]'', ''[[TOMOYO Linux|TOMOYO]]'', ''[[AppArmor]]'', ''[[Smack (Linux sikkerhetsmodul)|Smack]]'' |- style="background-color: #ffd99c;" ! colspan=7 | Maskinvare ([[mikroprosessor]], [[RAM|hovedminne]], [[datalager]], etc.) |} <sup>*)</sup> Tilføyd i versjon 5.2 === Fleroppgavekjøring med «forkjøpsrett» === {{utdypende|Kooperativ fleroppgavekjøring|forkjøpsrett (informatikk){{!}}fleroppgavekjøring med «forkjøpsrett»|forkjøpsrett i operativsystemkjernen}} [[Fil:Kde 3.5.5 - 003.png|thumb|[[Fleroppgavekjøring]] i en [[Frankrike|fransk]] versjon av [[Debian]] med [[skrivebordsmiljø]]et [[KDE]] 3.3.5. Nettleseren [[Konqueror]] kjører samtidig med [[Liste over KDE-programmer|Amarok]] og KwikDisk. Det vises tre instanser av nettleseren, en av dem brukes som [[filbehandler]] og den andre til bildefremvisning.{{byline|Foto: William Scot|9. april 2007}}]] I likhet med tradisjonell Unix (og de fleste av dagens operativsystemer) har Linuxkjernen støtte for [[fleroppgavekjøring]]: Flere programmer kan utføres tilsynelatende samtidig på en og samme datamaskin. Frem til versjon 2.4, som ble lansert 4. januar 2001, benyttet Linuxkjernen [[kooperativ fleroppgavekjøring]]. Dette betyr at programmer samarbeider om å dele mikroprosessor-tid mellom seg. En prosess fortsetter å utføre instruksjoner alene på mikroprosessoren helt til den overlater kontrollen til en annen prosess. Det er opp til programmererne å sørge for at programmene gir fra seg tilgangen til mikroprosessoren når de ikke lenger foretar seg noe nyttig. Dersom et program henger seg opp eller utfører langvarige operasjoner uten å slippe kontrollen til andre prosesser, kan hele datasystemet gå i stå. Som kontrast har Unix støttet den mer sofistikerte [[forkjøpsrett (informatikk)|fleroppgavekjøringen med «forkjøpsrett»]]. Det har «forkjøpsrett», makt til å avbryte prosessen, og senere gi det andre oppgaver. Slik at den i mellomtiden ikke sperrer andre programmer. Linux støttet dette fra starten, men bare overfor programmer i brukermodus.<ref>{{cite book |last1=Bovet |first1=Daniel P. |last2=Cesati |first2=Marco |date=oktober 2000 |title=Understanding the Linux Kernel |url=http://oreilly.com/catalog/linuxkernel/chapter/ch10.html |publisher=[[O'Reilly Media|O'Reilly]] |chapter=Chapter 10: Process Scheduling |isbn=0-596-00002-2 |accessdate=15. oktober 2011 |archiveurl=https://web.archive.org/web/20140921000832/http://oreilly.com/catalog/linuxkernel/chapter/ch10.html |archivedate=2014-09-21 |url-status=dead |tittel=Arkivert kopi |besøksdato=2006-06-13 |arkivurl=https://web.archive.org/web/20060613130106/http://oreilly.com/catalog/linuxkernel/chapter/ch10.html |arkivdato=2006-06-13 |url-status=død }} {{Kilde www |url=http://oreilly.com/catalog/linuxkernel/chapter/ch10.html |tittel=Arkivert kopi |besøksdato=2017-03-09 |arkiv-dato=2006-06-13 |arkiv-url=https://web.archive.org/web/20060613130106/http://oreilly.com/catalog/linuxkernel/chapter/ch10.html |url-status=unfit }}</ref> Når en prosess kjøres, settes den [[Boolsk algebra|boolske]] variabelen <code>TASK_RUNNING</code>, som er knyttet til prosessen, lik sann. Prosessen kan avbrytes av andre prosesser, som har en høyere prioritet, og som dermed setter <code>TASK_RUNNING</code> lik falsk. I versjon 2.4 begynte arbeidet med å innføre fleroppgavekjøringen med «forkjøpsrett» også i Linuxkjernen. Arbeidet var fullført med lanseringen av versjon 2.6 den 17. desember 2003. Fleroppgavekjøringen med «forkjøpsrett» er imidlertid ikke gjennomført i alle seksjoner av kjernen.<ref>{{cite web|url=http://www.ibm.com/developerworks/linux/library/l-inside/index.html |title=Towards Linux 2.6, A look into the workings of the next new kernel |last=Santhanam |first=Anand |date=23. september 2003 |publisher=[[IBM Global Services]] |accessdate=15. oktober 2011 |archiveurl=https://web.archive.org/web/20130927200239/http://www.ibm.com/developerworks/linux/library/l-inside/index.html |archivedate=2013-09-27 |url-status=dead }}</ref> Linuxkjernen inneholder forskjellige klasser for [[Skedulering (informatikk)|skedulering]].<ref name="moshe">{{cite web |url=http://www.linuxjournal.com/article/3910 |title=The Linux Scheduler |last=Bar |first=Moshe |date=1. april 2000 |work=[[Linux Journal]] |publisher=Belltown Media, Inc. |accessdate=14. april 2012}}</ref> Standard skeduleringsmekanisme er [[Completely Fair Scheduler]], som ble introdusert i versjon 2.6.23 av kjernen den 9. oktober 2007.<ref>{{cite web |title=[patch] Modular Scheduler Core and Completely Fair Scheduler [CFS] |url=https://lwn.net/Articles/230501/ |last=Molnár |first=Ingo |authorlink=Ingo Molnár |date=13. april 2007 |mailinglist=[[LKML]] |accessdate=14. april 2012}}</ref> Internt er denne skeduleringsklassen kjent som <code>SCHED_OTHER</code>. Linuxkjernen inneholder også to [[POSIX]]-kompatible<ref name="posix1b">[http://www.opengroup.org/onlinepubs/009695399 The Open Group Base Specifications Issue 6], The IEEE and The Open Group, IEEE Std 1003.1, 2004 Edition, IEEE Standard for Information Technology – Portable Operating System Interface, POSIX.1b, Real-time extensions (IEEE Std 1003.1b-1993)</ref> [[sanntid]]sklasser som kalles <code>SCHED_FIFO</code> (basert på en [[Kø (datastruktur)|køstruktur]]) og <code>SCHED_RR</code> ([[round robin skedulering]]).<ref name="moshe" /> Ved å benytte [[patch (program)|programvareendringen]] <code>PREEMPT_RT</code>, kan full støtte for «forkjøpsrett» bli innført for [[kritisk seksjon|kritiske seksjoner]], [[avbruddshåndterer]]e og kodesekvenser hvor avbrudd er deaktivert.<ref>{{cite web |url=https://lwn.net/Articles/146861/ |title=A realtime preemption overview |last=McKenney |first=Paul |date=10. august 2005 |publisher=[[LWN.net]] |accessdate=5. februar 2012}}</ref> Denne programvareendringen og dens funksjonalitet er blitt delvis integrert i Linuxkjernen.<ref>{{cite web |url=https://www.osadl.org/Realtime-Linux.projects-realtime-linux.0.html |title=OSADL Project: Realtime Linux |publisher=[[OSADL]] |accessdate=5. februar 2012}}</ref> Bruk av «forkjøpsrett» innebærer mindre [[latens]], gjør responsen raskere, og gjør Linux mer egnet for sanntidsapplikasjoner. Eldre versjoner av Linuxkjernen hadde en [[stor kjernelås]] for synkronisering over hele kjernen, men denne ble fjernet av Arnd Bergmann den 25. januar 2011.<ref>{{cite web |url=https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=4ba8216cd90560bc402f52076f64d8546e8aefcb |title=BKL: That's all, folks |last=Bergmann |first=Arnd |date=5. mars 2011 |publisher=Linux Kernel Organization, Inc. |accessdate=20. februar 2012 |url-status=dead |archiveurl=https://archive.today/20120720043351/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=4ba8216cd90560bc402f52076f64d8546e8aefcb |archivedate=2012-07-20 |tittel=Arkivert kopi |besøksdato=2012-02-20 |arkivurl=https://archive.today/20120720043351/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=4ba8216cd90560bc402f52076f64d8546e8aefcb |arkivdato=2012-07-20 |url-status=død }}</ref> En tilleggspolitikk for skedulering kjent som <code>[[SCHED_DEADLINE]]</code>, er en implementasjon av algoritmen [[earliest deadline first skedulering]] (EDF) og ble tilføyd versjon 3.14 av Linuxkjernen den 30. mars 2014.<ref>{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=MTU4Mjg |title=The Linux 3.14 Kernel Already Has Many Exciting Features |last=Larabel |first=Michael |authorlink=Michael Larabel |date=24. januar 2014 |publisher=[[Phoronix]] |accessdate=3. februar 2014}}</ref><ref>{{cite web |url=http://kernelnewbies.org/Linux_3.14#head-651929cdcf19cc2e2cfc7feb16b78ef963d195fe |title=Linux kernel 3.14, Section 1.1. Deadline scheduling class for better real-time scheduling |date=30. mars 2014 |website=kernelnewbies.org |accessdate=2. april 2014}}</ref> Kooperativ fleroppgavekjøring ble benyttet i [[Windows 3.0]] og [[Windows 3.1]], så vel som i [[klassisk MacOS|det klassiske MacOS]], [[RISC OS]] og i de fleste versjoner av [[nettverksoperativsystem]]et [[NetWare]] (før versjon 6.5). Windows 95 og Windows 98 benyttet kooperativ fleroppgavekjøring under kjøring av [[16-biter]] programmer, og fleroppgavekjøring med «forkjøpsrett» under kjøring av [[32-biter]] programmer. Fleroppgavekjøringen med «forkjøpsrett» var standard på OS/2 og [[NeXTSTEP]], og har alltid vært det på Windows NT og [[OS X]]. === Symmetrisk flerprosessering === {{Utdypende|Symmetrisk flerprosessering}} [[Fil:Simplified_Structure_of_the_Linux_Kernel.svg|thumb|Lokaliseringen av [[Completely Fair Scheduler]] i Linuxkjernen.{{byline|Illustrasjon: ScotXW|20. februar 2016}}]] Siden versjon 2.0, som ble lansert 9. juni 1996, har Linuxkjernen støttet [[symmetrisk flerprosessering]]. Dette er en [[flerprosessering]] som støttes direkte av [[maskinvare]]n, mens [[asymmetrisk flerprosessering]] besørges indirekte av operativsystemet eller annen programvare. Til sammenligning var dette fraværende i klassisk MacOS så vel som i [[MS-DOS]] baserte versjoner av [[Microsoft Windows]]. Det ble innført støtte for dette i OS/2 (fra versjon 2.11), og ble standard i Windows NT og MacOS X. Symmetrisk flerprosessering innebærer to eller flere mikroprosessorer i et og samme datasystem. Symmetrisk flerprosessering faller inn under kategorien [[SIMD]] (''Single Instructions, Multiple Data'') i [[Flynns taksonomi]], og innebærer at to eller flere mikroprosessorer deler et felles [[RAM|dataminne]]. Dette betyr at [[Flerkjerners mikroprosessor|flere prosessorkjerner]] finnes på samme [[mikrobrikke]], at flere mikrobrikker (med en eller flere kjerner) finnes i en enkelt mikroprosessor, eller at flere mikroprosessorer finnes på et [[hovedkort]]. Symmetrisk flerprosessering kan også realiseres i et [[Datanettverk|nettverk]]; da deles et felles dataminne av to eller flere datamaskiner. Symmetrisk flerprosessering ble første gang lansert i enkelte modeller av [[stormaskin]]en [[IBM System/360]]. [[IBM System/360 modell 65|Modell 65]], [[IBM System/360 modell 67|modell 67]] og modell 67-2, som kom på markedet i 1965, hadde to mikroprosessorer som kjørte samtidig. Operativsystemene [[OS/360|OS/360 M65MP]] og [[IBM TSS/360]] støttet denne flerprosesseringen, og det samme var tilfelle med [[Michigan Terminal System]]. I 1986 innledet [[Sun Microsystems]] en ny [[RISC]]-familie gjennom spesifikasjonen til [[datamaskinarkitektur]]en [[SPARC]], og i 1987 gjorde den sin debut i [[arbeidsstasjon]]en [[Sun-4|«Sunrise»]]. SPARC er en forkortelse for «skalerbar prosessorarkitektur» (''Scalable Processor ARChitecture''), og arkitekturen kunne skaleres opp til flere tusen mikroprosessorer ([[superdatamaskin]]er). Unix-avartene [[SunOS]] og [[Solaris (operativsystem)|Solaris]] var laget for disse datamaskinene. Det finnes mange flere eksempler. Her er bare noen systemer nevnt. [[Sequent Computer Systems]] lanserte i 1987 datamaskiner med opptil 20 stk 32-biter [[Intel 80386]] mikroprosessorer (''Symmetry S''-serien). I 1995 ble [[Intel Pentium Pro]] lansert, med innebygd logikk for symmetrisk flerprosessering. I 2006 lanserte [[Intel]] dobbeltkjerneprosessoren [[Intel Pentium Dual Core]] og firekjernersprosessoren [[Core Quad]]. I dag er flerkjerners mikroprosessorer stort sett standard. === Multitråder === {{utdypende|Tråd (informatikk){{!}}Tråder|LinuxThreads|Native POSIX Thread Library}} [[Fil:Intel Core I7-920 Boxed - 14.JPG|thumb|Intel Core i7 920 [[mikroprosessor]] med 4 kjerner. [[Flerkjerners mikroprosessor]]er er i dag blitt utbredt.{{byline|Foto: Alan Lorenzo|1. januar 2007}}]] Linuxkjernen støtter [[Tråd (informatikk)|tråder]], som betyr at flere deler av det samme [[dataprogram]]met kjører samtidig. Mens ordinære [[Prosess (informatikk)|prosesser]] er uavhengige, har mye tilstandsinformasjon, separate [[dataminne|minneadresser]] og interne prosess-kommunikasjonsmekanismer, deler tråder informasjonen fra én enkel prosess, samt minne og andre ressurser, direkte; de kan betraktes som asynkrone prosedyrer i et program. [[Kontekstskifte]]r skjer som regel raskere mellom flere tråder enn mellom prosesser. Oppgaver med forskjellige ressurskrav kan utføres i forskjellige tråder, ved at for eksempel at [[Skjerm (monitor)|skjermen]] oppdateres mens [[platelager]]et, som trenger lite systemressurser, arbeider. Trådene kan også fordeles på ulike mikroprosessorer når flerprosessering er tilstedeværende, for å øke dataprogrammers ytelse. Forut for versjon 2.6 benyttet Linuxkjernen [[LinuxThreads]]. Dette var en delvis implementasjon av [[POSIX Threads]], som er definert av [[POSIX]] 1003.1c. LinuxThreads benyttet det nye systemkallet <code>[[Fork (Unix)|clone()]]</code> til å skape tråder som delte foreldreprosessens adresseområde. Dette var en avart av systemkallet <code>[[Fork (Unix)|fork()]]</code>, som har vært en del av UNIX siden 1971. Tråder ble gitt unike [[prosessidentifikator]]er, og kunne skape problemer for håndteringen av [[Unix-signal]]er. Signalene [[Unix-signal|SIGUSR1]] og [[Unix-signal|SIGUSR2]] ble brukt til å koordinere trådene på en slik måte at de samme signalene ikke kunne brukes av andre programmer. To alternativer vokste etter hvert frem som en mulig etterfølger til LinuxThreads: [[Next Generation POSIX Threads]] og [[Native POSIX Thread Library]] (NPTL). NTPL vant frem og ble standard i versjon 2.6 av Linuxkjernen. === Virtuell hukommelse === {{utdypende|Virtuell hukommelse|sideveksling|behovsbetinget sideveksling}} [[Fil:Virtual memory.svg|thumb|250px|[[Virtuell hukommelse]]: Programmet tror at det har en kontinuerlig mengde med [[RAM|hovedminne]]. I virkeligheten ligger aktive deler av programmet spredt i hovedminnet, mens inaktive deler ligger på en [[harddisk]].{{byline|Illustrasjon: Ehamberg|5. november 2009}}]] På samme måte som UNIX, og andre moderne operativsystemer, støtter Linuxkjernen [[virtuell hukommelse]]. Det har den gjort helt fra starten av. Virtuell hukommelse gir dataprogrammer inntrykk av at de har tilgang til en kontinuerlig mengde med [[RAM|hovedminne]]. I virkeligheten befinner deres minne seg fragmentert i hovedminnet, og kan endog overstige den mengden med hovedminne som finnes i datamaskinen. I det sistnevnte tilfelle, brukes datamaskinens [[harddisk]] delvis som minne ved å forflytte deler av programmet frem og tilbake mellom hovedminnet og harddisken ''(swapping)''. Fra UNIX arvet Linuxkjernen [[sideveksling]]. Denne metode er også i bruk i andre Unix-lignende operativsystemer, og i de fleste moderne operativsystemer. Sideveksling er en form for [[minnehåndtering]] hvor datamaskinen lagrer og henter data fra et sekundært [[datalager]] for bruk i hovedminnet.<ref name="ostep-1">{{citation|title=Operating Systems: Three Easy Pieces (Chapter: Paging)|url=http://pages.cs.wisc.edu/~remzi/OSTEP/vm-paging.pdf|publisher= Arpaci-Dusseau Books|year = 2014|first1 = Remzi H.|last1 =Arpaci-Dusseau|first2=Andrea C.|last2 = Arpaci-Dusseau}}</ref> Hvert fragment kalles en [[side (dataminne)|side]], og er 4 Kb i størrelse. Linuxkjernen benytter [[behovsbetinget sideveksling]], som betyr at den kopierer en side inn i den fysiske hukommelsen bare hvis et forsøk blir gjort på å aksessere den og siden ikke allerede er i hukommelsen.<ref>[http://www.linux-tutorial.info/modules.php?name=MContent&pageid=306 Demand paging] {{Wayback|url=http://www.linux-tutorial.info/modules.php?name=MContent&pageid=306 |date=20170312075300 }}, www.linux-tutorial</ref> I kontrast til sideveksling står [[minnesegmentering|segmentering]]. Under segmentering har hvert segment en maksimal størrelse, men varierer innbyrdes i størrelse. Segmentering ble benyttet i operativsystemet [[Multics]], som var forgjengeren til UNIX. Linuxkjernen ble opprinnelig utviklet for 32-biter mikroprosessoren [[Intel 80386]], som var en del av [[x86]]-familien. De første medlemmer av denne familien var 16-biter mikroprosessorene [[Intel 8086]] og [[Intel 8088]]. De benyttet segmenter som var 64 Kb i størrelse, for å være kompatibel med [[8-biter]] mikroprosessoren [[Intel 8085]]. [[Intel 80286]] støttet virtuell hukommelse, og «arvet» segmenter på 64 Kb fra sine forgjengere. Dette var også grunnen til at OS/2, som i utgangspunktet var «skreddersydd» for Intel 80286, benyttet en segmentert minnemodell. Det samme gjorde Windows 3.0 og Windows 3.1. Intel 80386 økte maksimalgrensen på segmentenes størrelse fra 64 Kb til 4 Gb. Den metode som Linuxkjernen benyttet på denne mikroprosessoren, var å ta i bruk ''bare et enkelt segment'' og deretter foreta sideveksling innenfor dette segmentet. Slik kunne man «lure» operativsystemet til å tro at den underliggende maskinvaren ikke var segmentert, men støttet sideveksling i utgangspunktet. Denne metoden ble også tatt i bruk av Windows NT på Intel 80386. Sideveksling gir mindre [[fragmentering (informatikk)|fragmentering]] av harddisken enn segmentering.<ref>Frédéric Haziza: [https://www.it.uu.se/edu/course/homepage/oskomp/vt07/lectures/paging/handout.pdf Paging & Segmentation] {{Wayback|url=https://www.it.uu.se/edu/course/homepage/oskomp/vt07/lectures/paging/handout.pdf |date=20170830062342 }}, Uppsala universitet, våren 2007</ref> === Dynamisk lastbare kjernemoduler === {{utdypende|Lastbar kjernemodul{{!}}Dynamisk lastbare kjernemoduler}} Liksom [[FreeBSD]], Solaris, [[AIX]], Mac OS X, Windows NT og det tidligere nettverksoperativsystemet NetWare, har Linuxkjernen støtte for [[Lastbar kjernemodul|dynamisk lastbare kjernemoduler]]. Dette er [[objektfil]]er som inneholder en utvidelse av operativsystemets kjerne, og som vanligvis brukes for å støtte nyere [[maskinvare]], [[filsystem]]er eller for å tilføye nye [[systemkall]]. Når deres funksjonalitet ikke lenger er påkrevet, kan de bli lastet ut av kjernen for å frigjøre hukommelse og andre ressurser. Modulene blir lastet inn og ut av kjernen med kommandoen <code>[[modprobe]]</code>. De er lokaliserte i filkatalogen <code>/lib/modules</code> og hadde tidligere [[filetternavn]]et <code>.o</code>. Siden versjon 2.6 har de hatt filetternavnet <code>.ko</code>.<ref>{{cite web|title=The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"|url=http://tldp.org/LDP/lkmpg/2.6/html/x181.html|accessdate=2011-10-14}}</ref> Programmet <code>modprobe</code> var en del av ''modutils'' fra versjon 2.2 til versjon 2.4.x av Linuxkjernen.<ref>{{kilde www |url=http://ftp.kernel.org/pub/linux/utils/kernel/modutils/ |tittel=Arkivert kopi |besøksdato=2008-09-22 |url-status=død |arkivurl=https://web.archive.org/web/20090223192439/http://ftp.kernel.org/pub/linux/utils/kernel/modutils/ |arkivdato=2009-02-23 }}</ref> Fra og med versjon 2.6 blir verktøyet levert sammen med ''module-init-tools''.<ref>{{kilde www |url=http://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/ |tittel=Arkivert kopi |besøksdato=2008-09-22 |url-status=død |arkivurl=https://web.archive.org/web/20080609070918/http://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/ |arkivdato=2008-06-09 }}</ref> Kommandoen <code>[[lsmod]]</code> lister ut de lastbare kjernemoduler. I nødstilfeller, når datasystemet ikke starter opp på grunn av feil i modulene, kan spesifikke moduler aktiveres eller deaktiveres ved å modifisere kjernens oppstartsparametere. Deaktivering av et kjernemodul skjer via kommandoen <code>[[sysctl]]</code> med opsjonen <code>/proc/sys/kernel/modules_disabled</code>.<ref>{{cite web |title=Sysctl/kernel.txt |url=https://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux.git%3Ba%3Dblob%3Bf%3DDocumentation%2Fsysctl%2Fkernel.txt%3Bhb%3DHEAD |accessdate=4. januar 2013 |archive-date=2013-04-15 |archive-url=https://archive.today/20130415070311/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD |url-status=yes }}</ref><ref>{{cite web | url = http://www.outflux.net/blog/archives/2012/11/28/clean-module-disabling/ | title = Clean module disabling | date = 2012-11-28 | accessdate = 2013-12-12 | author = Kees Cook | publisher = outflux.net }}</ref> Et datasystem som benytter [[RAM-disk]]en [[initramfs]], kan av sikkerhetsmessige hensyn laste spesifikke moduler under oppstart og deretter deaktivere lastingen av moduler. Hvis angripere kan forandre initramfs, kan de også forandre på binærkoden i kjernen. I motsetning til FreeBSD, Solaris, Mac OS X og Windows NT, har Linuxkjernen intet [[API (programmering)|applikasjonsprogrammeringsgrensesnitt]] (API) eller binært applikasjonsgrensesnitt (ABI) for kjernemoduler. Dette betyr at det er forskjeller mellom ulike kjerneversjoner hva angår de interne strukturer og funksjoner, noe som kan skape kompatibilitetsproblemer. For å avhjelpe dette, er versjonsdata plassert innenfor seksjonen <code>.modinfo</code> i lastbare [[Executable and Linkable Format|ELF]]-moduler. Versjonsinformasjonen kan sammenlignes med den kjørende kjerne før et modul kjøres. Hvis versjonene er inkompatible, vil modulen ikke bli lastet. === Delte biblioteker === {{utdypende|Bibliotek (programvare){{!}}Delte biblioteker}} Likesom de fleste moderne operativsystemer, har Linuxkjernen støtte for [[Bibliotek (programvare)|delte biblioteker]]. Et delt bibliotek er en fil som kan deles av [[Eksekverbar fil|eksekverbare filer]], og som kan lastes opp under oppstart og under kjøring. De kan bli statisk lenket, hvilket betyr at både biblioteket og programmene allokeres minne når det blir skapt. Alternativt kan bibliotekene bli dynamisk lenket, hvilket betyr at programmene bare kobler seg til biblioteket gjennom en API når det vil ha en bestemt oppgave utført. Biblioteker ligger i katalogen <code>/usr/lib/</code>. De har prefikset lib, og er etterfulgt av filetternavnet <code>.so</code>.<ref>David A. Wheeler: [http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html 3. Shared Libraries], Program Library HOWTO, version 1.20, 11. april 2003</ref> Hvis de er statisk lenket har de filetternavnet <code>.a</code>. === Programmeringsspråk === {{utdypende|C (programmeringsspråk){{!}}Programmeringsspråket C|GNU Compiler Collection}} Kjernen er skrevet nesten utelukkende i [[programmeringsspråk]]et [[C (programmeringsspråk)|C]] (sammen med noen [[GNU Compiler Collection|GNU C]] syntaksutvidelser). Enkelte korte seksjoner av koden er skrevet i [[AT&T]] [[assembler]]. I versjon 4.1 ble store deler av assemblerkoden skrevet i C.<ref>Michael Larabel: [http://www.phoronix.com/scan.php?page=news_item&px=Linux-4.1-For-x86-ASM Linux 4.1 Brings Many Potentially Risky x86/ASM Changes], phoronix.com, 13. april 2015</ref>, og i versjon 4.2 ble enda mer av assemblerkoden omskrevet i C.<ref>Michael Larabel: [http://www.phoronix.com/scan.php?page=news_item&px=more-x86-asm-to-c-linux More Of The Linux Kernel's x86 Assembly Code Gets Rewritten In C], phoronix.com, 18. juni 2015</ref> GNU C (GCC) var lenge den eneste [[kompilator]] som var i stand til å bygge Linuxkjernen på en korrekt måte. === Kompatibilitet med kompilatorer === {{utdypende|Intel C++ Compiler|Clang}} GNU C Compiler (GCC) er standard kompilator for Linuxkjernens kildekode. I 2004 modifiserte [[Intel]] sin [[Intel C++ Compiler]], slik at den også var i stand til å kompilere Linuxkjernen.<ref>{{cite web |url=http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html |title=Linux kernel patch for Intel Compiler |last=Kubbilun |first=Ingo A. |date=2. juni 2004 |publisher=Pyrillion.org |accessdate=12. november 2010 |archiveurl=https://web.archive.org/web/20110722090031/http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html |archivedate=2011-07-22 |language=de |url-status=dead |tittel=Arkivert kopi |besøksdato=2010-11-12 |arkivurl=https://web.archive.org/web/20110722090031/http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html |arkivdato=2011-07-22 |url-status=død }} {{Kilde www |url=http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html |tittel=Arkivert kopi |besøksdato=2017-03-11 |arkiv-dato=2011-07-22 |arkiv-url=https://web.archive.org/web/20110722090031/http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html |url-status=unfit }}</ref> I 2009 ble dette gjort enda en gang på en modifisert utgave av versjon 2.6.22 av Linuxkjernen.<ref>{{cite web |url=http://linux.slashdot.org/article.pl?sid=09/02/26/2216241 |title=High Performance Linux Kernel Project — LinuxDNA |author=timothy |date=26. februar 2009 |work=[[Slashdot|Slashdot Linux]] |publisher=Dice Holdings |accessdate=30. oktober 2010}}</ref><ref>{{cite web |url=http://www.linuxjournal.com/content/linuxdna-supercharges-linux-intel-cc-compiler |title=LinuxDNA Supercharges Linux with the Intel C/C++ Compiler |last=Ryan |first=Justin |date=25. februar 2009 |work=[[Linux Journal]] |publisher=Belltown Media, Inc. |accessdate=30. oktober 2010}}</ref> Siden 2010 har det pågått et arbeide med å bygge Linuxkjernen med [[Clang]], en C-kompilator som er et alternativ til GCC.<ref>{{cite web |url=http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |title=Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts) |last=Lelbach |first=Bryce |mailing-list=cfe-dev |date=25. oktober 2010 |archiveurl=https://web.archive.org/web/20150907044958/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |archivedate=7. september 2015 |tittel=Arkivert kopi |besøksdato=2012-09-18 |arkivurl=https://web.archive.org/web/20150907044958/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |arkivdato=2015-09-07 |url-status=død }} {{Kilde www |url=http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |tittel=Arkivert kopi |besøksdato=2017-03-11 |arkiv-dato=2015-09-07 |arkiv-url=https://web.archive.org/web/20150907044958/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |url-status=unfit }}</ref> Den 12. april 2014 kunne nesten hele den offisielle kjernen bli kompilert med Clang.<ref>{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=MTY2MjY |title=Linux 3.15 Can Almost Be Compiled Under LLVM's Clang |last=Larabel |first=Michael |authorlink=Michael Larabel |date=12. april 2014 |publisher=[[Phoronix]] |accessdate=10. juni 2014}}</ref><ref>{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=MTY2MjY |title=Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel |last=Larabel |first=Michael |authorlink=Michael Larabel |publisher=[[Phoronix]] |accessdate=20. november 2014}}</ref> Prosjektet er kjent som ''LLVMLinux'', oppkalt etter infrastrukturen [[LLVM]] som ligger til grunn for Clang.<ref>{{cite web |url=https://lwn.net/Articles/549203/ |title=LFCS: The LLVMLinux project |last=Edge |first=Jake |date=7. mai 2013 |publisher=[[LWN.net]] |accessdate=3. mars 2015}}</ref> LLVMLinux er ikke en [[fork]] av Linuxkjernen eller LLVM, men et metaprosjekt som består av programvareoppdateringer som til slutt blir en del av hovedprosjektet. Fordelen med LLVMLinux for Linuxkjernens utviklere, er at Clang er kjent for raskere kompilering enn GCC.<ref>{{cite web |url=http://llvm.org/devmtg/2014-02/slides/moller-llvmlinux.pdf |title=LLVMLinux: The Linux Kernel with Dragon Wings |last=Möller |first=Jan-Simon |date=2. februar 2014 |publisher=[[LLVM|LLVM Project]] |accessdate=3. mars 2015}}</ref> === Grensesnitt mot Linuxkjernen === ''Linuxkjernens grensesnitt'' er flere grensesnitt mellom kjernen og applikasjoner i [[brukermodus]], såvel som interne grensesnitt i kjernen. Det finnes to typer grensesnitt mellom kjernen og programmer som kjører i brukermodus: [[API (programmering)|applikasjonsprogrammeringsgrensesnitt]] (API) og [[Binærkompatibilitet|binære applikasjonsgrensesnitt]] (ABI). Internt i kjernen finnes det en rekke applikasjonsprogrammeringsgrensesnitt, men intet binært applikasjonsgrensesnitt.[[Fil:Linux kernel interfaces.svg|thumb|300px|Fire grensesnitt er definert: To interne i kjernen, og to mellom kjernen og brukermodus.{{byline|Illustrasjon: ScotXW|20. august 2013}}]] [[Fil:Linux AMD graphics stack.svg|thumb|300px|På XDC2014 kunngjorde Alex Deucher fra [[Advanced Micro Devices]] (AMD) en felles driver for [[grafikkort]] og [[AMD Accelerated Processing Unit|APU]]'er.<ref>{{cite web |url=http://wiki.x.org/wiki/Events/XDC2014/XDC2014DeucherAMD/ |title=AMD's New Unified Open Source Driver |last=Deucher |first=Alex |date=7. oktober 2014 |publisher=[[X.Org Foundation]] |accessdate=21. januar 2015}}</ref> Den propritære Linuxdriveren, [[AMD Catalyst|libGL-fglrx-glx]], deler [[Direct Rendering Manager]] med [[Mesa (datagrafikk)|Mesa 3D]]. Ettersom kjernen mangler et stabilt binærgrensesnitt, brukte AMD sin egen [[binary blob]].{{byline|Illustrasjon: ScotXW|20. januar 2015}}]] ==== Applikasjonsprogrammeringsgrensesnitt i brukermodus ==== {{utdypende|POSIX|Single UNIX Specification|Linuxkjernens API}} Portabilitet i kildekoden sikrer at et C-program som er skrevet i henhold til en standard kan kompileres og kjøres på ethvert system som følger samme standarden. De relevante standarder i sammenheng med Linuxkjernen, og [[GNU C Library]] som er tilknyttet den, er [[POSIX]] og [[Single UNIX Specification]]. Linuxdistribusjonene [[EulerOS]]<ref>{{cite web|url=http://www.huawei.com/en/news/2016/9/huawei-kunlun-euleros-unix-certification|title=Huawei KunLun EulerOS 2.0 Operating System Passes UNIX Certification |accessdate=2016-10-29|publisher=[[Huawei]]}}</ref><ref name="EulerOS_conformance_commands">{{cite web| url=http://www.opengroup.org/csq/repository/norationale=1&noreferences=1&RID=huawei%252FCX1%252F1.html| title=Huawei Conformance Statement: Commands and Utilities V4| author=Peng Shen| publisher=The Open Group| accessdate=2016-10-29| url-status=dead| archiveurl=https://web.archive.org/web/20161029175646/http://www.opengroup.org/csq/repository/norationale%3D1%26noreferences%3D1%26RID%3Dhuawei/CX1/1.html| archivedate=2016-10-29}}</ref> og [[Inspur K-UX]],<ref>{{cite web|url=http://www.opengroup.org/openbrand/register/brand3596.htm |title=The Open Brand Register of Certified Products|accessdate=2014-05-29|publisher=The Open Group|date=2014-05-29}}</ref><ref name="inspur_conformance_statement">{{cite web| url=http://www.opengroup.org/csq/repository/RID=inspur%252FXY1%252F1.html| title=Inspur Conformance Statement| author=Xie Ruohong| publisher=The Open Group| accessdate=2015-12-08| url-status=dead| archiveurl=https://web.archive.org/web/20151210194928/http://www.opengroup.org/csq/repository/RID%3Dinspur/XY1/1.html| archivedate=2015-12-10}}</ref> som begge er derivater av [[Red Hat Enterprise Linux]], følger offisielt UNIX-03 standarden. Ingen andre Linuxdistribusjoner har fått varemerket «UNIX» av [[Open Group]], hovedsakelig på grunn av kostnadene ved konformitets-testing. GNU C Library støtter standardene K&R C, [[ANSI C]], [[ISO]] [[C99]], ISO [[C11]], ISO [[C18]], [[Single UNIX Specification]] (UNIX 93, UNIX 95, UNIX 98, UNIX 03, UNIX V7), POSIX.1c, POSIX.1d, POSIX.1j, POSIX.2, POSIX.1-2001, POSIX-2004, POSIX-2008, POSIX.1-2017, [[Berkeley Software Distribution|BSD]]-grensesnitt, [[System V Interface Definition]] (SVID), [[X/Open|X/Open Portability Guide]] 4.2 og utvidelser av C-syntaksen som er spesifikke for Linuxkjernen. Biblioteket støtter også [[C++]]-standardene C++98, [[C++03]], [[C++11]], [[C++14]], [[C++17]] og den kommende standarden [[C++20]]. [[Linuxkjernens grensesnitt|Linuxkjernens API]] består hovedsakelig av systemkall. ==== Applikasjonsprogrammers binærgrensesnitt ==== {{utdypende|Linux Standard Base}} Binærportabilitet betyr at ethvert program som er kompilert for en gitt maskinvareplattform, kan kjøre i kompilert form på enhver annen maskinvareplattform som følger standarden. Binærportabilitet er et essensielt krav for den kommersielle levedyktighet til applikasjoner fra [[uavhengig programvareleverandør|uavhengige programvareleverandører]] som er bygd for operativsystemer som er basert på Linuxkjernen. Binærkompatibilitet er mye mer krevende enn kildekodeportabilitet. Per januar 2020 er [[Linux Standard Base]] (LSB) den eneste standard for binærkompatibilitet. ==== Applikasjonsgrensesnitt i kjernen ==== Flere interne applikasjonsgrensensnitt i kjernen anvendes mellom forskjellige undersystemer og deres undersystemer. Noen har vært stabile over flere versjoner, mens andre har endret seg. Det er ingen garanti for at de vil vedvare; vedlikeholdere og bidragsytere kan fritt endre dem når som helst.<ref>{{cite web |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |title=The Linux Kernel Driver Interface |author=Greg Kroah-Hartman |accessdate=10. april 2015 |url-status=dead |archiveurl=https://web.archive.org/web/20150426153026/https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |archivedate=2015-04-26 |tittel=Arkivert kopi |besøksdato=2015-04-10 |arkivurl=https://web.archive.org/web/20150426153026/https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |arkivdato=2015-04-26 |url-status=død }}</ref> Eksempler er rammeverk for de følgende klasser av utstyrsdrivere: * [[Video4Linux]] for videomaskinvare * [[Advanced Linux Sound Architecture]] (ALSA) for [[lydkort]] * [[New API]] for [[nettverkskort]] * [[Direct Rendering Manager]] for [[grafikkort]] * [[KMS-driver]] for [[fremvisningskontroller]]e * [[mac80211]] for trådløse [[nettverkskort]]<ref>{{cite web |url=https://wireless.wiki.kernel.org/en/developers/Documentation/mac80211 |title=About mac80211 |publisher=Linux Kernel Organization, Inc. |accessdate=8. juni 2014 |archive-date=2021-02-01 |archive-url=https://web.archive.org/web/20210201114135/https://wireless.wiki.kernel.org/en/developers/documentation/mac80211 |url-status=yes }}</ref> * WEXT for trådløse nettverkskort (foreldet) ==== Binærgrensesnitt i kjernen ==== Linuxkjernen har intet stabilt binærgrensesnitt.<ref>{{cite web|url=http://abi-laboratory.pro/tracker/timeline/linux/|title=Report on ABI changes in the Linux kernel|publisher=Andrey Ponomarenko's ABI laboratory|date=17. mars 2016}}</ref> === Portabilitet === {{utdypende|Liste over Linuxkjernens støttede datamaskinarkitekturer|Linuxbasert utstyr}} [[Fil:Tianhe-2.jpg|thumb|[[Superdatamaskin]]en [[Tianhe-2]] i [[Guangzhou]], [[Kina]]. Den kjører [[Kylin Linux]].{{byline|Foto: O01326|3. desember 2015}}]] [[Fil:Ipod linux booting kernel.jpg|thumb|En [[iPod]] som starter [[iPodLinux]].{{byline|Foto: Elke Wetzig|26. januar 2007}}]] Linuxkjernen ble opprinnelig ikke konstruert som en [[portering|portabel]] operativsystemkjerne.<ref name="Torvlads25Aug91">{{cite web |last=Torvalds |first=Linus Benedict |authorlink=Linus Torvalds |date=26. august 1991 |title=What would you like to see most in minix? |newsgroup=comp.os.minix |message-id=1991Aug25.205708.9541@klaava.Helsinki.FI |url=https://groups.google.com/group/comp.os.minix/msg/b813d52cbc5a044b}}</ref><ref name="opensources">{{cite book |last=Torvalds |first=Linus |authorlink=Linus Torvalds |date=januar 1999 |title=Open Sources: Voices from the Open Source Revolution |url=http://www.oreilly.com/openbook/opensources/book/linus.html |publisher=[[O'Reilly Media|O'Reilly]] |chapter=The Linux Edge |isbn=1-56592-582-3 |accessdate=13. oktober 2013}}</ref> Den ble laget for 32-biter mikroprosessoren Intel 80386, som på denne tiden hadde vokst i popularitet. Støtten for Intel 80386 forsvant i versjon 3.8 av Linuxkjernen den 28. februar 2013.<ref>James Plafke: [https://www.extremetech.com/computing/143216-linux-drops-support-for-intels-386-processors-but-does-it-really-matter Linux drops support for Intel’s 386 processors, but does it really matter?], ExtremeTexh, 13. desember 2012</ref> Den første portering ble gjort til [[Motorola 68000]] av brukere av [[Amiga]], men for å gjøre dette måtte store deler av Linuxkjernen omskrives. Linus Torvalds kalte dette for en [[fork]] og for et «Linuxlignende operativsystem».<ref name="opensources"/> Med denne erfaringen i minne, ledet Torvalds en restrukturering av Linuxkjernen for å oppnå en portering til 64-biter [[RISC]]-arkitekturen [[DEC Alpha]], slik at både 80386 og DEC Alpha kunne støttes i et enkelt tre i kildekoden.<ref name="opensources" /> Idag er Linuxkjernen en av de mest porterte operativsystemkjerner i verden. Den har blitt portert til de fleste [[datamaskinarkitektur]]er, deriblant [[x86-64]], [[SPARC]], [[DEC Alpha]], [[Blackfin]], [[PowerPC]], [[IBM POWER]], [[MIPS (andre betydninger)|MIPS]], [[PA-RISC]], [[SuperH]], [[IBM System z9]]/[[IBM System z10|z10]]/[[IBM zEnterprise System|zEnterprise System]], [[Intel Itanium]], [[ARM (prosessorarkitektur)|ARM]] og [[RISC-V]]. Linux kjører som det primære operativsystem på [[Sunway TaihuLight]], [[Tianhe-2]], Titan-Cray XK7, IBMs [[Blue Gene]] og andre [[superdatamaskin]]er. I november 2016 ble Linuxkjernen kjørt på 498 av verdens 500 kraftigste superdatamaskiner, rangert på listen [[TOP500]] (de to andre benyttet [[AIX]] og [[IBM]] [[POWER7]]).<ref name=top500stats/><ref name="top500-list"/> I november 2017 var dette tallet økt til 500. Diverse operativsystemer for [[nettbrett]], [[lesebrett]], [[smarttelefon]]er og [[smartur]] benytter modifiserte Linuxkjerner.<ref>{{cite web |url=http://www.pcworld.com/article/195789/android_now_running_on_iphone_3g.html |title=Android Now Running On iPhone 3G |last=Wang |first=David |date=6. mai 2010 |work=TechHive |publisher=[[International Data Group|IDG]] |accessdate=11. juli 2010}}</ref> Eksempler på slike enheter er [[iPod]] og [[iPhone]] fra [[Apple|Apple Computer]], med [[iPodLinux]] og iPhone Linux ([[iOS]] fra Apple er derimot basert på [[Mac OS X]]). Andre eksempler er [[Android]], [[WebOS]], [[Tizen]], [[Sailfish OS]], [[Openmoko Linux]] og [[Ångström (linuxdistribusjon)|Ångström]], så vel som de tidligere operativsystemene [[Familiar Linux]], [[Firefox OS]], [[H5OS]], [[Maemo]], [[MeeGo]], [[Moblin]], [[OpenZaurus]] og [[Symbian]].<ref>{{cite web |url=http://www.kroah.com/log/linux/android-kernel-problems.html |title=Android and the Linux kernel community |last=Kroah-Hartman |first=Greg |authorlink=Greg Kroah-Hartman |date=2. februar 2010 |accessdate=3. februar 2010 |quote=''This means that any drivers written for Android hardware platforms, can not get merged into the main kernel tree because they have dependencies on code that only lives in Google's kernel tree, causing it to fail to build in the kernel.org tree. Because of this, Google has now prevented a large chunk of hardware drivers and platform code from ever getting merged into the main kernel tree. Effectively creating a kernel branch that a number of different vendors are now relying on.''}}</ref><ref>{{cite web |url=http://www.zdnet.com/article/linux-developer-explains-android-kernel-code-removal/ |title=Linux developer explains Android kernel code removal |last=Meyer |first=David |date=3. februar 2010 |work=[[ZDNet]] |publisher=[[CBS Interactive]] |accessdate=3. februar 2010}}</ref><ref>{{cite book |date=2008 |title=maemo Technology Overview |url=http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Technology_Overview/Chapter_03_maemo_Platform_Overview.html |publisher=[[Nokia]] |chapter=Chapter 03: maemo Platform Overview |accessdate=9. april 2010 |archiveurl=https://web.archive.org/web/20080616191310/http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Technology_Overview/Chapter_03_maemo_Platform_Overview.html |archivedate=2008-06-16 |url-status=dead |tittel=Arkivert kopi |besøksdato=2010-04-09 |arkivurl=https://web.archive.org/web/20080616191310/http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Technology_Overview/Chapter_03_maemo_Platform_Overview.html |arkivdato=2008-06-16 |url-status=død }} {{Kilde www |url=http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Technology_Overview/Chapter_03_maemo_Platform_Overview.html |tittel=Arkivert kopi |besøksdato=2017-03-12 |arkiv-dato=2008-06-16 |arkiv-url=https://web.archive.org/web/20080616191310/http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Technology_Overview/Chapter_03_maemo_Platform_Overview.html |url-status=yes }}</ref> I 2013 ble Android det mest utbredte operativsystemet i verden. === Periferiutstyr og databusser === I årenes løp har Linuxkjernen støttet ulike [[Buss (datakommunikasjon)|busser]] for [[periferienhet]]er etter hvert som disse har utviklet seg: * [[Industry Standard Architecture|ISA]] * [[Extended Industry Standard Architecture|EISA]] * [[Micro Channel architecture]] (MCA) ble støttet fra versjon 2.2.0 av Linuxkjernen * [[PCI]] * [[I2O]] ble støttet fra versjon 2.4.0 av Linuxkjernen * [[VESA lokalbuss|VESA]] * [[AGP]] 1.0/2.0 ble støttet fra versjon 2.2.0 av Linuxkjernen; AGP 3.0 ble støttet fra versjon 2.4.21 av Linuxkjernen * [[PCI-X]] 1.0 ble støttet fra versjon 2.2.0 av Linuxkjernen; PCI-X 2.0 ble støttet fra versjon 2.6.0 av Linuxkjernen * [[PCI Express]] 1.0 ble støttet fra versjon 2.6.0 av Linuxkjernen; PCI Express 1.1 ble støttet fra versjon 2.6.15 (og versjon 2.4.33.0) av Linuxkjernen; PCI Express 2.0 ble støttet fra versjon 2.6.19 av Linuxkjernen; PCI Express 2.1 ble støttet fra versjon 2.6,24 (og versjon 2.4.36.2) av Linuxkjernen; PCI Express 3.0 ble støttet fra versjon 2.6.31 av Linuxkjernen; PCI Express 3.1 ble støttet fra versjon 3.11.0 av Linuxkjernen; PCI Express 4.0 ble støttet fra versjon 3.2.0 av Linuxkjernen * [[USB]] 1.0 ble støttet fra versjon 2.0.0 av Linuxkjernen; USB 1.1 ble støttet fra versjon 2.2.0 av Linuxkjernen; USB 2.0 ble støttet fra versjon 2.4.0 av Linuxkjernen; USB 3.0 ble støttet fra versjon 2.6.31 av Linuxkjernen.<ref name="kernel 2.6.31"/> USB 3.1 ble støttet av versjon 4.6.0 av Linuxkjernen.<ref>Marius Nestor: [http://news.softpedia.com/news/linux-kernel-4-6-officially-released-introduces-orangefs-usb-3-1-ssp-support-504088.shtml Linux Kernel 4.6 Officially Released, Introduces OrangeFS, USB 3.1 SSP Support. GO Linux 4.6 kernel is now available for download], softpedia, 15. mai 2016</ref> USB 3.2 ble støttet av versjon 4.18.0 av Linuxkjernen.<ref>Micgael Larabel: [https://www.phoronix.com/scan.php?page=news_item&px=USB-3.2-Linux-4.18-Next USB 3.2 Work Is On The Way For The Linux 4.18 Kernel], phoronix, 30. april 2018</ref> * [[FireWire]] (konkurrent til USB) ble støttet fra versjon 2.6.31 av Linuxkjernen.<ref name="kernel 2.6.31">[http://cateee.net/lkddb/web-lkddb/FIREWIRE.html CONFIG_FIREWIRE: New FireWire stack, EXPERIMENTAL], Linux kernel driver database</ref><ref>[https://kernelnewbies.org/Linux_2_6_31#head-ea905cdc4decdd80f2ad02b83e4cc201d05d8cbf Linux 2.6.31], kernelnewbies.org, 9. september 2009</ref> === Sikkerhet === Linuxkjernens [[datasikkerhet]] har vært diskutert, fordi [[programvarefeil]] presenterer en potensiell sikkerhetsrisiko. Dette kan muliggjøre [[privilegie-eskalering]] og skape [[tjenestenektangrep]]. I løpet av årene er flere programvarefeil blitt oppdaget og rettet i Linuxkjernen.<ref>{{cite book |last1=Mookhey |first1=K. K. |last2=Burghate |first2=Nilesh |date=1. juli 2005 |title=Linux: Security, Audit and Control Features |url=https://books.google.com/books?id=-kD0sxQ0EkIC&pg=PA14 |location=USA |publisher=[[ISACA]] |page=14 |isbn=1-893209-78-4 |accessdate=31. desember 2010}}</ref> Nye egenskaper blir ofte implementert for å forbedre Linuxkjernens sikkerhet.<ref>{{cite book |last=Hatch |first=Brian |date=15. juli 2008 |title=Hacking Exposed Linux: Linux Security Secrets and Solutions |url=https://books.google.com/books?id=f5Vz08spzw8C&pg=PA524 |publisher=[[McGraw-Hill Osborne Media]] |page=524 |isbn=0-07-226257-5 |accessdate=31. desember 2010}}</ref><ref>{{cite book |last=Jaeger |first=Trent |date=7. oktober 2008 |title=Operating System Security |url=https://books.google.com/books?id=P4PYPSv8nBMC&pg=PA122 |publisher=Morgan and Claypool Publishers |page=122 |isbn=1-59829-212-9 |accessdate=31. desember 2010}}</ref> Kritikere har anklaget Linuxkjernens utviklere for å dekke over sikkerhetshull eller for å ikke informere om dem; i juli 2008 reagerte Linus Torvalds på kritikken med følgende uttalelse:<ref>{{cite web|url=http://kerneltrap.org/Linux/Security_Bugs_and_Full_Disclosure |title=Security Bugs and Full Disclosure |last=Andrews |first=Jeremy |date=16. juli 2008 |publisher=[[KernelTrap]] |accessdate=31. desember 2010 |archiveurl=https://web.archive.org/web/20080719130436/http://kerneltrap.org/Linux/Security_Bugs_and_Full_Disclosure |archivedate=2008-07-19 |url-status=dead }}</ref><ref>{{cite web |url=http://seclists.org/fulldisclosure/2008/Jul/276 |title=Linux's unofficial security-through-coverup policy |last=Spengler |first=Brad |date=16. juli 2008 |mailinglist=Full Disclosure |accessdate=31. desember 2010}}</ref> {{Sitat|Personlig betrakter seg sikkerhetsfeil for å være bare «normale feil». Jeg dekker ikke over dem, men jeg har heller ikke noen tenkelig grunn til å mene at det er en god ide å oppspore dem og kunngjøre dem som noe spesielt ... en grunn til at jeg nekter å bry meg om hele sikkerhets-sirkuset er at jeg mener at dette glorifiserer – og således oppmuntrer til – feil adferd. Det skaper «helter» av sikkerhetsfolk, som om folk som ikke fikser normale feil ikke er viktige. Faktisk er alle de normale kjedelige feilene viktigere, nettopp fordi det er så mange av dem. Jeg tror ikke at et eller annet spektakulært sikkerhetshull burde glorifiseres eller få oppmerksomhet som så mye mer «spesielt» enn et tilfeldig spektakulært krasj som skyldes feil.|}} Linuxdistribusjoner lanserer ofte sikkerhetsoppdateringer til Linuxkjernen. Noen av dem (deriblant [[Debian]], [[Ubuntu (operativsystem)|Ubuntu]], [[Red Hat Enterprise Linux]] og [[SUSE Linux]]) tilbyr egne versjoner med [[langtidsstøtte]] hvor en spesiell versjon av Linuxkjernen oppdateres over en lengre periode. === Kjernepanikk og oopser === {{utdypende|Kjernepanikk|Linuxkjernens oopser}} [[Fil:Kernel-panic.jpg|thumb|En [[kjernepanikk]] i Linux.{{byline|Foto: Kevin|16. desember 2005}}]] En [[kjernepanikk]] er en uopprettelig systemfeil som oppdages av Linuxkjernen, i motsetning til lignende feil som oppdages av kode i brukermodus. Kjernen indikerer en slik tilstand ved å kalle funksjonen <code>panic()</code> i filen <code>sys/system.h</code>. De fleste tilfeller av kjernepanikk skyldes uhåndterte [[unntakshåndtering|unntak]] i kjernen, slik som referanser til ugyldige minneadresser. De indikerer typisk en programmeringsfeil et eller annet sted i kjeden av kall som fører til panikken. De kan også indikere en feil med maskinvaren, slik som feil i RAM eller i de aritmetiske funksjoner i mikroprosessoren som er forårsaket av en [[Pentium FDIV bug|mikroprosessorfeil]], en overhetet eller skadd mikroprosessor eller en [[myk feil]]. En rapport om ikke-fatale programvarefeil i kjernen blir kalt et «[[Linuxkjernens oopser|oops]]»; slike avvik fra korrekt adferd av Linuxkjernen kan føre til fortsatt kjøring, men med redusert pålitelighet.<ref>{{cite web |url=http://lkml.iu.edu/hypermail/linux/kernel/0303.1/0009.html |title=Re: what's an OOPS |last=Bradford |first=John |date=8. mars 2003 |mailinglist=[[LKML]] |accessdate=30. oktober 2010}}</ref> Disse krasjrapportene blir automatisk samlet og kan sendes [[Upstreaming (programvare)|upstream]] av ulik programvare, slik som for eksempel programmet ''kernel oops'',<ref>{{cite web |url=http://linux.die.net/man/8/kerneloops |title=kerneloops(8) - Linux man page |publisher=Linux.die.net |accessdate=30. oktober 2010}}</ref> ''Automated Bug-Reporting Tool'' (ABRT) i distribusjonene [[Fedora (Linux)|Fedora]], [[Red Hat Enterprise Linux]], [[CentOS]] etc.<ref>{{cite web |url=http://fedoraproject.org/wiki/Features/ABRTF12 |title=Features/ABRTF12 |date=3. august 2009 |publisher=FedoraProject |accessdate=30. oktober 2010}}</ref> og ''apport'' i distribusjonen [[Ubuntu (operativsystem)|Ubuntu]]. KernelOops.org samler disse rapportene og utgir statistikk på deres hjemmeside.<ref>{{cite web |url=http://kerneloops.org |title=Kerneloops.org |publisher=Kerneloops.org |accessdate=1. juli 2017 |url-status=dead |archiveurl=https://archive.today/20080906142401/http://kerneloops.org/ |archivedate=2008-09-06 |tittel=Arkivert kopi |besøksdato=2017-07-01 |arkivurl=https://archive.today/20080906142401/http://kerneloops.org/ |arkivdato=2008-09-06 |url-status=død }}</ref> Kjernens panikkmeldinger kan ikke bli skrevet ut på en synlig måte, ved å ta i bruk grafikken på en stasjonær datamaskin. For å avluse slike tilstander må andre metoder benyttes, slik som å tilknytte en [[RS-232|serieport]]. === Live oppdateringer av Linuxkjernen === Oppdateringer av Linuxkjernen, som kan installeres uten å omstarte datamaskinen, er tilgjengelige i form av [[patch|live patcing]]. Programvaren [[Ksplice]], som ble lansert 28. april 2008, sørget for dette. Den 21. juli 2011 ble denne oppkjøpt av [[Oracle (selskap)|Oracle Corporation]]. Den 26. februar 2014 lanserte selskapet [[Red Hat]] på sin side programmet [[kpatch]], mens [[SuSE]] lanserte [[kGraft]] den 27. mars 2014. De utgjør et minimalistisk grunnlag for live patching. De ble integrert i Linuxkjernens versjon 4.0 den 12. april 2015, og danner essensen i kjernens [[ftrace]]-funksjonalitet. De danner en [[API (programmering)|API]] for kjernemodulene og et [[Binærkompatibilitet|binærgrensesnitt]] for programmer i brukermodus. Versjon 4.0 av Linuxkjernen støtter bare x86-arkitekturen og mangler mekanismer som sikrer konsistens på [[subrutine|funksjonsnivå]] mens oppdateringer pågår. Det pågår imidlertid arbeid med å integrere dette i Linuxkjernen.<ref>{{cite web | url = http://kernelnewbies.org/Linux_4.0#head-9aa7c8499b42911a48c02b24f367bf2bc6db8606 | title = Linux kernel 4.0, Section 1.2. Live patching | date = 26. april 2015 | accessdate = 27. april 2015 | website = kernelnewbies.org }}</ref><ref>{{cite web | url = https://lwn.net/Articles/634649/ | title = A rough patch for live patching | date = 25. februar 2015 | accessdate = 27. april 2015 | author = Jonathan Corbet | publisher = [[LWN.net]] }}</ref><ref>{{cite web | url = https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1d9c5d79e6e4385aea6f69c23ba543717434ed70 | title = kernel/git/torvalds/linux.git: Pull live patching infrastructure from Jiri Kosina (Linux kernel source tree) | date = 11. februar 2015 | accessdate = 27. april 2015 | website = [[kernel.org]] }}</ref> === Filsystemer === Linuxkjernen har hatt støtte for et tyvetalls ulike [[filsystem]]er. Nedenfor er noen av de mest toneangivende beskrevet. ==== MINIX file system ==== {{utdypende|MINIX file system}} Dette filsystemet ble benyttet av [[MINIX]], som var forgjengeren til Linux. Det ble introdusert i 1987 sammen med MINIX 1.0. Det støttes av Linuxkjernen, men er lite brukt av Linuxbrukere i dag. ==== extended file system (ext) ==== {{utdypende|extended file system}} Dette ble utviklet for å overvinne visse begrensninger i MINIX file system, og hadde en [[metadata]]struktur som var inspirert av [[Berkeley Fast File System]] i [[Berkeley Software Distribution]] (BSD).<ref name="Mauerer2010">{{cite book |first=Wolfgang |last=Mauerer |title=Professional Linux Kernel Architecture |publisher=John Wiley & Sons |year=2010 |url=https://books.google.com/books?id=-6zvRFEfQ24C&pg=PT490}}</ref> ext debuterte den 5. juli 1992 i versjon 0.96c av Linuxkjernen, og var den første implementasjonen som benyttet et [[virtuelt filsystem]]. Ext kunne håndtere filer på opptil 2 [[gigabyte]] i størrelse.<ref>{{Cite web | url = http://www.ibm.com/developerworks/linux/library/l-anatomy-ext4/ | title = Anatomy of ext4 | last = Jones | first = M. Tim | date = 17. februar 2009 | accessdate = 2012-02-08 | publisher = IBM Developer Works }}</ref> ext ble erstattet av [[ext2]] og [[xiafs]]. Den 14. januar 1997 ble ext fjernet fra versjon 2.1.21 av Linuxkjernen, og er ikke lenger i bruk. ==== Xiafs ==== {{utdypende|Xiafs}} Xiafs ble lansert den 13. mars 1993 i versjon 0.99.7 av Linuxkjernen. Det var ment å erstatte extended file system (ext) og konkurrerte i begynnelsen med ext2. Det ble fjernet den 14. januar 1997 fra versjon 2.1.21 av Linuxkjernen sammen med ext. ==== Second extended file system (ext2) ==== {{utdypende|ext2}} [[Fil:Mandriva 2010.png|thumb|Skjermbilde av [[Mandriva Linux]] 2010. Denne distribusjonen benyttet filsystemet [[Journaled File System]].{{byline|Foto:Xurdus|12. november 2009}}]] ext2 eller ''second extended filesystem'' («det andre utvidede filsystem») var et POSIX-kompatibelt filsystem som ble lansert den 13. mars 1993 i versjon 0.99.7 av Linuxkjernen. ext2 var en erstatning for [[extended file system]] (ext); i begynnelsen konkurrerte det med filsystemet [[xiafs]], men ble etter hvert ledende. Dets [[metadata]]struktur var inspirert av det tidligere [[Berkeley Fast File System]] i [[Berkeley Software Distribution]] (BSD).<ref name = "Mauerer2010" /> ext2 benyttes fortsatt på lagringsmedia med [[flashminne]] (slik som [[Secure Digital]] og [[minnepinne]]r) fordi mangelen på en [[journal]] øker ytelsen og minimaliserer antall skrivinger (flashminne har et begrenset antall skrivesykluser). Avhengig av størrelsen på [[blokk (datalagring)|blokkene]], hadde ext2 støtte for harddisker på maksimalt 2–32 [[tebibyte]] (TiB), og for datafiler med maksimal størrelsesorden på mellom 16 [[gibibyte]] (GiB) og 2 tebibyte (TiB). ext2 støttet lagring av datafiler med rett dato innenfor tidsrommet 14. desember 1901 og 18. januar 2038 i [[den gregorianske kalenderen]]. ==== Third extended filesystem (ext3) ==== {{utdypende|ext3}} [[ext3]] eller ''third extended filesystem'' («det tredje utvidede filsystem») er et tidligere POSIX-kompatibelt og [[journalførende filsystem]]. Det var etterfølgeren til ext2, og ble en del av versjon 2.4.15 av Linuxkjernen den 23. november 2001.<ref>[https://www.kernel.org/pub/linux/kernel/v2.4/ChangeLog-2.4.15 ChangeLog-2.4.15], Index of /pub/linux/kernel/v2.4, kernel.org, 23. november 2001</ref> ext3 skilte seg fra ext2 på tre områder. Det første var innføringen av en journal, noe som økte stabiliteten og fjernet behovet for å kjøre en sjekk av filsystemet dersom [[datamaskin]]en skulle krasje. Det andre var at filsystemet kunne vokse i tilkoblet ([[Online og offline|online]]) tilstand. Det tredje var at [[HTre (datastruktur)|HTrær]] ble benyttet som [[datastruktur]] for å indeksere større [[Mappe (filsystem)|filkataloger]].<ref>[[Theodore Ts'o|Theodore Yue Tak Ts'o]], Badari Pulavarty, Suparna Bhattacharya: [http://ext2.sourceforge.net/2005-ols/paper-html/node3.html Directory indexing] {{Wayback|url=http://ext2.sourceforge.net/2005-ols/paper-html/node3.html |date=20190718230754 }}, State of the Art: Where we are with the Ext3 filesystem, IBM Linux Technology Center, 26. juni 2005</ref> Dette økte skalerbarheten fra en praktisk grense på noen få tusen filer i ext2 til titalls millioner av filer per filkatalog. Avhengig av størrelsen på [[blokk (datalagring)|blokkene]], hadde ext3 støtte for [[harddisk]]er på maksimalt 4–32 [[tebibyte]] (TiB), og for datafiler med maksimal størrelsesorden på mellom 16 [[gibibyte]] (GiB) og 2 tebibyte (TiB). ext3 støttet lagring av datafiler med rett dato innenfor tidsrommet 14. desember 1901 og 18. januar 2038 i [[den gregorianske kalenderen]]. ext3 manglet dynamisk [[inode]]allokering og ''[[extent]]s''. Metadata hadde en fast størrelse, ble plassert på velkjente steder og datastrukturene hadde en viss redundans. Ved alvorlige datakrasj, var filene i ext2 og ext3 i større grad gjenopprettbare enn i et trebasert filsystem. Den 9. desember 2015 ble ext3 fjernet fra versjon 4.3 av Linuxkjernen.<ref>Michael Larabel: [https://www.phoronix.com/scan.php?page=news_item&px=Linux-Kernel-Dropping-EXT3 EXT3 File-System Driver To Be Removed From The Linux Kernel], Phoronix, 15. juli 2015</ref> ==== XFS ==== {{utdypende|XFS}} [[Fil:Elivescreenshot.jpeg|thumb|Skjermbilde av [[Linuxdistribusjon]]en [[Elive]]. Elive benyttet filsystemet [[ReiserFS]].{{byline|Foto:Jimmy Robaer|10. juli 2007}}]] XFS er et 64-biter<ref name="overview">{{cite web |url=http://oss.sgi.com/projects/xfs/index.html |title=XFS Overview |publisher=Silicon Graphics International Corp |date=2013-07-02 |accessdate=2013-07-02 |url-status=dead |archiveurl=https://web.archive.org/web/20130606024601/http://oss.sgi.com/projects/xfs/index.html |archivedate=2013-06-06 |tittel=Arkivert kopi |besøksdato=2013-07-02 |arkivurl=https://web.archive.org/web/20130606024601/http://oss.sgi.com/projects/xfs/index.html |arkivdato=2013-06-06 |url-status=død }} {{Kilde www |url=http://oss.sgi.com/projects/xfs/index.html |tittel=Arkivert kopi |besøksdato=2017-04-21 |arkiv-dato=2013-06-06 |arkiv-url=https://web.archive.org/web/20130606024601/http://oss.sgi.com/projects/xfs/index.html |url-status=yes }}</ref> POSIX-kompatibelt og journalførende filsystem som ble lansert av [[Silicon Graphics]] i oktober 1993.<ref name="User guide">[http://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/ch01s02.html 1.2. A Brief History of XFS] {{Wayback|url=http://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/ch01s02.html |date=20140714224038 }}, XFS User Guide, A guide for XFS filesystem users and administrators, Edition 0, Silicon Graphics Inc., 2006</ref> Filsystemet var standard i operativsystemet [[IRIX]] fra versjon 5.3,<ref name="User guide"/> som ble lansert i desember 1994. XFS er etterfølgeren til [[Extent File System]] (EFS), som var filsystemet til IRIX før versjon 5.3. I mai 2000 ble XFS lisensiert under [[GNU General Public License]] (GPL) versjon 2. Den 18. februar 2004 ble XFS innlemmet i versjon 2.4.25 av Linuxkjernen, og den 18. desember 2003 ble filsystemet innlemmet i Linuxkjernens versjon 2.6. XFS støtter [[harddisk]]er på opptil 18 [[exbibyte]] (EiB) (16 tebibyte (TiB) på 32-biter Linux) og [[datafil]]er på opptil 9 exbibyte (TiB) (16 tetibyte (TiB) på 32-biter Linux).<ref name="overview"/> Dette er noe mer enn ext4 og noe mindre enn btrfs. ==== Journaled File System (JFS) ==== {{utdypende|Journaled File System}} Journaled File System (JFS) er et [[64-biter]] journalførende filsystem som er utviklet av [[IBM]]. JFS ble lansert i februar 1990 i versjon 3.1 av UNIX-avarten [[AIX]].<ref>[https://wiki.archlinux.org/index.php/JFS JFS], wiki.archlinux.org, 30. august 2016</ref> I september 1994 ble det også tatt i bruk i [[OS/2]] 3.0 «Warp».<ref>[https://www.elstel.org/OS2Warp/InstallUpdate.html OS/2 Warp Installation and Update Manual], IBM</ref> Det finnes to generasjoner av filsystemet, ''JFS'' og ''JFS2''.<ref name="faq">{{cite web |title=A mini-FAQ for JFS |publisher=JFS for Linux project |url=http://jfs.sourceforge.net/project/pub/faq.txt}}</ref><ref name="JFS1vsJFS2">{{cite web| title=Comparison of JFS1 and JFS2 on AIX |publisher=IBM |url=http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.baseadmn/doc/baseadmndita/fs_jfs_jfs2.htm}}</ref> JFS2 ble integrert i Linuxkjernen fra versjon 2.4.18<ref name="interview">{{cite web |title= Interview With the People Behind JFS, ReiserFS & XFS |url=http://www.osnews.com/story.php/69/Interview-With-the-People-Behind-JFS-ReiserFS-and-XFS}}</ref> og er fri programvare under GNU General Public License. ==== Veritas File System ==== {{utdypende|Veritas File System}} Veritas File System (''VxFS''), også kalt ''JFS'' og ''OnlineJFS'', er et [[extent]]-basert [[filsystem]] som ble utviklet av [[AT&T]]s [[Unix System Laboratories]], og lansert i 1991 av [[VERITAS Software]].<ref>{{cite web |url = http://www.patentstorm.us/patents/6871271.html |title = Incrementally restoring a mass storage device to a prior state |date = 2005-03-22 |accessdate = 2007-11-21 |url-status = død |archiveurl = https://web.archive.org/web/20080309193205/http://www.patentstorm.us/patents/6871271.html |archivedate = 2008-03-09 |tittel = Arkivert kopi |besøksdato = 2007-11-21 |arkivurl = https://web.archive.org/web/20080309193205/http://www.patentstorm.us/patents/6871271.html |arkivdato = 2008-03-09 |url-status = død }} {{Kilde www |url=http://www.patentstorm.us/patents/6871271.html |tittel=Arkivert kopi |besøksdato=2017-06-04 |arkiv-dato=2008-03-09 |arkiv-url=https://web.archive.org/web/20080309193205/http://www.patentstorm.us/patents/6871271.html |url-status=yes }}</ref> Det er det primære filsystem i operativsystemet [[HP-UX]], med online støtte for [[defragmentering]] under navnet ''OnlineJFS''.<ref>{{cite web |url=http://mailman.eng.auburn.edu/pipermail/veritas-vx/2000-April/000163.html |title=Post in the veritas-vx mailing list explaining the differences between JFS and OJFS |author=Donna Yobs |date=2000-04-10 |accessdate=2007-11-21 |archiveurl=https://web.archive.org/web/20080309165600/http://mailman.eng.auburn.edu/pipermail/veritas-vx/2000-April/000163.html |archivedate=2008-03-09 |url-status=dead }}</ref> Det blir også støttes i [[AIX]], [[Solaris (operativsystem)|Solaris]] og [[SCO OpenServer]] og ble tidligere også støttet av [[SINIX]] og [[UnixWare]]. Dette filsystemet ble støttet fra versjon 2.6.0 av Linuxkjernen, og ble tidligere definert av <code>fs/Konfig</code>. Fra versjon 2.6.29 av Linuxkjernen, som ble lansert den 23. mars 2009, har det vært definert av <code>fs/freevxfs/Kconfig</code>.<ref>[http://cateee.net/lkddb/web-lkddb/VXFS_FS.html CONFIG_VXFS_FS: FreeVxFS file system support (VERITAS VxFS™ compatible)], Linux Kernel Driver Database, 2017</ref> Veritas File System støtter harddisker på opptil 128 [[zettabyte]] (ZB) og filer på opptil 8 [[exabyte]] (EB). ==== ReiserFS ==== {{utdypende|ReiserFS}} ReiserFS er et POSIX-kompatibelt journalførende filsystem som ble designet og utviklet av et team hos [[Namesys]] ledet av [[Hans Reiser]]. ReiserFS var det første journalførende filsystemet som ble støttet av Linuxkjernen; det ble integrert i Linuxkjernens versjon 2.4.1. ReiserFS støtter harddisker på opptil 6 tetibye (TiB) og datafiler på opptil 1 exbibyte (EiB) (8 tetibyte (TiB) på 32-biter Linux). Datafiler i ext4 kan lagres med rett dato innenfor tidsrommet 14. desember 1901 og 18. januar 2038 i den gregorianske kalenderen. ==== Reiser4 ==== {{utdypende|Reiser4}} [[Fil:Suse 10.0 Gnome.png|thumb|[[SUSE Linux]] 10.0 med [[skrivebordsmiljø]]et [[GNOME]]. [[OpenSUSE]] 13.2 var blant de første [[Linuxdistribusjon]]er som benyttet [[Btrfs]] som standard.{{byline|Foto:SuSE|8.mai 2009|}}]] Reiser4 er et journalførende filsystem som er utviklet av Hans Reiser og Namesys, som etterfølgeren til ReiserFS. Det ble innlemmet i versjon 3.15 av Linuxkjernen den 14. august 2014. Prosjektet har vært sponset av [[Defense Advanced Research Projects Agency]] (DARPA) og [[Linspire]]. Filsystemet blir fortsatt utviklet,<ref>{{cite news |url=http://phoronix.com/scan.php?page=news_item&px=Reiser4-Linux-4.5-Support |author=Michael Larabel |date=30. mars 2016 |title=Reiser4 Now Available For Linux 4.5 Kernel |work=Phoronix }}</ref> men det er tvilsomt om disse endringene blir tilføyd Linuxkjernen i nær fremtid, ettersom opphavsmannen soner en fengselsdom.<ref name=not-in-linux-4.0>{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.0-Missing-Features |author=Michael Larabel |date=23. februar 2015 |title=KDBUS & Other Features You Won't Find In The Linux 4.0 Kernel |work=Phoronix }}</ref> ==== ZFS og OpenZFS ==== {{utdypende|ZFS|OpenZFS}} [[ZFS]] (''Zettabyte File System'') er et kombinert [[filsystem]] og en [[logisk volumhåndterer]] som ble utviklet av [[Sun Microsystems]] for operativsystemet [[OpenSolaris]] i 2005.<ref>[https://blogs.oracle.com/bonwick/entry/zfs_the_last_word_in ZFS: The Last Word in Filesystems], Jeff Bonwick's blog, Oracle Corporation, 31. oktober 2005</ref> Det ble i utgangspunktet lisensiert under en [[åpen kildekode]]lisens, og integrert i Linuxkjernen. [[Oracle (selskap)|Oracle Corporation]] endret i 2010 lisensen til en [[proprietær programvare|proprietær lisens]] for operativsystemet [[Solaris (operativsystem)|Solaris]].<ref name="arstechnica">Ryan Paul: [http://arstechnica.com/information-technology/2010/06/uptake-of-native-linux-zfs-port-hampered-by-license-conflict/ Uptake of native Linux ZFS port hampered by license conflict], arstechnica.com, 6. september 2009</ref> Grunnet lisensieringsproblemer er det ikke mulig å videreutvikle ZFS for Linuxkjernen,<ref name="arstechnica"/><ref>Dustin Kirkland: [https://insights.ubuntu.com/2016/02/18/zfs-licensing-and-linux/ ZFS Licensing and Linux], ubuntu.com, 18. februar 2016</ref> selv om en rekke Linuxdistribusjoner har hatt støtte for det.<ref name="ZFSonLinux">[http://zfsonlinux.org/ ZFS On Linux], Lawrence Livermore National Laboratory</ref> Eksempler er [[Arch Linux]], Debian, [[Fedora (Linux)|Fedora]], Gentoo, [[OpenSUSE]], Red Hat Enterprise Linux, [[CentOS]] og [[Ubuntu (operativsystem)|Ubuntu]]<ref name="ZFSonLinux"/>. [[OpenZFS]] oppstod som en [[fork]] av ZFS i 2010,<ref>Bryan Cantrill: [http://www.slideshare.net/bcantrill/fork-yeah-the-rise-and-development-of-illumos Fork Yeah! The rise and Development of Illumos], slideshare.net, 8. desember 2011</ref> og støttes også av Linuxkjernen. Ubuntu 16.04 LTS («Xenial Xerus»), som ble lansert den 21. april 2016, gjør det mulig å installere OpenZFS som filsystem.<ref>[http://forums.theregister.co.uk/forum/1/2016/04/21/ubuntu_16_04_lts_launched/ Ubuntu 16.04 LTS arrives today complete with forbidden ZFS] på [[The Register]] 21. april 2016)</ref><ref>{{cite web|url=http://arstechnica.com/gadgets/2016/02/zfs-filesystem-will-be-built-into-ubuntu-16-04-lts-by-default/|title=ZFS filesystem will be built into Ubuntu 16.04 LTS by default|work=Ars Technica}}</ref><ref name="phoronix-Ubuntu16.04-ZFS">{{cite web|last1=Larabel|first1=Michael|title=Taking ZFS For A Test Drive On Ubuntu 16.04 LTS|url=https://www.phoronix.com/scan.php?page=article&item=ubuntu-xenial-zfs&num=1|website=phoronix|publisher=Phoronix Media|accessdate=25. april 2016}}</ref><ref name="UbuntuMATE-ZFS">{{cite web|title=How to install ubuntu mate onto single sdd with zfs as main fs|url=https://ubuntu-mate.community/t/how-to-install-ubuntu-mate-onto-single-sdd-with-zfs-as-main-fs/3535|website=Ubuntu MATE|publisher=ubuntu-mate.community|accessdate=25. april 2016}}</ref> ZFS innbefatter beskyttelse mot [[datakorrupsjon]], svære lagringskapasiteter, effektiv datakompresjon, integrasjon av konsepter om [[diskvolum|volumhåndtering]], [[Snapshot (datalagring)|snapshots]], og [[copy-on-write]] kloner, kontinuerlig integritetssjekking og automatisk reparering, RAID-Z og [[aksesskontrolliste]]r i [[Network File System|Network File System versjon 4]] (NFSv4). Filsystemet støtter harddisker på 256 [[zebibyte]]s og datafiler på 16 exibytes. Lisensieringsproblemene med ZFS har bidratt til at [[btrfs]] vokste frem som et alternativ (se nedenfor). ZFS har mange likheter med btrfs, og kunne ha blitt en konkurrent hvis det ikke hadde vært for lisensieringsproblemene som er knyttet til det.<ref>[https://www.reddit.com/r/linux/comments/32cu9w/zfs_vs_btrfs/ ZFS Vs. BTRFS], reddit.com, 2015</ref> ZFS/OpenZFS er copy-on-write filsystemer liksom btrfs. De er imidlertid implementert som [[hashtabell]]er, mens btrfs er implementert ved hjelp av [[B-tre|B-trær]]. ==== Fourth extended filesystem (ext4) ==== {{utdypende|ext4}} ext4, eller ''fourth extended filesystem'' («det fjerde utvidede filsystem»), er et POSIX-kompatibelt og journalførende filsystem. Det er etterfølgeren til filsystemet ext3, slik ext3 var etterfølgeren til [[ext2]]. ext4 er også bakoverkombatibelt med ext3. ext4 er inspirert av finesser som ble utviklet for filsystemet [[Lustre (filsystem)|Lustre]] mellom 2003 og 2006, og som ga økt lagringsplass og ytelsesforbedringer.<ref name="Mathur">{{cite web |title = The new ext4 filesystem: current status and future plans |publisher = Red Hat |location = Ottawa, ON, CA |year = 2007 |work = Proceedings of the Linux Symposium |url = http://www.linuxsymposium.org/archives/OLS/Reprints-2007/mathur-Reprint.pdf |accessdate = 2008-01-15 |format = PDF |last = Mathur |first = Avantika |last2 = Cao |first2 = MingMing |last3 = Bhattacharya |first3 = Suparna |last4 = Dilger |first4 = Andreas |last5 = Tomas |first5 = Alex |last6 = Vivier |first6 = Laurent |url-status = død |archiveurl = https://web.archive.org/web/20100706040230/http://www.linuxsymposium.org/archives/OLS/Reprints-2007/mathur-Reprint.pdf |archivedate = 2010-07-06 |tittel = Arkivert kopi |besøksdato = 2008-01-15 |arkivurl = https://web.archive.org/web/20100706040230/http://www.linuxsymposium.org/archives/OLS/Reprints-2007/mathur-Reprint.pdf |arkivdato = 2010-07-06 |url-status = død }} {{Kilde www |url=http://www.linuxsymposium.org/archives/OLS/Reprints-2007/mathur-Reprint.pdf |tittel=Arkivert kopi |besøksdato=2017-03-18 |arkiv-dato=2010-07-06 |arkiv-url=https://web.archive.org/web/20100706040230/http://www.linuxsymposium.org/archives/OLS/Reprints-2007/mathur-Reprint.pdf |url-status=yes }}</ref> Den 21. oktober 2008 ble den endelige versjonen lansert i versjon 2.6.28 av Linuxkjernen. I ext4 ble [[Blokk (datalagring)|blokklagringen]] i ext2 og ext3 erstattet av [[extent]]s som reduserer fragmentering og gir økt ytelse på store [[datafil]]er. En enkel extent i ext4 kan opprette inntil 128 [[mebibyte]] (MiB) med kontinuerlig diskplass innenfor en blokk på 4 [[kibibyte]] (Kib). Opptil fire ''extents'' kan lagres i en [[inode]].<ref name = "Mathur"/> Når det er mer enn fire ''extents'' i en datafil, blir resten indeksert i et [[Tre (datastruktur)|tre]].<ref>{{cite web |url=https://digital-forensics.sans.org/blog/2011/03/28/digital-forensics-understanding-ext4-part-3-extent-trees |author=Hal Pomeranz |date=28. mars 2011 |title=Understanding EXT4 (Part 3): Extent Trees |work=SANS Digital Forensics and Incident Response Blog |access-date=2017-03-18 |archive-date=2017-05-29 |archive-url=https://web.archive.org/web/20170529010040/https://digital-forensics.sans.org/blog/2011/03/28/digital-forensics-understanding-ext4-part-3-extent-trees |url-status=yes }}</ref> ext4 er hurtigere og mer stabilt enn ext3, fordi datafiler fragmenteres meget sjelden på grunn av «forsinket allokering». ext4 støtter [[harddisk]]er på opptil 1 [[exbibyte]] (EiB), og datafiler på opptil 16 tebibyte (TiB). Datafiler kan lagres med rett dato innenfor tidsrommet 14. desember 1901 og 10. mai 2446 i den gregorianske kalenderen. ==== B-tree file system (btrfs) ==== {{utdypende|btrfs}} [[Fil:B-tree.svg|thumb|400px|right|Et [[B-tre]] av femte orden.{{byline|Illustrasjon: CyHawk|5. oktober 2010}}]] Btrfs, en [[forkortelse]] for ''B-tree file system'', uttalt ''butter F S'',<ref>[[Oracle Corporation]]: [http://streaming.oracle.com/ebn/podcasts/media/20209545_Oracle-Linux-7.mp4 Oracle Linux 7 with Q&A with Wim Coekaerts] {{Wayback|url=http://streaming.oracle.com/ebn/podcasts/media/20209545_Oracle-Linux-7.mp4 |date=20160818163705 }}, 2014</ref> ''better F S'',<ref>Amanda McPherson: [http://www.linuxfoundation.org/news-media/blogs/browse/2009/06/conversation-chris-mason-btrfs-next-generation-file-system-Linux A Conversation with Chris Mason on BTRfs: the next generation file system for Linux] {{Wayback|url=http://www.linuxfoundation.org/news-media/blogs/browse/2009/06/conversation-chris-mason-btrfs-next-generation-file-system-Linux |date=20160307071419 }}, [[Linux Foundation]], 22. juni 2009</ref> eller ''b-tree F S'',<ref>Valerie Henson: [http://mirror.linux.org.au/pub/linux.conf.au/2008/Thu/mel8-262.ogg Chunkfs: Fast file system check and repair], 31. januar 2008</ref> er et [[copy-on-write]] og journalførende filsystem. Det er etterfølgeren til ext4, og løser problemer knyttet til [[Pool (informatikk)|pooling]], [[Snapshot (datalagring)|snapshots]], [[sjekksum]]mer og datasystemer hvor mange forskjellige typer [[I/O|innmatningsutstyr]] er integrerte.<ref name="CM090622">{{cite web |title=A Conversation with Chris Mason on BTRfs: the next generation file system for Linux |first=Amanda |last=McPherson |date=22. juni 2009 |accessdate=2009-09-01 |publisher=[[Linux Foundation]] |url=http://www.linuxfoundation.org/news-media/blogs/browse/2009/06/conversation-chris-mason-btrfs-next-generation-file-system-linux |archiveurl=https://www.webcitation.org/68ektBKkv?url=http://www.linuxfoundation.org/news-media/blogs/browse/2009/06/conversation-chris-mason-btrfs-next-generation-file-system-linux |archivedate=2012-06-24 |url-status=dead |tittel=Arkivert kopi |besøksdato=2009-09-01 |arkivurl=https://www.webcitation.org/68ektBKkv?url=http://www.linuxfoundation.org/news-media/blogs/browse/2009/06/conversation-chris-mason-btrfs-next-generation-file-system-linux |arkivdato=2012-06-24 |url-status=død }}</ref> Filsystemet er POSIX-kompatibelt.<ref>[https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes SysadminGuide], wiki.kernel.org, 11. juni 2016</ref> En utviklingsversjon ble integrert i versjon 2.6.29 av Linuxkjernen den 23. mars 2009.<ref name="Kernel 2.6.29">Kernel Newbies: [https://kernelnewbies.org/Linux_2_6_29 Linux 2.6.29], 23. mars 2009</ref> En stabil versjon ble lansert 29. mars 2013 i versjon 3.10 av Linuxkjernen.<ref name="Kernel 3.10">Kernel Newbies: [http://kernelnewbies.org/Linux_3.10 Linux 3.10], 30. juni 2013</ref> Det støtter [[defragmentering]] (også automatisk defragmentering gjennom opsjonen ''autodefrag''),<ref name="KN 3.0">[https://kernelnewbies.org/Linux_3.0#head-3e596e03408e1d32a7cc381d6f54e87feee22ee4 1.1. Btrfs: Automatic defragmentation, scrubbing, performance improvements], Linux 3.0, kernelnewbies.org, 22. juli 2012</ref> ''[[data scrubbing]]'',<ref name="KN 3.0"/> [[online og offline|online]] endring av størrelsen på [[diskvolum]]er,<ref name="resizing">[https://docs.oracle.com/cd/E37670_01/E37355/html/ol_use_case2_btrfs.html 5.5 Resizing a Btrfs File System], Oracle® Linux Administrator's Solutions Guide for Release 6, 2016</ref> offline [[fsck|filsystemsjekk]] (fsck),<ref name="fsck">[https://btrfs.wiki.kernel.org/index.php/Btrfsck Btrfsck], wiki.kernel.org, 6. juli 2015</ref> transparent [[datakompresjon]] ([[zlib]] og [[Lempel-Ziv-Oberhumer]])<ref name="compression">[https://btrfs.wiki.kernel.org/index.php/Compression Compression], wiki.kernel.org, 15. juli 2015</ref><ref name="inode">[https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=63541927c8d11d2686778b1e8ec71c14b4fd53e4 Btrfs: add support for inode properties], git.kernel.org, 7. januar 2014</ref> av [[datafil]]er eller logiske disker, [[union mount]],<ref name="btrfs_changelog">[https://btrfs.wiki.kernel.org/index.php?title=Changelog#Seed_Device_support Changelog], wiki.kernel.org, 5. oktober 2016</ref> etc. Btrfs støtter [[harddisk]]er på inntil 16 exbibyte (EiB) og filstørrelser på inntil 16 exbibyte (EiB).<ref>[https://www.suse.com/documentation/sles11/stor_admin/data/sec_filesystems_lfs.html Large File Support in Linux], SUSE Storage Administration Guide, 14. mars 2016</ref> Dets [[datastruktur]] er et [[B-tre]], en selvbalanserende [[Tre (datastruktur)|tredatastruktur]], som sorterer data og tillater søking, sekvensiell aksess, innsettelse og sletting i en [[tidskompleksitet|logaritmisk tid]].<ref name="Btrfsdesign">[https://btrfs.wiki.kernel.org/index.php/Btrfs_design Btrfs design], wiki.kernel-org, 11. januar 2015</ref>
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Denne siden er medlem av 5 skjulte kategorier:
Kategori:Artikkelnavn som lett kan forveksles med andre artikkelnavn
Kategori:Artikler med offisielle lenker og uten kobling til Wikidata
Kategori:Artikler med seksjoner som behøver utvidelse
Kategori:Artikler uten offisielle lenker fra Wikidata
Kategori:CS1-vedlikehold: Uheldig URL
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Side
Diskusjon
norsk bokmål
Visninger
Les
Rediger
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon