Linux startproces - Linux startup process
Linux startproces er initialiseringsprocessen i flere trin, der udføres under opstart af en Linux- installation. Det ligner på mange måder BSD og andre bootprocesser i Unix -stil, som det stammer fra.
Opstart af en Linux -installation involverer flere faser og softwarekomponenter, herunder initialisering af firmware , udførelse af en boot loader , indlæsning og opstart af et Linux -kernebillede og udførelse af forskellige opstartsscripts og dæmoner . For hvert af disse faser og komponenter er der forskellige variationer og fremgangsmåder; f.eks. GRUB , coreboot eller Das U -Boot kan bruges som bootloadere (historiske eksempler er LILO , SYSLINUX eller Loadlin ), mens opstartsscripts enten kan være traditionelle init -stil, eller systemkonfigurationen kan udføres via moderne alternativer f.eks. systemd eller Upstart .
Oversigt
Tidlige faser af Linux -opstartsprocessen afhænger meget af computerarkitekturen. IBM PC -kompatibel hardware er en arkitektur Linux ofte bruges på; på disse systemer spiller BIOS en vigtig rolle, som måske ikke har nøjagtige analoger på andre systemer. I det følgende eksempel antages IBM PC -kompatibel hardware:
- BIOS udfører opstartsopgaver, der er specifikke for den egentlige hardwareplatform . Når hardwaren er opregnet, og den hardware, der er nødvendig til opstart, er initialiseret korrekt, indlæser og eksekverer BIOS boot -koden fra den konfigurerede boot -enhed.
- Boot loader præsenterer ofte brugeren med en menu med mulige boot -muligheder og har en standardindstilling, som vælges efter et stykke tid. Når valget er foretaget, indlæser boot loader kernen i hukommelsen, forsyner den med nogle parametre og giver den kontrol.
- Kernen, hvis den komprimeres, vil dekomprimere sig selv. Det opretter derefter systemfunktioner såsom essentiel hardware- og hukommelsessøgning og opkald,
start_kernel()der udfører størstedelen af systemopsætningen (afbrydelser, resten af hukommelsesstyring, initialisering af enhed og driver osv.). Den starter derefter separat, inaktiv proces , planlægger og init -processen , som udføres i brugerrum . - Init består enten af scripts, der eksekveres af skallen (sysv, bsd, runit) eller konfigurationsfiler, der eksekveres af de binære komponenter (systemd, upstart). Init har bestemte niveauer (sysv, bsd) eller mål (systemd), som hver består af et specifikt sæt tjenester (dæmoner). Disse leverer forskellige ikke-operativsystemtjenester og -strukturer og danner brugermiljøet. Et typisk servermiljø starter en webserver, databasetjenester og netværk.
- Det typiske skrivebordsmiljø begynder med en dæmon, kaldet display manager, der starter et grafisk miljø, der består af en grafisk server, der giver en grundlæggende underliggende grafisk stak og en login manager, der giver mulighed for at indtaste legitimationsoplysninger og vælge en session. Når brugeren har indtastet de korrekte legitimationsoplysninger, starter sessionmanageren en session. En session er et sæt programmer, såsom UI -elementer (paneler, desktops, applets osv.), Der tilsammen kan danne et komplet skrivebordsmiljø.
Ved nedlukning kaldes init for at lukke al brugerpladsfunktionalitet på en kontrolleret måde. Når alle de andre processer er afsluttet, foretager init et systemopkald til kernen, der instruerer den om at lukke systemet ned.
Boot loader fase
Opstartslasterfasen varierer efter computerarkitektur. Da de tidligere faser ikke er specifikke for operativsystemet, anses den BIOS-baserede opstartsproces for x86- og x86-64- arkitekturer for at starte, når master boot record (MBR) -koden udføres i reel tilstand og førstetrins boot-loader er indlæst. I UEFI- systemer kan Linux-kernen eksekveres direkte af UEFI-firmware via EFISTUB, men bruger normalt GRUB 2 eller systemd-boot som en boot loader. Nedenfor er en oversigt over nogle populære bootloaders:
- GRUB 2 adskiller sig fra GRUB 1 ved at være i stand til automatisk registrering af forskellige operativsystemer og automatisk konfiguration. Stage1 indlæses og udføres enten af BIOS fra Master boot record (MBR). Den mellemliggende trin loader (stage1.5, normalt core.img) indlæses og udføres af stage1 loader. Anden-trins loader (stage2,/boot/grub/files) indlæses af stage1.5 og viser GRUB-startmenuen, der giver brugeren mulighed for at vælge et operativsystem eller undersøge og redigere opstartsparametre. Efter at en menupost er valgt og valgfrie parametre er givet, indlæser GRUB linux -kernen i hukommelsen og overfører kontrollen til den. GRUB 2 er også i stand til at kæde-laste en anden boot loader. I UEFI -systemer er stage1 og stage1.5 normalt den samme UEFI -applikationsfil (f.eks. Grubx64.efi for x64 UEFI -systemer).
- systemd-boot (tidligere Gummiboot), en bootloader inkluderet i systemd, der kræver minimal konfiguration (kun for UEFI- systemer).
- SYSLINUX/ISOLINUX er en boot loader, der har specialiseret sig i at starte fulde Linux -installationer fra FAT -filsystemer. Det bruges ofte til boot- eller redningsdisketter, live USB'er og andre lette boot -systemer. ISOLINUX bruges generelt af Linux live -cd'er og bootable installations -cd'er.
- refind , en boot manager til UEFI -systemer.
- coreboot er en gratis implementering af UEFI eller BIOS og bruges normalt med systemkortet og feltopgraderinger leveret af leverandøren, hvis det er nødvendigt. Dele af coreboot bliver systemets BIOS og forbliver hjemme i hukommelsen efter opstart.
- Das U-Boot er en boot loader til integrerede systemer. Det bruges på systemer, der ikke har et BIOS/UEFI, men derimod anvender brugerdefinerede metoder til at læse boot loader ind i hukommelsen og udføre det.
Historiske bootloaders, der ikke længere er i almindelig brug, omfatter:
-
LILO forstår eller analyserer ikke filsystemlayout. I stedet
/etc/lilo.confoprettes en konfigurationsfil ( ) i et live system, der kortlægger rå offsetinformation (mapper -værktøj) om placering af kerne- og ramdiske (initrd eller initramfs). Den konfigurationsfil, som indeholder data, såsom boot -partition og kernen sti for hver, samt tilpassede muligheder, hvis nødvendige, bliver derefter skrevet sammen med bootloader kode i MBR bootsector. Når denne bootsektor læses og får kontrol af BIOS, indlæser LILO menukoden og tegner den, hvorefter den bruger gemte værdier sammen med brugerinput til at beregne og indlæse Linux-kernen eller kæde-indlæse enhver anden boot-loader . - GRUB 1 inkluderer logik til at læse almindelige filsystemer i løbetid for at få adgang til dens konfigurationsfil. Dette giver GRUB 1 mulighed for at læse sin konfigurationsfil fra filsystemet frem for at have den integreret i MBR, hvilket gør det muligt at ændre konfigurationen ved kørselstid og angive diske og partitioner i et menneskeligt læsbart format frem for at stole på forskydninger. Den indeholder også en kommandolinjegrænseflade , som gør det lettere at rette eller ændre GRUB, hvis den er forkert konfigureret eller korrupt.
- Loadlin er en boot loader, der kan erstatte en kørende DOS- eller Windows 9x -kerne med Linux -kernen på kørselstidspunktet. Dette kan være nyttigt i tilfælde af hardware, der skal tændes via software, og som sådanne konfigurationsprogrammer er proprietære og kun tilgængelige til DOS. Denne opstartsmetode er mindre nødvendig i dag, da Linux har drivere til en lang række hardwareenheder, men det har set en vis brug i mobile enheder . En anden anvendelse er, når Linux er placeret på en lagerenhed, som ikke er tilgængelig for BIOS til opstart: DOS eller Windows kan indlæse de relevante drivere for at kompensere for BIOS -begrænsningen og starte Linux derfra.
Kerne fase
Den Linux-kernen håndtag alle operativsystemet processer, såsom hukommelse ledelse , opgave planlægning , I / O , InterProcess kommunikation , og den overordnede styresystem. Dette indlæses i to faser - i det første trin indlæses kernen (som en komprimeret billedfil) i hukommelsen og dekomprimeres, og et par grundlæggende funktioner, såsom grundlæggende hukommelsesstyring, opsættes. Kontrol skiftes derefter en sidste gang til hovedprocessens startproces. Når kernen er fuldt operationel - og som en del af dens opstart, efter at den er indlæst og udført - leder kernen efter en init -proces, der skal køres, som (separat) opretter et brugerrum og de processer, der er nødvendige for et brugermiljø og ultimativt login . Selve kernen får derefter lov til at gå inaktiv, underlagt opkald fra andre processer.
For nogle platforme (som ARM 64-bit) skal kernedekompression i stedet udføres af boot loader.
Kernen indlæses typisk som en billedfil, komprimeret til enten zImage- eller bzImage -formater med zlib . En rutine i spidsen for den foretager en minimal mængde hardwareopsætning, dekomprimerer billedet fuldt ud til høj hukommelse og noterer sig enhver RAM -disk, hvis den er konfigureret. Det udfører derefter kernestart via ./arch/i386/boot/headog startup_32 ()(for x86 -baserede processorer) -processen.
Opstartsfunktionen for kernen (også kaldet swapper eller proces 0) etablerer hukommelsesstyring (personsøgningstabeller og hukommelsessøgning), detekterer typen af CPU og eventuel yderligere funktionalitet, f.eks. Floating point- muligheder, og skifter derefter til ikke-arkitekturspecifik Linux kernefunktionalitet via et opkald til start_kernel().
start_kernel udfører en lang række initialiseringsfunktioner. Det opsætter interrupt-håndtering ( IRQ'er ), konfigurerer yderligere hukommelse, starter Init-processen (den første brugerpladsproces) og starter derefter inaktiv opgave via cpu_idle(). Kernestartprocessen monterer også den første RAM -disk ("initrd"), der tidligere blev indlæst som det midlertidige rodfilsystem under opstartsfasen. Initrd gør det muligt at indlæse drivermoduler direkte fra hukommelsen uden at stole på andre enheder (f.eks. En harddisk) og de drivere, der er nødvendige for at få adgang til dem (f.eks. En SATA -driver). Denne opdeling af nogle drivere, der er statisk kompileret til kernen, og andre drivere indlæst fra initrd giver mulighed for en mindre kerne. pivot_root()Rodfilsystemet skiftes senere via et opkald, som afmonterer det midlertidige rodfilsystem og erstatter det med brug af det rigtige, når først sidstnævnte er tilgængeligt. Hukommelsen, der bruges af det midlertidige rodfilsystem, genvindes derefter.
Således initialiserer kernen enheder, monterer rodfilsystemet angivet af boot loader som skrivebeskyttet og kører Init ( /sbin/init), der er udpeget som den første proces, der køres af systemet ( PID = 1). En besked udskrives af kernen ved montering af filsystemet og af Init ved start af Init -processen. Det kan også valgfrit køre Initrd for at tillade opsætning og enhedsrelaterede spørgsmål ( RAM -disk eller lignende) at blive håndteret, før rodfilsystemet er monteret.
Ifølge Red Hat er den detaljerede kerneproces på dette trin derfor opsummeret som følger:
- "Når kernen er indlæst, initialiserer og konfigurerer den øjeblikkeligt computerens hukommelse og konfigurerer den forskellige hardware, der er knyttet til systemet, herunder alle processorer, I/O -delsystemer og lagerenheder. Det leder derefter efter det komprimerede initrd -billede på en forudbestemt placering i hukommelsen, dekomprimerer det, monterer det, og belastninger alle nødvendige drivere. Dernæst er det initialiserer virtuelle enheder relateret til filsystemet, såsom LVM eller software RAID før afmontering initrd diskbillede og frigøre hele hukommelsen diskafbildningen engang besat . Kernen opretter derefter en rodenhed, monterer rodpartitionen skrivebeskyttet og frigør al ubrugt hukommelse. På dette tidspunkt indlæses kernen i hukommelsen og fungerer. Da der imidlertid ikke er nogen brugerprogrammer, der tillader meningsfuld input til system, ikke meget kan gøres med det. " En boot i initramfs-stil ligner, men er ikke identisk med den beskrevne initrd-boot.
På dette tidspunkt, med afbrydelser aktiveret, kan planlæggeren tage kontrol over den overordnede styring af systemet for at give præventiv multi-tasking, og init-processen overlades til at fortsætte opstart af brugermiljøet i brugerrum.
Tidlig brugerplads
initramfs , også kendt som tidlig brugerplads , har været tilgængelig siden version 2.5.46 af Linux-kernen med det formål at erstatte så mange funktioner som muligt, som kernen tidligere ville have udført under opstartsprocessen. Typisk brug af tidligt brugerrum er at opdage, hvilke enhedsdrivere der er nødvendige for at indlæse hovedbrugerrumsfilsystemet og indlæse dem fra et midlertidigt filsystem . Mange distributioner bruger dracut til at generere og vedligeholde initramfs -billedet.
Indledende proces
Når kernen er startet, starter den init -processen. Historisk set var dette "SysV init", som bare blev kaldt "init". Nyere Linux -distributioner vil sandsynligvis bruge et af de mere moderne alternativer, såsom systemd.
Grundlæggende er disse grupperet som styring af operativsystems service .
Se også
Referencer
eksterne links
- Greg O'Keefe - Fra Power Up til Bash Prompt
- IBM beskrivelse af Linux boot -processen på Wayback Machine (arkiveret 31. maj 2008) en developerWorks -artikel af M.Tim Jones
- Bootchart: Visualisering af bootprocessens ydeevne
- Bootstrap -processen på EFI -systemer , LWN.net , 11. februar 2015 af Matt Fleming