กลับไปหน้าบทความ

อ่าน 8 นาที

กระบวนการบูตของลินุกซ์

กระบวนการ บูต ของ Linux ประกอบด้วยหลายขั้นตอนและคล้ายคลึงกับ กระบวนการบูตของ BSD และ Unix อื่นๆ ซึ่งเป็นต้นกำเนิดของมัน แม้ว่ากระบวนการบูตของ Linux...

กระบวนการบูตของลินุกซ์

การบูตเคอร์เนล Linux 6.1 บนDebian Bookworm

กระบวนการ บูตของ Linux ประกอบด้วยหลายขั้นตอนและคล้ายคลึงกับ กระบวนการบูตของ BSDและUnix อื่นๆ ซึ่งเป็นต้นกำเนิดของมัน แม้ว่ากระบวนการบูตของ Linux จะขึ้นอยู่กับสถาปัตยกรรมของคอมพิวเตอร์เป็นอย่างมาก แต่สถาปัตยกรรมเหล่านั้นก็มีขั้นตอนและส่วนประกอบซอฟต์แวร์ที่คล้ายคลึงกัน[ 1 ]รวมถึงการเริ่มต้นระบบ การ เรียกใช้บูตโหลดเดอร์ การโหลดและการเริ่มต้น อิมเมจ เคอร์เนล Linuxและการเรียกใช้สคริปต์เริ่มต้นและเดมอนต่างๆ[ 2 ]ซึ่งจัดกลุ่มเป็น 4 ขั้นตอน ได้แก่ การเริ่มต้นระบบ ขั้นตอนบูตโหลดเดอร์ ขั้นตอนเคอร์เนล และกระบวนการอินิต[ 3 ]

เมื่อระบบ Linux เปิดเครื่องหรือรีเซ็ต โปรเซสเซอร์จะเรียกใช้เฟิร์มแวร์/โปรแกรมเฉพาะสำหรับการเริ่มต้นระบบ เช่น การทดสอบตัวเองเมื่อเปิดเครื่อง โดยเรียกใช้เวกเตอร์รีเซ็ตเพื่อเริ่มโปรแกรมที่แอดเดรสที่ทราบในแฟลช/รอม (ในอุปกรณ์ Linux แบบฝังตัว) จากนั้นโหลดบูตโหลดเดอร์ลงใน RAM เพื่อเรียกใช้ในภายหลัง[ 2 ]ในคอมพิวเตอร์ส่วนบุคคล (PC) ที่เข้ากันได้กับ IBM PC เฟิร์มแวร์/โปรแกรมนี้จะเป็น BIOSหรือ มอนิเตอร์ UEFIและจะถูกจัดเก็บไว้ในเมนบอร์ด[ 2 ]ในระบบ Linux แบบฝังตัว เฟิร์มแวร์/โปรแกรมนี้เรียกว่าบูตรอม [ 4 ] [ 5 ] หลังจากโหลดลงใน RAM แล้ว บูตโหลดเดอร์ (เรียกอีกอย่างว่าบูตโหลดเดอร์ขั้นแรกหรือบูตโหลดเดอร์หลัก) จะทำงานเพื่อโหลดบูตโหลดเดอร์ขั้นที่สอง[ 2 ] (เรียกอีกอย่างว่าบูตโหลดเดอร์รอง) [ 6 ]บูตโหลดเดอร์ขั้นที่สองจะโหลดอิมเมจเคอร์เนลลงในหน่วยความจำ คลายการบีบอัดและเริ่มต้น จากนั้นส่งการควบคุมไปยังอิมเมจเคอร์เนลนี้[ 2 ]บูตโหลดเดอร์ขั้นที่สองยังดำเนินการหลายอย่างบนระบบ เช่น การตรวจสอบฮาร์ดแวร์ของระบบ การติดตั้งอุปกรณ์รูท การโหลดโมดูลเคอร์เนลที่จำเป็น ฯลฯ[ 2 ]ในที่สุด กระบวนการพื้นที่ผู้ใช้แรก ( กระบวนการ) ก็เริ่มต้นขึ้น และการเริ่มต้นระบบระดับสูงอื่นๆ จะดำเนินการ (ซึ่งเกี่ยวข้องกับสคริปต์เริ่มต้น) [ 2 ]init

สำหรับแต่ละขั้นตอนและส่วนประกอบเหล่านี้ มีรูปแบบและแนวทางที่แตกต่างกันออกไป ตัวอย่างเช่นสามารถใช้GRUB , systemd-boot , corebootหรือDas U-Boot เป็นบูตโหลดเดอร์ได้ (ตัวอย่างในอดีตคือ LILO , SYSLINUXหรือLoadlin ) ในขณะที่สคริปต์เริ่มต้นอาจเป็น แบบ init ดั้งเดิม หรือการกำหนดค่าระบบอาจทำได้ผ่านทางเลือกที่ทันสมัย ​​เช่นsystemdหรือrunit

การเริ่มต้นระบบ

การเริ่มต้นระบบมีขั้นตอนที่แตกต่างกันไปตามฮาร์ดแวร์ที่ใช้ในการบูต Linux [ 7 ]

ฮาร์ดแวร์ ที่ใช้งานร่วมกับ IBM PCเป็นสถาปัตยกรรมหนึ่งที่นิยมใช้ Linux ในระบบเหล่านี้ เฟิร์มแวร์ BIOSหรือUEFIมีบทบาทสำคัญ

ในระบบ BIOS BIOS จะทำการทดสอบตัวเองเมื่อเปิดเครื่อง (POST) เพื่อตรวจสอบฮาร์ดแวร์ของระบบ จากนั้นจะระบุอุปกรณ์ภายในเครื่อง และสุดท้ายจะเริ่มระบบ[ 7 ]สำหรับการเริ่มต้นระบบ BIOS จะเริ่มด้วยการค้นหาอุปกรณ์บูตได้ในระบบซึ่งเก็บระบบปฏิบัติการ อุปกรณ์บูตได้อาจเป็นอุปกรณ์จัดเก็บข้อมูล เช่น ฟลอปปี้ดิสก์ ซีดีรอม แฟลชไดรฟ์ USB พาร์ติชั่นบนฮาร์ดดิสก์ (ซึ่งฮาร์ดดิสก์จะจัดเก็บระบบปฏิบัติการหลายระบบ เช่น Windows และ Fedora) อุปกรณ์จัดเก็บข้อมูลบนเครือข่ายท้องถิ่น เป็นต้น[ 7 ]ฮาร์ดดิสก์สำหรับบูต Linux จะจัดเก็บMaster Boot Record (MBR) ซึ่งมีบูตโหลดเดอร์ขั้นแรก/หลักเพื่อโหลดลงใน RAM [ 7 ]

ในระบบ UEFI เคอร์เนล Linux สามารถถูกเรียกใช้งานโดยตรงโดยเฟิร์มแวร์ UEFI ผ่านทาง EFI boot stub [ 8 ]แต่โดยปกติจะใช้GRUB 2หรือsystemd-bootเป็นบูตโหลดเดอร์[ 9 ] [ 10 ]

หาก รองรับ UEFI Secure Bootมักจะมีการบูต "ชิม" หรือ "พรีโหลดเดอร์" โดย UEFI ก่อนบูตโหลดเดอร์หรือเคอร์เนลที่มี EFI-stub [ 11 ] แม้ว่าUEFI Secure Bootจะถูกปิดใช้งาน ก็อาจมีอยู่และบูตในกรณีที่เปิดใช้งานในภายหลัง โดยทำหน้าที่เพียงเพิ่มฐานข้อมูลคีย์ลงนามพิเศษที่ให้คีย์สำหรับการตรวจสอบลายเซ็นของขั้นตอนการบูตถัดไปโดยไม่ต้องแก้ไขฐานข้อมูลคีย์ UEFI และเชื่อมโยงไปยังขั้นตอนการบูตถัดไปเช่นเดียวกับที่ UEFI จะทำ

ขั้นตอนการเริ่มต้นระบบบนระบบ Linux แบบฝังตัวเริ่มต้นด้วยการเรียกใช้เฟิร์มแวร์/โปรแกรมบนROM บูต บนชิป จากนั้นโหลดบูตโหลดเดอร์/ระบบปฏิบัติการจากอุปกรณ์จัดเก็บข้อมูล เช่น eMMC, eUFS, NAND flash เป็นต้น[ 5 ]ลำดับการเริ่มต้นระบบจะแตกต่างกันไปตามโปรเซสเซอร์[ 5 ]แต่ทั้งหมดจะรวมถึงขั้นตอนการเริ่มต้นฮาร์ดแวร์และการทดสอบฮาร์ดแวร์ของระบบ[ 7 ]ตัวอย่างเช่น ในระบบที่มีโปรเซสเซอร์ i.MX7D และอุปกรณ์บูตได้ซึ่งจัดเก็บระบบปฏิบัติการ (รวมถึง U-Boot) ROM บูตบนชิปจะตั้งค่า ตัวควบคุม หน่วยความจำ DDRก่อน ซึ่งช่วยให้โปรแกรมของ ROM บูตสามารถรับข้อมูลการกำหนดค่า SoC จากบูตโหลดเดอร์ภายนอกบนอุปกรณ์บูตได้[ 5 ]จากนั้น ROM บูตบนชิปจะโหลด U-Boot ลงใน DRAM สำหรับขั้นตอนบูตโหลดเดอร์[ 12 ]

ขั้นตอนบูตโหลดเดอร์

ในเครื่องคอมพิวเตอร์ IBM PC ที่ใช้BIOSบูตโหลดเดอร์ขั้นแรก ซึ่งเป็นส่วนหนึ่งของมาสเตอร์บูตเรคคอร์ด (MBR) คืออิมเมจขนาด 512 ไบต์ที่ประกอบด้วยโค้ดโปรแกรมเฉพาะของผู้ผลิตและตารางพาร์ติชัน[ 6 ]ดังที่กล่าวไว้ก่อนหน้านี้ในส่วนบทนำ บูตโหลดเดอร์ขั้นแรกจะค้นหาและโหลดบูตโหลดเดอร์ขั้นที่สอง[ 6 ]โดยจะทำเช่นนี้โดยการค้นหาพาร์ติชันที่ใช้งานอยู่ในตารางพาร์ติชัน[ 6 ]หลังจากพบพาร์ติชันที่ใช้งานอยู่ บูตโหลดเดอร์ขั้นแรกจะสแกนพาร์ติชันที่เหลือในตารางต่อไปเพื่อให้แน่ใจว่าพาร์ติชันเหล่านั้นไม่ได้ใช้งาน[ 6 ]หลังจากขั้นตอนนี้ บูตเรคคอร์ดของพาร์ติชันที่ใช้งานอยู่จะถูกอ่านเข้าไปใน RAM และดำเนินการเป็นบูตโหลดเดอร์ขั้นที่สอง[ 6 ]หน้าที่ของบูตโหลดเดอร์ขั้นที่สองคือการโหลดอิมเมจเคอร์เนล Linux ลงในหน่วยความจำ และดิสก์ RAM เริ่มต้น (ถ้ามี) [ 13 ]อิมเมจเคอร์เนลไม่ใช่เคอร์เนลที่สามารถเรียกใช้งานได้ แต่เป็น"ไฟล์บีบอัด" ของเคอร์เนลแทน ซึ่งถูกบีบอัดให้อยู่ใน รูปแบบ zImage หรือ bzImage ด้วยzlib [ 14 ]

ในระบบเหล่านั้น บูตโหลดเดอร์ขั้นที่หนึ่งและขั้นที่สองมักจะมาจากGRand Unified Bootloader (GRUB) และก่อนหน้านี้มาจาก Linux Loader ( LILO ) [ 13 ] GRUB 2ซึ่งใช้งานอยู่ในปัจจุบัน แตกต่างจาก GRUB 1 ตรงที่สามารถตรวจจับระบบปฏิบัติการต่างๆ ได้โดยอัตโนมัติและกำหนดค่าได้โดยอัตโนมัติ ขั้นที่ 1 จะถูกโหลดและเรียกใช้งานโดย BIOS จาก MBR โหลดเดอร์ขั้นกลาง (ขั้นที่ 1.5 ซึ่งโดยปกติคือ core.img) จะถูกโหลดและเรียกใช้งานโดยโหลดเดอร์ขั้นที่ 1 โหลดเดอร์ขั้นที่สอง (ขั้นที่ 2 ไฟล์ /boot/grub/) จะถูกโหลดโดยขั้นที่ 1.5 และแสดงเมนูเริ่มต้นของ GRUB ซึ่งอนุญาตให้ผู้ใช้เลือกระบบปฏิบัติการหรือตรวจสอบและแก้ไขพารามิเตอร์การเริ่มต้น หลังจากเลือกรายการเมนูและกำหนดพารามิเตอร์เสริมแล้ว GRUB จะโหลดเคอร์เนล Linux ลงในหน่วยความจำและส่งการควบคุมไปยังเคอร์เนลนั้น GRUB 2 ยังสามารถโหลดบูตโหลดเดอร์อื่นแบบต่อเนื่องได้อีกด้วย

ใน ระบบ UEFIนั้น stage1 และ stage1.5 มักจะเป็นไฟล์แอปพลิเคชัน UEFI เดียวกัน (เช่น grubx64.efi สำหรับ ระบบ UEFI x64 )

นอกจาก GRUB แล้ว ยังมีบูตโหลดเดอร์ยอดนิยมอื่นๆ อีก ได้แก่:

  • systemd-boot (เดิมชื่อ Gummiboot) เป็นบูตโหลดเดอร์ที่รวมอยู่ในsystemdซึ่งต้องการการตั้งค่าเพียงเล็กน้อย (สำหรับ ระบบ UEFIเท่านั้น)
  • SYSLINUX/ISOLINUX เป็นบูตโหลดเดอร์ที่เชี่ยวชาญในการบูตระบบปฏิบัติการ Linux แบบเต็มรูปแบบจากระบบไฟล์ FAT มักใช้กับฟลอปปี้ดิสก์สำหรับบูตหรือกู้คืน, USB แบบ Liveและระบบบูตขนาดเล็กอื่นๆ ISOLINUX มักใช้ในซีดี Live ของ Linux และซีดีติดตั้งแบบบูตได้
  • rEFIndคือตัวจัดการการบูตสำหรับระบบUEFI
  • corebootเป็นโปรแกรมเสริมฟรีที่จำลองการทำงานของUEFIหรือBIOSซึ่งโดยปกติจะติดตั้งมาพร้อมกับเมนบอร์ดและผู้ผลิตจะจัดหาการอัปเกรดเพิ่มเติมหากจำเป็น ส่วนต่างๆ ของ coreboot จะกลายเป็น BIOS ของระบบและคงอยู่ในหน่วยความจำหลังจากบูตเครื่อง
  • Das U-Bootคือบูตโหลดเดอร์สำหรับระบบฝังตัว ใช้ในระบบที่ไม่มี BIOS/UEFI แต่ใช้วิธีการเฉพาะในการอ่านบูตโหลดเดอร์เข้าสู่หน่วยความจำและเรียกใช้งาน

บูตโหลดเดอร์ในอดีต ซึ่งปัจจุบันไม่นิยมใช้แล้ว ได้แก่:

  • LILOไม่เข้าใจหรือวิเคราะห์โครงสร้างของระบบไฟล์ แต่/etc/lilo.confจะสร้างไฟล์การกำหนดค่า (configuration file) ในระบบที่กำลังทำงานอยู่ ซึ่งจะแมปข้อมูลออฟเซ็ตดิบ (เครื่องมือแมป) เกี่ยวกับตำแหน่งของดิสก์เคอร์เนลและแรม (initrd หรือ initramfs) ไฟล์การกำหนดค่านี้ ซึ่งรวมถึงข้อมูลต่างๆ เช่นพาร์ติชั่น บูต และ พาธ ของเคอร์เนลสำหรับแต่ละพาร์ติชั่น รวมถึงตัวเลือกที่กำหนดเองหากจำเป็น จะถูกเขียนร่วมกับโค้ดบูตโหลดเดอร์ลงในเซกเตอร์บูต MBR เมื่อ BIOS อ่านเซกเตอร์บูตนี้และควบคุมแล้ว LILO จะโหลดโค้ดเมนูและวาดเมนู จากนั้นใช้ค่าที่จัดเก็บไว้ร่วมกับข้อมูลที่ผู้ใช้ป้อนเพื่อคำนวณและโหลดเคอร์เนล Linux หรือโหลดบูตโหลดเดอร์อื่นๆ ตามลำดับ
  • GRUB 1 มีตรรกะในการอ่านระบบไฟล์ทั่วไปในระหว่างการทำงานเพื่อเข้าถึงไฟล์การกำหนดค่า[ 15 ]ซึ่งทำให้ GRUB 1 สามารถอ่านไฟล์การกำหนดค่าจากระบบไฟล์ได้ แทนที่จะฝังไว้ใน MBR ทำให้สามารถเปลี่ยนการกำหนดค่าในระหว่างการทำงานและระบุดิสก์และพาร์ติชันในรูปแบบที่มนุษย์อ่านได้ แทนที่จะต้องอาศัยค่าออฟเซ็ต นอกจากนี้ยังมีอินเทอร์เฟซบรรทัดคำสั่งซึ่งทำให้แก้ไขหรือปรับเปลี่ยน GRUB ได้ง่ายขึ้นหากมีการกำหนดค่าผิดพลาดหรือเสียหาย[ 16 ]
  • Linuxเป็นบูตโหลดเดอร์ที่สามารถแทนที่ เคอร์เนลของ DOSหรือWindows 9x ที่กำลังทำงาน อยู่ด้วยเคอร์เนลของ Linux ในระหว่างการทำงาน วิธีนี้มีประโยชน์ในกรณีของฮาร์ดแวร์ที่ต้องเปิดใช้งานผ่านซอฟต์แวร์ และโปรแกรมการกำหนดค่าดังกล่าวเป็นกรรมสิทธิ์และมีให้ใช้งานเฉพาะใน DOS เท่านั้น วิธีการบูตแบบนี้มีความจำเป็นน้อยลงในปัจจุบัน เนื่องจาก Linux มีไดรเวอร์สำหรับอุปกรณ์ฮาร์ดแวร์จำนวนมาก แต่ก็ยังมีการใช้งานในอุปกรณ์พกพา อยู่บ้าง อีกกรณีหนึ่งคือเมื่อ Linux อยู่ในอุปกรณ์จัดเก็บข้อมูลที่ไม่สามารถเข้าถึงได้โดย BIOS สำหรับการบูต: DOS หรือ Windows สามารถโหลดไดรเวอร์ที่เหมาะสมเพื่อชดเชยข้อจำกัดของ BIOS และบูต Linux จากที่นั่นได้

เคอร์เนล

ขั้นตอนเคอร์เนลเกิดขึ้นหลังจากขั้นตอนบูตโหลดเดอร์เคอร์เนลของลินุกซ์จัดการกระบวนการระบบปฏิบัติการทั้งหมด เช่นการจัดการหน่วยความจำการจัดตารางงานอินพุต/เอาต์พุตการสื่อสารระหว่างกระบวนการและการควบคุมระบบโดยรวม การโหลดเคอร์เนลจะทำในสองขั้นตอน – ในขั้นตอนแรก เคอร์เนล (ในรูปแบบไฟล์ภาพที่บีบอัด) จะถูกโหลดลงในหน่วยความจำและคลายการบีบอัด และฟังก์ชันพื้นฐานบางอย่างจะถูกตั้งค่า เช่น การจัดการหน่วยความจำขั้นพื้นฐาน การตั้งค่าฮาร์ดแวร์ขั้นต่ำ[ 14 ]ภาพเคอร์เนลจะถูกคลายการบีบอัดด้วยตนเอง ซึ่งเป็นส่วนหนึ่งของรูทีนของภาพเคอร์เนล[ 14 ]สำหรับบางแพลตฟอร์ม (เช่น ARM 64 บิต) การคลายการบีบอัดเคอร์เนลจะต้องดำเนินการโดยบูตโหลดเดอร์แทน เช่น U-Boot [ 17 ]

สำหรับรายละเอียดของขั้นตอนเหล่านั้น ลองยกตัวอย่าง ไมโครโปรเซสเซอร์ i386เมื่อมีการเรียกใช้ bzImage ฟังก์ชันstart()(ของ./arch/i386/boot/head.S) จะถูกเรียกเพื่อตั้งค่าฮาร์ดแวร์พื้นฐาน จากนั้นเรียกstartup_32()(ที่อยู่ใน./arch/i386/boot/compressed/head.S) [ 14 ]startup_32()จะทำการตั้งค่าพื้นฐานให้กับสภาพแวดล้อม (สแต็ก ฯลฯ) ล้างBlock Started by Symbol (BSS) จากนั้นเรียกใช้decompress_kernel()(ที่อยู่ใน./arch/i386/boot/compressed/misc.c) เพื่อคลายการบีบอัดเคอร์เนล[ 14 ]จากนั้นการเริ่มต้นเคอร์เนลจะถูกดำเนินการผ่านฟังก์ชันอื่นstartup_32()ที่อยู่ใน[./arch/i386/kernel/head.S 14 ]ฟังก์ชันเริ่มต้นสำหรับเคอร์เนล (เรียกอีกอย่างว่า swapper หรือกระบวนการ 0) จะสร้างการจัดการหน่วยความจำ (ตารางเพจจิ้งและ เพจจิ้งหน่วยความจำ) ตรวจจับประเภทของCPUและฟังก์ชันเพิ่มเติมใดๆ เช่น ความสามารถใน การคำนวณจุดลอยตัวจากนั้นสลับไปยังฟังก์ชันเคอร์เนล Linux ที่ไม่เฉพาะเจาะจงสถาปัตยกรรมผ่านการเรียก ที่ อยู่ใน[ 14 ]startup_32()start_kernel()./init/main.c

start_kernel()ดำเนินการฟังก์ชันการเริ่มต้นที่หลากหลาย ตั้งค่าการจัดการการขัดจังหวะ ( IRQs ) กำหนดค่าหน่วยความจำเพิ่มเติม ติดตั้งดิสก์ RAM เริ่มต้น ("initrd") ที่โหลดไว้ก่อนหน้านี้เป็นระบบไฟล์รูทชั่วคราวระหว่างขั้นตอนบูตโหลดเดอร์[ 14 ] initrd ซึ่งทำหน้าที่เป็นระบบไฟล์รูทชั่วคราวใน RAM ช่วยให้เคอร์เนลสามารถบูตได้อย่างสมบูรณ์และโหลดโมดูลไดรเวอร์ได้โดยตรงจากหน่วยความจำ โดยไม่ต้องพึ่งพาอุปกรณ์อื่น (เช่น ฮาร์ดดิสก์) [ 14 ] initrd มักจะมีโมดูลที่จำเป็นสำหรับการเชื่อมต่อกับอุปกรณ์ต่อพ่วงจัดเก็บข้อมูล[ 14 ]เช่น ไดรเวอร์ SATA และรองรับการกำหนดค่าฮาร์ดแวร์ที่เป็นไปได้จำนวนมาก[ 14 ]การแบ่งไดรเวอร์บางส่วนที่คอมไพล์แบบคงที่ลงในเคอร์เนลและไดรเวอร์อื่นๆ ที่โหลดจาก initrd ช่วยให้เคอร์เนลมีขนาดเล็ลง[ 14 ] initramfsหรือที่รู้จักกันในชื่อ early user space มีให้ใช้งานตั้งแต่เวอร์ชัน 2.5.46 ของเคอร์เนล Linux [ 18 ]โดยมีจุดประสงค์เพื่อแทนที่ฟังก์ชันต่างๆ ให้มากที่สุดเท่าที่จะเป็นไปได้ ซึ่งก่อนหน้านี้เคอร์เนลจะดำเนินการในระหว่างกระบวนการเริ่มต้น การใช้งานทั่วไปของ early user space คือการตรวจจับว่าไดรเวอร์อุปกรณ์ ใด ที่จำเป็นในการโหลดระบบไฟล์พื้นที่ผู้ใช้หลัก และโหลดไดรเวอร์เหล่านั้นจากระบบไฟล์ชั่วคราวการแจกจ่ายหลายๆ แบบใช้dracutเพื่อสร้างและบำรุงรักษาอิมเมจ initramfs

ต่อมาระบบไฟล์รูทจะถูกสลับผ่านการเรียกใช้pivot_root()ซึ่งจะยกเลิกการเมานต์ระบบไฟล์รูทชั่วคราวและแทนที่ด้วยการใช้ระบบไฟล์รูทจริงเมื่อสามารถเข้าถึงได้[ 14 ]จากนั้นหน่วยความจำที่ใช้โดยระบบไฟล์รูทชั่วคราวจะถูกเรียกคืน

สุดท้ายkernel_thread(ในarch/i386/kernel/process.c) จะถูกเรียกเพื่อเริ่มกระบวนการ Init (กระบวนการพื้นที่ผู้ใช้แรก) จากนั้นจึงเริ่มงานว่างcpu_idle()ผ่าน[ 14 ]

ดังนั้น ขั้นตอนเคอร์เนลจะเริ่มต้นอุปกรณ์ ติดตั้งระบบไฟล์รูทที่ระบุโดยบูตโหลดเดอร์เป็นแบบอ่านอย่างเดียวและเรียกใช้Init ( /sbin/init) ซึ่งถูกกำหนดให้เป็นกระบวนการแรกที่ระบบเรียกใช้ ( PID = 1) [ 19 ]เคอร์เนลจะพิมพ์ข้อความเมื่อติดตั้งระบบไฟล์ และ Init จะพิมพ์ข้อความเมื่อเริ่มกระบวนการ Init [ 19 ]

ตามข้อมูลของRed Hatกระบวนการเคอร์เนลโดยละเอียดในขั้นตอนนี้จึงสรุปได้ดังนี้: [ 15 ]

"เมื่อเคอร์เนลถูกโหลด มันจะเริ่มต้นและกำหนดค่าหน่วยความจำของคอมพิวเตอร์ทันที และกำหนดค่าฮาร์ดแวร์ต่างๆ ที่เชื่อมต่อกับระบบ รวมถึงโปรเซสเซอร์ ระบบย่อย I/O และอุปกรณ์จัดเก็บข้อมูลทั้งหมด จากนั้นมันจะค้นหาอิมเมจ initrd ที่บีบอัดในตำแหน่งที่กำหนดไว้ในหน่วยความจำ คลายการบีบอัด ติดตั้ง และโหลดไดรเวอร์ที่จำเป็นทั้งหมด ต่อไป มันจะเริ่มต้นอุปกรณ์เสมือนที่เกี่ยวข้องกับระบบไฟล์ เช่นLVMหรือซอฟต์แวร์RAIDก่อนที่จะยกเลิกการติดตั้งอิมเมจดิสก์ initrd และปล่อยหน่วยความจำทั้งหมดที่อิมเมจดิสก์เคยใช้ เคอร์เนลจะสร้างอุปกรณ์รูท ติดตั้งพาร์ติชันรูทแบบอ่านอย่างเดียว และปล่อยหน่วยความจำที่ไม่ได้ใช้ ณ จุดนี้ เคอร์เนลถูกโหลดลงในหน่วยความจำและพร้อมใช้งาน อย่างไรก็ตาม เนื่องจากไม่มีแอปพลิเคชันของผู้ใช้ที่อนุญาตให้ป้อนข้อมูลที่มีความหมายไปยังระบบ จึงไม่สามารถทำอะไรกับมันได้มากนัก" การบูตแบบ initramfs นั้นคล้ายกัน แต่ไม่เหมือนกับการบูต initrd ที่อธิบายไว้

ในขั้นตอนนี้ เมื่อเปิดใช้งานการขัดจังหวะแล้ว ตัวจัดตารางเวลาสามารถควบคุมการจัดการโดยรวมของระบบ เพื่อให้สามารถทำงานหลายอย่างพร้อมกันได้อย่างมีประสิทธิภาพ และกระบวนการเริ่มต้น (init process) จะยังคงดำเนินการบูตสภาพแวดล้อมของผู้ใช้ในพื้นที่ผู้ใช้ต่อไป

กระบวนการเริ่มต้น

เมื่อเคอร์เนลเริ่มต้นแล้ว เคอร์เนลจะเริ่มต้นกระบวนการinit [ 20 ]ซึ่งเป็นเดมอนที่ทำการบูตสแตรปพื้นที่ผู้ใช้เช่น โดยการตรวจสอบและติดตั้งระบบไฟล์และเริ่มต้นกระบวนการ อื่นๆ ระบบ init เป็นเดมอนตัวแรกที่เริ่มต้น (ระหว่างการบูต) และเป็นเดมอนตัวสุดท้ายที่สิ้นสุด (ระหว่างการปิดระบบ )

ในอดีต กระบวนการนี้คือ " SysV init " ซึ่งเรียกกันสั้นๆ ว่า "init" แต่ระบบปฏิบัติการ Linux รุ่นใหม่ๆ มักใช้ทางเลือกที่ทันสมัยกว่า เช่นsystemdด้านล่างนี้คือสรุปกระบวนการ init หลักๆ:

  • SysV init ( หรือเรียกสั้นๆ ว่า "init") คล้ายกับกระบวนการ init ของUNIX System Vในระบบ Linux มาตรฐาน init จะถูกเรียกใช้ด้วยพารามิเตอร์ที่เรียกว่าrunlevelซึ่งมีค่าตั้งแต่ 0 ถึง 6 และกำหนดว่าระบบย่อยใดจะสามารถใช้งานได้ แต่ละ runlevel มีสคริปต์ ของตัวเอง ซึ่งกำหนดกระบวนการต่างๆ ที่เกี่ยวข้องกับการตั้งค่าหรือออกจาก runlevel ที่กำหนด และสคริปต์เหล่านี้จะถูกอ้างอิงตามความจำเป็นในกระบวนการบูต สคริปต์ init มักจะอยู่ในไดเร็กทอรีที่มีชื่อเช่น"/etc/rc...". ไฟล์การกำหนดค่าระดับบนสุดสำหรับ init อยู่ที่/etc/inittab. [ 21 ]ในระหว่างการบูตระบบ ระบบจะตรวจสอบว่ามีการระบุ runlevel เริ่มต้นใน /etc/inittab หรือไม่ และจะขอให้เข้าสู่ runlevel ผ่านทางคอนโซลระบบหากไม่มี จากนั้นจะดำเนินการเรียกใช้สคริปต์บูตที่เกี่ยวข้องทั้งหมดสำหรับ runlevel ที่กำหนด รวมถึงการโหลดโมดูลการตรวจสอบความสมบูรณ์ของระบบไฟล์รูท (ซึ่งถูกเมานต์แบบอ่านอย่างเดียว) จากนั้นเมานต์ใหม่เพื่อให้เข้าถึงแบบอ่านและเขียนได้อย่างเต็มที่ และตั้งค่าเครือข่าย[ 19 ]หลังจากที่สร้างกระบวนการทั้งหมดที่ระบุไว้แล้ว init จะหยุดทำงานและรอให้เหตุการณ์ใดเหตุการณ์หนึ่งในสามเหตุการณ์เกิดขึ้น ได้แก่ กระบวนการที่เริ่มต้นจะสิ้นสุดหรือตาย สัญญาณไฟดับ หรือคำขอผ่าน/sbin/telinitเพื่อเปลี่ยนระดับการทำงานเพิ่มเติม[ 22 ]
  • systemd เป็นทางเลือกที่ทันสมัยแทน SysV init เช่นเดียวกับ init, systemd เป็น daemon ที่จัดการ daemon อื่นๆ daemon ทั้งหมด รวมถึง systemd เป็นกระบวนการพื้นหลัง Lennart PoetteringและKay Sieversวิศวกรซอฟต์แวร์ที่พัฒนา systemd ในช่วงแรก[ 23 ]พยายามที่จะเหนือกว่าประสิทธิภาพของ daemon init ในหลายๆ ด้าน พวกเขาต้องการปรับปรุงเฟรมเวิร์กซอฟต์แวร์สำหรับการแสดงการพึ่งพา เพื่อให้สามารถประมวลผลได้มากขึ้นแบบขนานระหว่างการบูตระบบ และเพื่อลดภาระการคำนวณของเชลล์คำสั่งเริ่มต้นของ systemd สำหรับแต่ละ daemon จะถูกบันทึกไว้ในไฟล์การกำหนดค่าแบบประกาศแทนที่จะเป็นสคริปต์เชลล์ สำหรับการสื่อสารระหว่างกระบวนการ systemd ทำให้ซ็อกเก็ตโดเมน UnixและD-Busพร้อมใช้งานสำหรับ daemon ที่กำลังทำงานอยู่ systemd ยังมีความสามารถในการขนานอย่างมีประสิทธิภาพอีกด้วย

ดูเพิ่มเติม

  • การอ่านซอร์สโค้ดเคอร์เนลของลินุกซ์จากวิกิพีเดีย
  • เกร็ก โอ'คีฟ - จาก Power Up ถึง Bash PromptในWayback Machine (เก็บถาวรเมื่อวันที่ 23 ตุลาคม 2552)
  • Bootchart: การแสดงภาพประสิทธิภาพกระบวนการบูตเครื่อง
  • กระบวนการบูตสแตรปบนระบบ EFI , LWN.net , 11 กุมภาพันธ์ 2015, โดย Matt Fleming
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Booting_process_of_Linux&oldid=1344938803 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ กระบวนการบูตของลินุกซ์

กระบวนการ บูต ของ Linux ประกอบด้วยหลายขั้นตอนและคล้ายคลึงกับ กระบวนการบูตของ BSD และ Unix อื่นๆ ซึ่งเป็นต้นกำเนิดของมัน แม้ว่ากระบวนการบูตของ Linux...

การเริ่มต้นระบบ

การเริ่มต้นระบบมีขั้นตอนที่แตกต่างกันไปตามฮาร์ดแวร์ที่ใช้ในการบูต Linux [ 7 ]

ขั้นตอนบูตโหลดเดอร์

ใน เครื่องคอมพิวเตอร์ IBM PC ที่ ใช้ BIOS บูตโหลดเดอร์ขั้นแรก ซึ่งเป็นส่วนหนึ่งของ มาสเตอร์บูตเรคคอร์ด (MBR) คืออิมเมจขนาด 512 ไบต์ที่ประกอบด้วยโค้ดโปรแกรมเฉพาะของผู้ผลิตและตารางพาร์ติชัน [ 6 ] ดังที่กล่าวไว้ก่อนหน้านี้ในส่วนบทนำ...

เคอร์เนล

ขั้นตอนเคอร์เนลเกิดขึ้นหลังจากขั้นตอนบูตโหลดเดอร์ เคอร์เนลของลินุกซ์ จัดการกระบวนการระบบปฏิบัติการทั้งหมด เช่น การจัดการหน่วยความจำ การจัดตาราง งานอินพุต /เอาต์พุต การ สื่อสารระหว่างกระบวนการ และการควบคุมระบบโดยรวม การโหลดเคอร์เนลจะทำในสองขั้นตอน –...