bootloader ถูกเก็บไว้ที่ไหน - ใน ROM, RAM, หรือที่อื่น?


30

ตามรายการ wikipedia, bootloader เป็นโปรแกรมขนาดเล็กที่เก็บไว้ใน ROM (ส่วนหนึ่งของหน่วยความจำหลัก (RAM), ใช่ไหม?) ซึ่งสามารถอ่านและลบได้เท่านั้น ฉันงงนิดหน่อยที่นี่ นี่หมายความว่าทุก RAM ที่เราซื้อมี bootloader ติดตั้งไว้หรือไม่ และฉันก็อ่านจากหนังสือที่บอกว่าโดยปกติจะมีพื้นที่ที่เรียกว่า MBR (Master Boot Record) บนฮาร์ดไดรฟ์ซึ่งรวมถึง bootloader ...

ดังนั้น bootloader นี้ตั้งอยู่ที่ไหน? ระบบปฏิบัติการที่แตกต่างกันจัดเก็บ bootloader ในที่ต่าง ๆ หรือไม่?

คำตอบ:


43

ROM เป็นชิปแยกต่างหากจาก RAM ไม่ต้องใช้พลังงานในการเก็บรักษาเนื้อหา แต่เดิมไม่สามารถแก้ไขได้ด้วยวิธีการใด ๆ แต่มีสายแข็งจากโรงงาน PROM ในภายหลังหรือโปรแกรมอ่านอย่างเดียวหน่วยความจำแทนที่ ROM จริง ชิปเหล่านี้ว่างเปล่าจากโรงงานและสามารถเขียนได้ครั้งเดียวโดยใช้ขั้นตอนพิเศษที่ทำให้ชิปแตกเป็นส่วน ๆ ทำให้สถานะของพวกเขาเปลี่ยนไป สิ่งนี้ถูกแทนที่ด้วย EPROM หรือหน่วยความจำที่สามารถตั้งโปรแกรมแบบลบได้ ชิปเหล่านี้มีหน้าต่างเพียงเล็กน้อยบนพวกเขาและหากคุณส่องแสงอัลตราไวโอเลตเข้ามาพวกมันอาจถูกลบได้ทำให้สามารถตั้งโปรแกรมใหม่ได้อีกครั้ง สิ่งเหล่านี้จะถูกแทนที่ด้วย EEPROM หรือหน่วยความจำที่ตั้งโปรแกรมได้แบบลบด้วยไฟฟ้า ชิปเหล่านี้มีขั้นตอนซอฟต์แวร์พิเศษเพื่อลบทิ้งเพื่อให้สามารถทำการโปรแกรมซ้ำได้

แผงวงจรหลักมีชิป ROM บางประเภทที่เก็บเฟิร์มแวร์ซึ่งโดยทั่วไปแล้วในพีซีจะเรียกว่า BIOS หรือระบบอินพุตเอาต์พุตพื้นฐานแม้ว่าจะถูกแทนที่ด้วยเฟิร์มแวร์ EFI ในปัจจุบัน นี่เป็นซอฟต์แวร์ที่ CPU เริ่มดำเนินการเมื่อเปิดเครื่อง เฟิร์มแวร์ทั้งหมดทำการเริ่มต้นของฮาร์ดแวร์โดยทั่วไปจะมีเอาต์พุตการวินิจฉัยและให้วิธีการสำหรับผู้ใช้ในการกำหนดค่าฮาร์ดแวร์จากนั้นหาตำแหน่งและโหลดบูตโหลดเดอร์ซึ่งจะหาตำแหน่งและโหลดระบบปฏิบัติการ

ด้วย PC BIOS นั้นเพียงแค่โหลดและเรียกใช้เซกเตอร์แรกจากดิสก์ที่จะทำการบู๊ตซึ่งโดยทั่วไปจะเป็นฮาร์ดดิสก์ตัวแรกที่ตรวจพบ โดยการประชุมภาคแรกของฮาร์ดดิสก์ที่เรียกว่า Master Boot Record จะมีตารางพาร์ติชัน DOS ซึ่งแสดงรายการที่ตั้งของพาร์ติชั่นบนดิสก์และจากนั้นก็ปล่อยให้พื้นที่สำหรับบูตโหลดเดอร์ อูบุนตูใช้บูตด้วงซึ่งสถานที่รหัสเพียงพอใน MBR /boot/grub/core.imgโหลดและปฏิบัติการ โดยปกติแล้วการคัดลอกไฟล์นี้จะอยู่ในส่วนที่ตามหลัง MBR แต่ก่อนหน้าพาร์ติชั่นแรกและนั่นคือสิ่งที่ MBR โหลดมาเนื่องจากการหาตำแหน่งของ/boot/grub/core.imgยากเกินไปที่จะทำอย่างถูกต้องในพื้นที่ จำกัด ที่มีอยู่ใน MBR .

อิมเมจหลักของด้วงประกอบด้วยโค้ดด้วงฐานรวมถึงโมดูลใด ๆ ที่จำเป็นในการเข้าถึง/boot/grubเพื่อให้สามารถโหลดโมดูลเพิ่มเติมได้ที่นั่นและไฟล์กำหนดค่าด้วงที่อธิบายถึงระบบปฏิบัติการที่สามารถบูทได้และสามารถพบได้ที่ใด

เฟิร์มแวร์ EFI ที่ใช้กับ Intel Macs และพร้อมใช้งานแทน BIOS บนเมนบอร์ดพีซีส่วนใหญ่ต้องการพาร์ติชันเฉพาะที่เก็บไฟล์บูตโหลดเดอร์และเฟิร์มแวร์ฉลาดพอที่จะค้นหาไฟล์เหล่านั้นและโหลดแทนการโหลด อยู่ในภาคแรกของดิสก์


นี่คือย่อหน้าที่คัดลอกมาจากวิทยาศาสตร์คอมพิวเตอร์ ของ Glenn Brookshear ภาพรวมA small portion of a computer's main memory where the CPU expects to find its initial program is constructed from special nonvolatile memory cells. Such memory is known as read-only memory(ROM)ตามที่เขาพูด หน่วยความจำหลักประกอบด้วยสองส่วนคือ RAM และ ROM ฉันแค่อยากรู้ว่า bootloader ที่เรียกว่าติดตั้งอยู่ในส่วน ROM ของหน่วยความจำหลักหรือไม่ ... @ Sergey
xczzhh

@xczzhh - ใช่ BIOS เก็บไว้ใน ROM ซึ่งตรวจพบ Bootloader ที่มีอยู่ในพาร์ทิชัน เมื่อติดตั้งระบบปฏิบัติการใด ๆ มันจะสร้างการตั้งค่าสถานะรายการใน BIOS เพื่อตรวจหา BOOTLOADER ที่เกี่ยวข้อง
atenz

1
@xczzhh ไม่บูตโหลดเดอร์อยู่บนฮาร์ดไดรฟ์หรือดิสก์อื่น ๆ มันถูกติดตั้งพร้อมกับระบบปฏิบัติการ ถ้าคุณไม่ดาวน์โหลดและติดตั้งการอัปเดตจากผู้ผลิตแผงวงจรหลักของคุณ ROM จะไม่เปลี่ยนแปลง
psusi

EFI ใช้แอปพลิเคชั่น EFI แทนโหลดแอปพลิเคชั่น EFI ใน NVRAM
Suici Doga

@SuiciDoga, ไม่ใช่, แอปพลิเคชั่น EFI (ซึ่งโดยทั่วไปจะ จำกัด ยูทิลิตี้การอัปเกรดเฟิร์มแวร์และบูตโหลดเดอร์ไม่กี่ตัว) จะถูกเก็บไว้ในพาร์ติชันระบบ EFI ของฮาร์ดดิสก์ NVRAM เป็นที่ที่ EFI เก็บตัวแปรการกำหนดค่าบางอย่างเช่นลำดับการบู๊ต
psusi

23

ROM ไม่ได้อยู่ในหน่วยความจำหลัก:

ROM ไม่ใช่ส่วนหนึ่งของหน่วยความจำหลัก มันเป็นชิปแยกต่างหากซึ่งส่วนใหญ่แล้วจะเป็นแบบในตัว IC ที่ใหญ่กว่า ตัวอย่างเพิ่มเติมพีซีของคุณประกอบด้วย ROM หลายตัว สิ่งเหล่านี้สร้างขึ้นในกระดานแม่ของคุณ

โดยทั่วไป:

  • ROM มีขนาดเล็กมากในหน่วยความจำ หน่วยความจำเหล่านี้ไม่ลบเลือนในความรู้สึกโปรแกรมที่เก็บไว้ใน ROM จะไม่ถูกลบเมื่อปิดเครื่อง
  • ROM ใช้เพื่อจัดเก็บโปรแกรมถาวรซึ่งเป็นสิ่งจำเป็นอย่างยิ่งที่ฮาร์ดแวร์ของคุณต้องดำเนินการอย่างถูกต้อง
  • ตัวอย่างทั่วไปของ ROM คือชิป BIOS ที่เก็บโปรแกรมการบูทระดับต่ำมากและฮาร์ดแวร์เริ่มต้น

คุณพูดถึงว่าคุณอ่านบทความที่ผู้เขียนพูดว่า "ROM เป็นส่วนหนึ่งของหน่วยความจำหลัก" สิ่งนี้ทำให้เกิดความสับสนเพราะโดยทั่วไปแล้วหน่วยความจำหลักหมายถึงหน่วยความจำชนิดที่มีความผันผวนเช่นแรม แต่ใช่ถ้าคุณใช้คำว่าหน่วยความจำหลักสำหรับพื้นที่หน่วยความจำทั้งหมดของพีซี ROM นั้นเป็นส่วนหนึ่งของพื้นที่หน่วยความจำนั้น คุณควรทราบว่าโดยทั่วไปหน่วยความจำหลักไม่รวมหน่วยความจำชนิดเป็นรอม

ที่เก็บ Bootloader อยู่ที่ไหน:

ระบบที่ทันสมัยใช้การโหลดการบูตแบบสองขั้นตอน ในขั้นตอนแรกโปรแกรมเล็ก ๆ จะโหลดจากเซกเตอร์ (เรียกว่าบูตเซกเตอร์บ่อยกว่า) ของฮาร์ดดิสก์ โปรแกรมเล็ก ๆ นี้จะโหลดโปรแกรมจากที่ใด ๆ ในดิสก์ซึ่งเรียกว่า bootloader และในที่สุด bootloader ก็โหลดระบบปฏิบัติการ

ในแง่ของระบบ Ubuntu กระบวนการดังต่อไปนี้:

  1. หลังจากที่คุณเปิดพีซี BIOS (ซึ่งเก็บไว้ใน ROM) จะทำงานโดยอัตโนมัติและเริ่มต้นส่วนต่าง ๆ ของฮาร์ดแวร์พีซี จากนั้นจะตรวจสอบเซกเตอร์เฉพาะในอุปกรณ์บู๊ตแรกที่กำหนด (โดยทั่วไปคือฮาร์ดดิสก์) เซกเตอร์นี้คือบูตเซกเตอร์ซึ่งมีขนาด 512 ไบต์

  2. โปรแกรมในบูตเซกเตอร์ถูกโหลดในหน่วยความจำ (ระยะที่ 1) โปรแกรมขนาดเล็กนี้มีข้อมูลว่าควรโหลดโปรแกรมใดในหน่วยความจำถัดไปและตำแหน่งของโปรแกรมนั้นอยู่ในดิสก์หรืออุปกรณ์บู๊ต มันโหลดโปรแกรมนั้น ใน Ubuntu /boot/grub/core.imgมันเป็น

  3. ในขั้นตอนที่ 2 OS-Loader, GRUB, โหลด Ubuntu โดยการโหลดเคอร์เนลและดิสก์ RAM เริ่มต้นลงในหน่วยความจำและควบคุมการส่งมอบให้กับเคอร์เนล จากนั้นเคอร์เนลจะทำงานและโหลดโปรแกรมที่จำเป็นทั้งหมดเช่นตัวจัดการหน้าจอ, กุย ฯลฯ

ดังนั้นเราสามารถพูดได้อย่างชัดเจนว่า bootloader ไม่ได้เก็บไว้ใน ROM หรือ RAM จริง ๆ แล้วมันถูกเก็บไว้ในฮาร์ดดิสก์ (หรืออุปกรณ์บูตอื่น ๆ เช่น CDROM ที่สามารถบูตได้ไดรฟ์ USB ฯลฯ ) พูดอย่างแม่นยำภาคแรกของ ฮาร์ดดิสก์ซึ่งเป็นขนาด 512 ไบต์และมักจะเรียกว่าบูตเซก และ bootloader นี้โหลดตัวโหลดระบบปฏิบัติการ (ใน Ubuntu เป็นด้วง) ซึ่งอยู่ในฮาร์ดดิสก์ (เช่น/boot/grub/โฟลเดอร์) และหน้าที่กำลังโหลดระบบปฏิบัติการ (พูดว่า Ubuntu)

เป็นการทดสอบให้นำฮาร์ดดิสก์ออก (และอุปกรณ์บูตอื่น ๆ ทั้งหมด) แล้วลองบู๊ต คุณสามารถไปถึงขั้นตอน BIOS แต่หลังจากขั้นตอนนั้นคุณไม่สามารถบูตอะไรได้ BIOS ส่วนใหญ่อาจจะพูดว่า " ไม่พบอุปกรณ์บูต " หรือ " ไม่พบระบบปฏิบัติการ " หรือบางอย่างที่คล้ายกัน

หวังว่าคำตอบนี้จะช่วยได้


สำหรับข้อมูลเพิ่มเติมคุณอาจต้องการเยี่ยมชมลิงค์เหล่านี้:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory

2
ROM ไม่ได้เร็วกว่าแรมมาสิบปีแล้ว ในความเป็นจริงสิ่งแรกที่ BIOS สมัยใหม่ทำคือคัดลอกตัวเองลงใน RAM เพราะ RAM นั้นเร็วกว่ามาก
David Schwartz

1
@DavidSchwartz มันเป็นมากกว่าทศวรรษแล้ว พีซี BIOS ทุกเครื่องที่ฉันใช้ในช่วงกลางยุค 90 มีตัวเลือกในการแรเงาไบออสใน RAM เพื่อความเร็ว
psusi

@ อันวาร์ลิงก์ไปยังหน่วยความจำหลักนั้นตาย
The Matt

15

โปรเซสเซอร์ที่เข้ากันได้กับ x86 เริ่มในโหมดที่เรียกว่า "ของจริง" ซึ่งเป็นโหมด 16 บิตพร้อมหน่วยความจำที่สามารถระบุตำแหน่งได้ 1 เมกะไบต์ จากพื้นที่ที่อยู่นั้น 640K จะพร้อมใช้งานสำหรับโปรแกรมและที่อยู่ด้านบนที่แมปกับอุปกรณ์ต่าง ๆ

ตัวอย่างเช่นที่อยู่ที่เริ่มต้นจาก 0xA000: 0x0000 ถูกแมปกับวิดีโอ RAM ดังนั้นการเขียนข้อมูลที่นั่นจะเป็นการเขียนข้อมูลลงในหน่วยความจำของการ์ดแสดงผลที่แสดงพิกเซลบนหน้าจอ

ในทำนองเดียวกันBIOS ROM เริ่มต้นจาก 0xF000: 0000 ดังนั้น CPU เมื่อเปิดเครื่องเพียงแค่เริ่มดำเนินการคำแนะนำทีละตัวโดยเริ่มจากที่อยู่ที่กำหนดไว้ล่วงหน้า BIOS ROM มีโปรแกรมเริ่มต้นซึ่งเริ่มต้นด้วย "การทดสอบด้วยตนเองเมื่อเปิดเครื่อง" หรือ POST จาก Wikipedia:

ซอฟต์แวร์ BIOS นั้นสร้างขึ้นในพีซีและเป็นรหัสแรกที่เรียกใช้โดยพีซีเมื่อเปิดเครื่อง ('เฟิร์มแวร์สำหรับบูต') เมื่อพีซีเริ่มทำงานงานแรกสำหรับ BIOS คือการทดสอบตัวเองเมื่อเปิดเครื่องซึ่งจะเริ่มต้นและระบุอุปกรณ์ระบบเช่น CPU, RAM, การ์ดแสดงผลวิดีโอ, คีย์บอร์ดและเมาส์, ฮาร์ดดิสก์และไดรฟ์ออปติคัลดิสก์และ ฮาร์ดแวร์อื่น ๆ จากนั้นไบออสจะหาที่ตั้งของซอฟต์แวร์บูทโหลดเดอร์ที่เก็บไว้ในอุปกรณ์ต่อพ่วง (กำหนดให้เป็น 'อุปกรณ์สำหรับบู๊ต') เช่นฮาร์ดดิสก์หรือซีดี / ดีวีดีและโหลดและเรียกใช้ซอฟต์แวร์นั้นเพื่อให้สามารถควบคุมพีซีได้ 2กระบวนการนี้เป็นที่รู้จักกันในนามการบูทหรือการบูทขึ้นซึ่งเป็นช่วงเวลาสั้น ๆ สำหรับการบูตสแตรป

BIOS เฟิร์มแวร์มีหน้าที่รับผิดชอบในการอ่านเซกเตอร์แรกจากดิสก์ไปยังหน่วยความจำและส่งการควบคุมไปยังโปรแกรมขนาดเล็กซึ่งเป็นอีกครั้งซึ่งอยู่ที่ที่อยู่เฉพาะที่นั่น MBR bootloader แล้วอาจจะเริ่มต้นในการโหลดระบบปฏิบัติการโดยตรง (เช่นกรณีที่เกิดกับ MS-DOS) หรือโหลด "ขั้นตอนที่สอง" ซึ่งไม่ได้ จำกัด ขอบเขตของภาคดิสก์เดียว

Bootloaders ซึ่งใช้วิธีการหลายขั้นตอนนั้นค่อนข้างซับซ้อนด้วยข้อความหรือส่วนต่อประสานกราฟิกซึ่งช่วยให้ผู้ใช้สามารถเลือกดิสก์หรือพาร์ติชั่นที่จะโหลดระบบปฏิบัติการ

ดังนั้นหาก Uri แนะนำว่าคุณสนใจว่า bootloader ของ Windows และ GRUB สามารถอยู่ร่วมกันได้หรือไม่คำตอบคือ: MBR จริงจะมี bootloader ขั้นแรกเพียงตัวเดียวเท่านั้น (มาทั้งภาคมีเพียง 512 ไบต์) แต่ขั้นตอนที่สองของ bootloader อาจสามารถระบบปฏิบัติการ "chain-load" จากพาร์ติชันที่แตกต่างกัน Windows bootloader สามารถรับรู้และโหลด Windows ได้เท่านั้นในขณะที่ GRUB สามารถโหลด Linux หรือส่งผ่านการควบคุมไปยัง bootloader อื่นที่เก็บไว้ในไดรฟ์ข้อมูลบูตบันทึกของพาร์ติชันหนึ่งซึ่งอนุญาตให้บูต Windows หรือระบบปฏิบัติการอื่น ๆ กระบวนการหลังเรียกว่าการโหลดโซ่

เมื่อคุณติดตั้ง Ubuntu บนคอมพิวเตอร์ที่มี Windows อยู่ GRUB จะถูกติดตั้งลงใน MBR และคุณจะสามารถบูตทั้ง Ubuntu และ Windows ได้

อย่างไรก็ตามหากติดตั้ง Windows หลังจาก Ubuntu แล้ว GRUB จะถูกแทนที่ด้วย bootloader ของ Windows และคุณจะต้องติดตั้ง GRUB อีกครั้งเพื่อให้สามารถบูต Ubuntu ได้อีกครั้ง


ฉันคิดว่าเขาต้องการทราบว่า bootloader ของ Windows และ GRUB สามารถอยู่ร่วมกันได้หรือไม่ UEFI, GPT ดิสก์ไม่ได้ใช้ MBR สิ่งนี้มีผลกระทบอย่างไร?
Uri Herrera

BIOS ROM ตั้งอยู่ใน F000: เซกเมนต์ซึ่งต่ำกว่า 1 MB 640k มาจากเซ็กเมนต์ด้านล่าง A000: ซึ่งมีให้สำหรับระบบปฏิบัติการจริงและโปรแกรมที่จะใช้
psusi

@psusi: ถูกต้องแล้วฉันเขียนประโยคอีกส่วนหนึ่ง
Sergey

ขอบคุณสำหรับคำตอบ คุณหมายความว่ามีหลาย bootloaders (หนึ่งใน BIOS และอื่น ๆ ใน MBR?) เกี่ยวข้องกับการบูตระบบปฏิบัติการ? มันใหม่สำหรับฉัน ... :)
xczzhh

@xczzhh เอาล่ะรหัสใน BIOS ไม่ได้เรียกว่า "bootloader" ซึ่งเป็นรหัสที่เก็บไว้ในดิสก์ ฉันอัปเดตคำตอบเพื่อให้ชัดเจน
Sergey

4

ความขัดแย้งระหว่างสิ่งที่คุณพูดเกี่ยวกับ bootloader ที่อยู่ใน ROM และมันอยู่ใน MBR อาจเป็นเพราะbootloaderถูกใช้สำหรับรหัสใด ๆ ที่ใช้งานวิธีการทำขั้นต่ำในการโหลดในรหัสเพื่อให้คอมพิวเตอร์ทำสิ่งที่มีประโยชน์รวมถึง สถานะในการบูตแบบหลายขั้นตอน

ดังนั้นสถานะเริ่มต้นคือการมีคอมพิวเตอร์ซึ่งเป็นอุปกรณ์ที่ตั้งโปรแกรมได้ แต่ไม่รู้ว่าจะโหลดซอฟต์แวร์ให้ทำงานได้อย่างไรเพราะไม่มีซอฟต์แวร์โหลดอยู่ (และด้วยเหตุนี้การบูตจากการดึงตัวเองขึ้นมาจาก bootstraps ของมัน )

ในอดีตมีวิธีแก้ไขปัญหานี้แตกต่างกันไปเล็กน้อย แต่วันนี้เราเริ่มต้นด้วยรหัสใน ROM (ส่วนใหญ่น่าจะเป็น EEPROM อย่างเคร่งครัด) ซึ่งเพียงพอที่จะให้มันดูอุปกรณ์ต่าง ๆ และลองใช้จนกว่าจะพบสิ่งที่ ที่สามารถบูตได้

(นี่คือสาเหตุที่หลาย ๆ ระบบจะบูตจากซีดีหรือดีวีดีหากคุณใส่ดิสก์ตัวติดตั้งระบบปฏิบัติการในและจากฮาร์ดไดรฟ์มิฉะนั้น BIOS [รหัสใน ROM รวมถึงรหัสที่เรากำลังพูดถึงและอื่น ๆ ที่ต่ำ - ระดับต่าง ๆ ที่เริ่มต้นใหม่] ถูกตั้งค่าให้ดูที่ไดรฟ์ CD / DVD ก่อนจากนั้นฮาร์ดไดรฟ์หากไม่พบสิ่งใด tweakers มักตั้งค่าให้ละเว้นไดรฟ์ CD / DVD เว้นแต่จะร้องขอด้วยตนเอง ไม่ต้องเสียเวลาหมุนดิสก์ที่ไม่สามารถบู๊ตได้ซึ่งอยู่ในไดรฟ์)

รหัสใน ROM นี้จัดอยู่ในบางครั้งเรียกว่าbootloader

เมื่อรู้ว่าต้องดูไดรฟ์อะไรมันจะดู MBR ซึ่งมีข้อมูลเกี่ยวกับพาร์ติชั่นหลัก - คุณจะดู / หรือ / boot หรือ C: / (ในระบบ Windows) ได้อย่างไรในภายหลัง ทราบว่าส่วนใดของดิสก์ที่พาร์ติชันใดไม่ทราบว่าแต่ละพาร์ติชันถูกเมาท์หรือไม่ - และโค้ดบางส่วนพร้อมคำแนะนำเพิ่มเติมในการเรียกใช้ (โดยบังเอิญนี่อธิบายว่าทำไมบาง OS เช่น Windows สามารถติดตั้งบนพาร์ติชั่นหลักเท่านั้นรายละเอียดของพาร์ติชั่นเหล่านั้นอยู่ใน MBR และนั่นเป็นข้อมูลพาร์ติชั่นเดียวที่ bootloader อ่านและไม่โหลด EBR ไป เรียนรู้เกี่ยวกับโลจิคัลพาร์ติชันตราบเท่าที่มันเกี่ยวข้องกับพาร์ติชันเหล่านั้นยังไม่มีอยู่)

นั่นรหัสปฏิบัติการจะยังเรียกว่าbootloader เมื่อเราสนใจที่จะแยกแยะระหว่างสิ่งนี้กับสิ่งที่เกิดขึ้นถัดไปมันเรียกว่าบูตหลัก (เพราะถ้าเราไม่ได้สร้าง BIOS ของเราเองเราจะไม่สนใจ ROM บิตจากการควบคุมของเรา)

รหัสนั้นจะมีขนาดเล็กมากเนื่องจากมีขนาดเพียง 400 ไบต์เท่านั้นจึงจะทำสิ่งใด ๆ ได้จริงมันจะโหลดโค้ดบางส่วนเพิ่มเติมซึ่งอาจใหญ่กว่าโดยไม่ต้องจัดการกับข้อ จำกัด นี้

รหัสนี้จะยังเป็นที่รู้จักกันเป็นbootloader เมื่อเราสนใจที่จะแยกแยะความแตกต่างระหว่างสิ่งนี้และสิ่งที่เกิดขึ้นก่อนหน้านี้มันเรียกว่าบูตโหลดเดอร์ตัวที่สอง

รหัสนั้นอาจเป็นขั้นตอนสุดท้ายในกระบวนการ หากคุณใช้ระบบปฏิบัติการเพียงระบบเดียวหรือหากระบบปฏิบัติการทั้งหมดของคุณใช้บูทบูตที่เข้ากันได้ (เช่นการติดตั้ง Linux สองตัวที่ใช้ทั้ง GRUB ดังนั้น GRUB ที่ได้รับการปรับปรุงล่าสุดสามารถเสนอให้บูตเครื่องใดก็ได้) แสดงเมนู (ถ้าต้องการ) โหลดในเคอร์เนลและผ่านการควบคุมบนระบบปฏิบัติการ

ในกรณีที่คุณใช้ระบบปฏิบัติการที่ไม่สามารถทำงานร่วมกับ bootloader นั้นมันอาจจะโหลด เช่นถ้าคุณมี Windows และ Linux บนเครื่องเดียวกันตัวเลือก GRUB สำหรับการโหลด Windows จะโหลดจริง ๆ แล้ว bootloader อื่นที่รู้เกี่ยวกับการติดตั้ง Windows เท่านั้นและส่งผ่านไป แม้ว่านี่จะเป็นขั้นตอนที่สามในกระบวนการ แต่ก็ยังคงเรียกว่าบูตโหลดเดอร์ตัวที่สองเนื่องจากไม่รู้หรือไม่สนใจว่ามีบูตโหลดเดอร์รองอีกอันที่ทำงานอยู่ก่อนหน้า นี่อาจเป็นกรณีที่มีการติดตั้ง Linux ที่ใช้ bootloader รองประเภทอื่น

ส่วนใหญ่เมื่อเราพูดถึงbootloaderในแง่ของ Linux โดยทั่วไปเราไม่ได้หมายถึงรหัส ROM (ไม่ใช่ส่วนหนึ่งของ Linux หรือเปลี่ยนโดยติดตั้ง Linux) เมื่อเราupdate-grubเปลี่ยนเราจะเปลี่ยน bootloader ตัวที่สองซึ่งโดยปกติจะอยู่ใน / boot ของการติดตั้งเฉพาะ เมื่อเราทำการinstall-grubเปลี่ยนแปลงและยังเป็น bootloader หลักใน MBR เพื่อให้มันมีรหัสเพียงพอที่จะรู้ว่า / boot นั้นอยู่ที่ไหน (อาจจะเริ่มซอฟต์แวร์ RAID ตามที่มันไป) และจะทำการโหลดและดำเนินการเมื่อมันถูกประมวลผลเอง .

ดังนั้นโดยสรุปคุณไม่ถูกต้องเมื่อคุณพูดว่า ROM เป็นส่วนหนึ่งของหน่วยความจำหลัก * เพราะแยกจากกัน (แน่นอนRAMถูกนำมาใช้แทนROM) คุณถูกต้องทั้งคู่ในการบอกว่ามี bootloader อยู่ที่นั่นและใน MBR เพราะพวกเขามีสองขั้นตอนของกระบวนการและบางครั้งทั้งคู่ถูกเรียกโดยใช้ชื่อนั้น และคำตอบของ "ระบบปฏิบัติการที่แตกต่างกันจัดเก็บ bootloader ในที่ต่าง ๆ หรือไม่" เป็น "ส่วนใหญ่" เพราะถ้าคุณไม่สามารถทำงานร่วมกันรอง bootloaders จะซ่อน bootloaders อื่น ๆ (ถ้าคุณติดตั้ง Windows หลังจากติดตั้ง Linux) หรือ chainload ลงในอีกหนึ่งหากมีการร้องขอ (ถ้าคุณแก้ไขสถานการณ์นั้นหรือติดตั้ง Linux หลังจาก Windows) แต่เป็นระบบปฏิบัติการ สามารถแชร์ bootloader ตัวที่สองได้ถ้าเข้ากันได้ (ถ้าคุณติดตั้งลีนุกซ์หลังจาก Linux ตัวอื่นที่ใช้บูทตัวโหลดรองชนิดเดียวกันและสามารถเห็นลีนุกซ์ตัวอื่น [บางครั้งซอฟต์แวร์ RAID ทำให้เกิดความสับสน

* ในวันที่หนึ่งจะใช้ประโยชน์จากทั้ง ROM และ RAM โดยทางโปรแกรมมันแตกต่างกัน บน ZX Spectrum ROM จะเป็น 16kiB และรวมล่ามพื้นฐานเพื่อให้คุณเป็นจุดเริ่มต้นสำหรับการโหลดบางอย่างลงใน 48kiB หรือ 128KiB (paged) หรือ RAM (ในกรณีนี้มันคือการบูทเข้าสู่ระบบเป็นหลัก) ตัวแปล BASIC นั้นแล้วใช้สิ่งนั้นเพื่อบู๊ตสิ่งที่อยู่บนเทป) มีฟังก์ชั่นมากมายจากตัวแปลพื้นฐานที่โปรแกรมใน RAM สามารถใช้งานได้ (เหตุใดจึงต้องเขียนฟังก์ชั่นตรีโกณมิติเมื่อคอมพิวเตอร์มีตำแหน่งที่รู้จักแล้ว โดยเฉพาะอย่างยิ่งเมื่อคุณมีเพียง 48kiB เพื่อให้โค้ดของคุณเองทำงาน) ROM นี้ยังสามารถมองเห็นได้ในลักษณะเดียวกับ RAM เพียงที่อยู่ต่างกัน ในกรณีเช่นนี้ ROM เป็นส่วนหนึ่งของหน่วยความจำหลักมากพอ ๆ กับ RAM แต่ไม่สามารถเขียนได้


0

ทำตัวอย่างการทำงานที่น้อยที่สุดและรันบนอีมูเลเตอร์เพื่อทำความเข้าใจแนวคิดเหล่านั้น:

printf '\364%509s\125\252' > main.img
qemu-system-x86_64 -hda main.img

นี่คือ "bootloader" ที่ง่ายสุด ๆ ซึ่งทำตามhltคำสั่งเดียว ข้อมูลเพิ่มเติมได้ที่: https://stackoverflow.com/a/32483545/895245

จากนั้นคุณสามารถเรียกใช้บนฮาร์ดแวร์จริงด้วย:

sudo dd if=main.img of=/dev/sdX

และเสียบ USB บนคอมพิวเตอร์ของคุณแล้วบูตจากมัน

เมื่อคุณทำสิ่งนี้จะเห็นได้ชัดว่า bootloader เป็นสิ่งที่อาศัยอยู่ในดิสก์จัดเก็บข้อมูลถาวรเช่น USB หรือฮาร์ดดิสก์

สิ่งที่มีชีวิตอยู่ใน ROM คือรหัสที่เปิดใช้งาน bootloader สำหรับเราซึ่งเรียกว่าเฟิร์มแวร์ (หรือ BIOS ที่แม่นยำน้อยกว่า)


0

ในวันเก่าโปรแกรมบูตอาศัยอยู่บนเทปกระดาษเจาะที่คล้ายกับที่ใช้โดยเครื่องโทรเลขหรือสื่อบันทึกข้อมูลบัตรเจาะ ('ไม่เห็นทั้งคู่อยู่รอบ ๆ อีกต่อไป) กระบวนการที่ใช้เรียกว่า IPL ย่อมาจาก Initial Program Load บางครั้งหากไม่มีเทปกระดาษหรือเครื่องอ่านการ์ดก็จำเป็นต้องป้อนรหัสไบนารี IPL ลงในโปรเซสเซอร์โดยตรงผ่านแผงคอนโซลที่แผงด้านหน้า ต๊าย!

ทุกวันนี้รหัส IPL อยู่ใน pROMs ซึ่งเมื่อถูกเรียกใช้ในการโหลดแบบเปิดและเรียกใช้ตัวโหลดการบูตตัวรองที่ได้รับการปรับแต่งให้โหลด (bootup) ระบบปฏิบัติการที่ต้องการ ตัวโหลดรองอาจอยู่บนสื่อใด ๆ ในส่วนใด ๆ ของการตั้งค่าที่รู้จักหรือกำหนดแอดเดรสโดยรหัส IPL


-1

บูตโหลดเดอร์มักจะอยู่ในเซกเตอร์แรกของฮาร์ดไดรฟ์ซึ่งโดยปกติจะเรียกว่ามาสเตอร์บูตเรคคอร์ด

ไชโย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.