บูตเป็นเรื่องยาก
กำลังบูต ... อืม ... มันเป็นส่วนที่ยากที่สุดจริงๆ ทุกครั้งที่คอมพิวเตอร์บูทเครื่องจะพบกับตัวเองใหม่ มันรับส่วนต่าง ๆ ของตัวเองและแต่ละคนจะได้รับความสามารถ แต่มันต้องดึงตัวเองขึ้นมาจากรองเท้าบู๊ตของตัวเองดังนั้นต้องพูดจากตารางหนึ่งทุกครั้ง
เมื่อออกแบบกระบวนการบู๊ตเคล็ดลับคือการนำเครื่องจักรขึ้นมาเป็นขั้นตอน บูตของคุณจะต้องเป็นไปอย่างรวดเร็วและเชื่อถือได้และมันจะต้องเป็นสิ่งที่ทั้งสองอยู่ในสภาพแวดล้อมที่ไม่รู้จักสมบูรณ์ทุกครั้ง ฉันจะไม่แม้แต่เสี่ยงกับการสนทนาในโหมด Real / Protected (ซึ่งไม่ได้บอกว่าฉันทำได้)แต่มีหลายอย่างเกิดขึ้นตอนบู๊ต ในขณะที่คอมพิวเตอร์หลอมรวมส่วนประกอบต่าง ๆ ของมันทุกครั้งที่ทำเช่นนั้นในขั้นตอนที่สำเร็จการศึกษา สิ่งที่สำคัญที่สุดก็คือการย้ายจากการเรียกใช้งานโค้ดออนบอร์ดไปสู่การเรียกใช้งานโค้ดบนดิสก์หรือในคำอื่น ๆ - เคอร์เนล exec นี่คือเมื่อเฟิร์มแวร์(อย่างเห็นได้ชัด)ยอมจำนนต่อระบบปฏิบัติการ
หลายปีที่ผ่านมาสิ่งนี้ไม่ได้เกิดขึ้นมากนัก มันเคยเป็นไบออสจริงๆคือ Basic In / Out - โปรแกรมปกติจะทำการโทรไปที่เฟิร์มแวร์สำหรับสิ่งต่าง ๆ เช่นการวาดหน้าจอและการเข้าถึงดิสก์ สิ่งเหล่านี้เรียกว่าการขัดจังหวะ - หมวกเก่าอาจจำได้ดีที่สุดสำหรับความตื่นเต้นที่พวกเขามักพบในการกำหนด IRQ สำหรับ dot-matrix หรือ USR ใหม่
INT13h
มันเป็นอินเทอร์รัปต์ ( หรือINT
ในแอสเซมบลีภาษา )ชุดฟังก์ชัน13Hที่ BIOS นำเสนอเป็นบริการสำหรับการเข้าถึงดิสก์ สิ่งเหล่านี้ยังคงใช้กันอยู่ทุกวันนี้สำหรับระบบ BIOS ในกระบวนการบู๊ตเพื่อกระโดดจากเฟิร์มแวร์ไปยังดิสก์
ระบบ BIOS จะตรวจสอบไม่กี่ไบต์แรกของแต่ละดิสก์ที่พบและมองหารูปแบบก็ยอมรับว่าเป็นBoot Record โท ( หรือMBR
) นี่คือมาตรฐาน de-facto ที่มีอายุหลายสิบปีและรวมถึงบิตของไบนารีที่สามารถเรียกใช้งานได้ซึ่งถูกเขียนถึงส่วนหัวของดิสก์ MBR ทำเครื่องหมายดิสก์ BIOS ว่าสามารถบูตได้ มันจะหยุดการตรวจสอบเมื่อพบสิ่งหนึ่งและในทางปฏิบัติอย่างใดอย่างหนึ่งคือทั้งหมดที่คุณได้รับโดยไม่ต้องใช้เล่ห์เหลี่ยมฉลาด เมื่อมันไม่พบหนึ่งมันแผนที่ไปยังหน่วยความจำและรันมัน(ในโหมดจริง แต่ฉันยังคงไม่ได้ไปที่นั่น)
MBR ที่ดำเนินการแล้วนั้นไม่ใช่เคอร์เนลระบบของคุณ - 512 ไบต์(ให้หรือรับ)จะค่อนข้างไร้ประโยชน์ในแผนกนั้น นี่อาจเป็นbootloaderซึ่งเป็นโปรแกรมที่ได้รับการออกแบบมาโดยเฉพาะเพื่อเอาชนะหนึ่งในข้อ จำกัด ด้านการจัดการกับ BIOS โดยเฉพาะอย่างยิ่งว่ามันไม่เข้าใจระบบไฟล์ใด ๆ เลย
เมื่อ bootloader อ่านในเคอร์เนลที่เกิดขึ้นจริงและดำเนินการมันในหน่วยความจำ(ที่เราอธิษฐานทั้งหมดมันจะทุกครั้ง)ก็อาจจะทำได้โดยขอให้ BIOS ผ่านทางINT13H
โทรขัดจังหวะ และถ้ามันไม่ - bootloaders นักเล่นหลายคนจะเมานต์ระบบไฟล์ในความรู้สึกทั่วไปและรันโค้ดอีกวิธีหนึ่ง - มันมีโอกาสน้อยมากที่ bootloader จะมีจินตนาการโดยไม่ต้องINT13H
สองหรือสอง บ่อยครั้งที่ bootloaders จะต้องทำการโหลดตัวเองหรือขั้นตอนต่าง ๆของตัวเองเพราะ 512 ไบต์แรกที่ได้รับการจัดสรรไม่เหมาะกับความต้องการของพวกเขา
ไก่และไข่
ทั้งหมดนี้เป็นวิธีที่วงเวียนของการอภิปรายเกี่ยวกับดิสก์ฉันรู้ แต่ ณ จุดนี้มันควรจะชัดเจนว่าปัญหาหลัก - หนึ่งอาจเรียกว่าประเภทไก่และไข่ - การเข้าถึงดิสก์ที่มีคำแนะนำโปรแกรม เกี่ยวกับวิธีการเข้าถึงดิสก์ กุญแจสำคัญของปัญหานี้คือเฟิร์มแวร์และยังคงแตกต่างกันมากแม้ในระบบ EFI และอ่อนแอที่สุดหรือไม่เฟิร์มแวร์คือลิงค์ที่สำคัญที่สุดในโซ่การบูต
คุณจะเห็นเมื่อเคอร์เนลดำเนินการและรูทีน myriad ทั้งหมดสำหรับการเข้าถึงและควบคุมการเริ่มต้นฮาร์ดแวร์ปัญหาทั้งหมดเหล่านี้หายไป(หรืออย่างน้อยก็เปลี่ยนไปบ้าง)เนื่องจากระบบปฏิบัติการสมัยใหม่ใช้การควบคุมเต็มรูปแบบของระบบ แต่จนกว่าพวกเขาจะทำข้อ จำกัด ของระบบขยายจนถึงเท่าที่เฟิร์มแวร์จะอนุญาต สิ่งนี้พูดมาก - BIOS ไม่ได้เปลี่ยนแปลงมากนักตั้งแต่ 8086 การINT13H
โทรเป็นต้นฉบับ 8086 ใช่มีการขยาย(มากมาย)และแฮ็กแน่นอน แต่นวัตกรรม ... ?
ดียิ่งขึ้น
การเปลี่ยนแปลงส่วนใหญ่ของ BIOS นั้นเป็นเพียงแค่ bandage ที่ดีที่สุด เคยเป็นฮาร์ดดิสก์จะต้องมีการแมปทางกายภาพ - ลักษณะที่หลากหลายและเฉพาะเจาะจงของรูปทรงเรขาคณิตของมันถูกอ้างถึงเมื่อข้อมูลถูกเก็บไว้ในมันหรือดึงออกมาจากมัน ในที่สุดฮาร์ดดิสก์ธรรมดาก็มีขนาดที่ห้าม แม้แต่แผนที่นามธรรมก็เป็นข้อมูลที่มากเกินไปสำหรับ BIOS ที่จะจัดการได้ เนื่องจากสามารถทำงานได้ในโหมดจริงเท่านั้น BIOS จึง จำกัด ที่ 1 MB ต่อการลงทะเบียนหน่วยความจำ ทำให้แผนที่ทรงกระบอกพองตัวใหญ่กว่านั้นหรือทำให้คุณสมบัติใด ๆ ที่มีขนาดใหญ่กว่านั้นสามารถแก้ไขได้ในหลาย ๆ บิตและ BIOS นั้นหายไปอย่างแท้จริง
สิ่งกีดขวางนี้เคยเจอและแตกหักหลายครั้ง ทุกครั้งที่แผนที่มีการสรุปและเข้ารหัสในวิธีที่ใหม่กว่าฉลาดและแม่นยำน้อยกว่า ดังนั้นวันนี้เป็นไปไม่ได้ที่ไบออสจะแมปไดรฟ์ได้อย่างถูกต้อง Logical Block Addressingเป็นมาตรฐาน de-พฤตินัยในขณะนี้แม้ว่าการแปลรูปทรงกระบอก / หัว / เซกเตอร์(หรือ CHS)บางอย่างยังคงจำเป็น สิ่งที่เฟิร์มแวร์เมนบอร์ดสูญเสียไปจากความถูกต้อง / ความรับผิดชอบส่วนขยายดังกล่าวได้สรุปและเพิ่มลงในความรับผิดชอบของเฟิร์มแวร์ดิสก์เพื่อเติมเต็มช่องว่าง
มันเป็นเกมแมวและเมาส์ที่อ้างถึงในคำถามของคุณ เมื่อ BIOS ล้มเหลวในการทำความเข้าใจดิสก์เกินกว่าขนาดที่กำหนดเนื่องจากขนาดที่แท้จริงแล้วข้อมูลใด ๆ ที่คุณอาจต้องการเรียกคืนเมื่อคุณบู๊ตเช่น bootloader หรือเคอร์เนลอาจมีอยู่ไม่ดีกว่าจุดนั้น นี่คือที่/boot
มาจาก
อาจดีกว่าจริง ๆ
ทุกวันนี้สิ่งเหล่านี้ขอบคุณที่ไม่เกี่ยวข้องกับการตายของ BIOS มันเป็น 30 ปีที่ผ่านมา แต่มันได้ถูกแทนที่ส่วนใหญ่ในช่วงไม่กี่ปีที่ผ่านมาโดยUEFI (หรือ EFI 2.0)มาตรฐาน UEFI จัดให้มีการเมานต์จากนาทีแรกมันเริ่มต้นในโหมดที่ได้รับการป้องกันมันรวม bootloader ของตัวเองมันให้หน่วยเก็บข้อมูลตัวแปรหน่วยความจำแฟลชรีบูตถาวร, มันเป็น spec'd เพื่อจัดการ zetabytes มากมายหรืออะไรก็ตามต่อดิสก์ ... และมาก อื่น. มันไกลจากความสมบูรณ์แบบ แต่มันเป็นการปรับปรุงที่เหนือกว่ารุ่นก่อน
แม้แต่ข้อโต้แย้งสำหรับ bootloaders เฉพาะที่เกี่ยวข้องกับการเข้ารหัสดิสก์หรือระบบไฟล์แบบเลเยอร์ก็ไม่ราบรื่นเมื่อคุณพิจารณาว่าสิ่งเหล่านี้จะต้องได้รับการจัดการโดยเคอร์เนลระบบปฏิบัติการต่อไปและหากคุณมีการติดตั้งตอนบูต ยิงรันมัน(โดยเฉพาะอย่างยิ่งการพิจารณาว่าลินุกซ์เคอร์เนลในการกำหนดค่าเริ่มต้นเป็น EFI ปฏิบัติการทั้งหมดของตัวเอง)
ดังนั้น/boot
พาร์ติชันที่แยกต่างหากอาจไม่เกี่ยวข้องกับคุณมากเกินไปและถ้าคุณอยู่ในระบบ EFI คุณอาจมีอะนาล็อกในพาร์ติชันระบบ EFI อยู่แล้วเนื่องจากเป็นข้อกำหนดสำหรับการบูตโหมด EFI