1 पॉइंट द्वारा GN⁺ 2024-07-16 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • लोग complex और merely complicated चीज़ों में फर्क करते हैं। complexity को दिलचस्प माना जाता है, लेकिन complicated होना हानिकारक माना जाता है। x86_64 CPU setup की प्रक्रिया ज़्यादातर complicated है।
  • यह बताता है कि BIOS द्वारा लोड किए गए boot sector से CPU को 16-बिट real mode से 64-बिट long mode में कैसे सेट किया जाए। यह setup बुनियादी है, और इसके बाद भी और काम की ज़रूरत होती है।
  • Intel 64 और IA-32 Architecture Software Developer’s Manual, assembler (nasm का उपयोग), और QEMU की ज़रूरत है। x86 assembly और nasm syntax की जानकारी होनी चाहिए।

शुरुआत: BIOS

  • reset के बाद x86 CPU "real mode" में होता है। इस mode में डिफ़ॉल्ट operand size 16-बिट होती है। segmentation का उपयोग करके 1MB memory को address किया जा सकता है।
  • BIOS के बाद चलने वाला पहला code boot sector में होता है। BIOS सिस्टम में 0xaa55 पर खत्म होने वाले पहले sector को खोजता है, और उस boot sector को memory address 0x7c00 पर लोड करता है।
  • BIOS 512 bytes देता है, और इन्हीं का उपयोग करके bootloader के बाकी हिस्से को bootstrap करना होता है।

boot sector setup

  • एक साधारण boot sector सेट किया जाता है जो BIOS routine का उपयोग करके स्क्रीन पर एक message प्रिंट करता है और रुक जाता है। इससे यह जाँचा जा सकता है कि tools काम कर रहे हैं या नहीं।
  • boot sector को assembly code और Makefile का उपयोग करके सेट किया जाता है।

चरण 1 – डिस्क से चरण 2 लोड करना

  • bootloader को दो चरणों में बाँटा जा सकता है। चरण 1 boot sector का code है, यानी वही सब कुछ जिसे BIOS लोड करता है। चरण 1 का एकमात्र उद्देश्य चरण 2 को memory में लोड करना है।
  • चरण 2 में 16-बिट real mode से 32-बिट protected mode में स्विच किया जाता है। protected mode में BIOS routines का उपयोग नहीं किया जा सकता। डिस्क से sectors लोड करना काफ़ी ज़्यादा जटिल हो जाता है।
  • BIOS का उपयोग करके डिस्क access करने का तरीका समझाया गया है।

32-बिट protected mode

  • CPU को real mode (16-बिट) से protected mode (32-बिट) में स्विच किया जाता है। protected mode में segmentation का उपयोग memory protection लागू करने के लिए किया जाता है।
  • protected mode में स्विच करने से पहले Global Descriptor Table (GDT) को define करना पड़ता है। GDT को memory में एक contiguous structure के रूप में define किया जाता है।
  • GDT को define करने और protected mode में स्विच करने का तरीका समझाया गया है।

64-बिट long mode

  • long mode में स्विच करने से पहले CPU का protected mode में होना और paging का enabled होना ज़रूरी है। protected mode पहले से सेट है, लेकिन paging की आवश्यकता है।
  • paging, segmentation की जगह लेकर virtual address space, permissions आदि को मैनेज करती है। long mode में स्विच करने के लिए page tables बनाने का तरीका समझाया गया है।
  • long mode में स्विच करने के लिए GDT को define करने, और protected mode से long mode में जाने का तरीका समझाया गया है।

GN⁺ का सार

  • यह लेख x86_64 CPU को 16-बिट real mode से 64-बिट long mode में सेट करने की प्रक्रिया को विस्तार से समझाता है। इससे bootloader और operating system kernel development की समझ बेहतर हो सकती है।
  • इसमें BIOS, boot sector, protected mode, long mode जैसी कई अवधारणाएँ शामिल हैं, और हर चरण के लिए ज़रूरी assembly code और setup methods दिए गए हैं।
  • यह लेख operating system development में रुचि रखने वालों के लिए उपयोगी है, खासकर उन लोगों के लिए जो x86 architecture को गहराई से समझना चाहते हैं। मिलते-जुलते फ़ीचर वाले प्रोजेक्ट्स में "Writing a Simple Operating System – from Scratch" शामिल है।

1 टिप्पणियां

 
GN⁺ 2024-07-16
Hacker News टिप्पणियाँ
  • protected mode में सीधे स्विच किए बिना long mode में जाने का एक तरीका है
    • boot sector में एक छोटा 64-bit kernel लोड करने वाला bootloader बनाया गया है
    • इसमें disk से kernel लोड करने और VESA mode सेट करने की प्रक्रिया शामिल है
  • 80286 में 16-bit register MSW था, और 80386 ने इसे 32-bit CR0 तक विस्तारित किया
    • 64-bit long mode ने EFER MSR जोड़ा और CR0 को 64-bit तक विस्तारित किया
    • अभी CR0 के 11 bits और EFER के 8 bits ही उपयोग में हैं
    • यह जानने की जिज्ञासा है कि Intel/AMD ने मौजूदा registers के खाली bits का इस्तेमाल क्यों नहीं किया
  • इस लेख का सबसे बेवजह जटिल हिस्सा Makefile और linker script है
    • NASM flat binary output बना सकता है, लेकिन लगता है कि लेखक इसे इस्तेमाल करना बहुत "hacky" मानता है
  • CPU को सही mode में स्विच करने के लिए ज़रूरी सभी चरण बेवजह जटिल हैं
    • यह सब backward compatibility के लिए ज़रूरी लगता है
    • Intel शुरू से सही mode में शुरू करने के लिए कोई flag या command दे सकता था
    • या फिर सारी backward compatibility हटा सकता था
    • याद है कि ARM64 में भी ऐसा ही कोई मुद्दा है या नहीं, इस पर खोजबीन की थी
    • यह जानने की जिज्ञासा है कि क्या कोई CPU शुरू से 64-bit के लिए डिज़ाइन किया गया था
    • शायद Itanium का लक्ष्य/डिज़ाइन वैसा ही रहा होगा
  • कुछ UEFI समर्थक यह नहीं समझ पाएँगे कि यह नया bootloader तरीका क्यों बनाया गया
    • जैसा कि लेखक कहता है, "अगर आप यहाँ तक पहुँच गए हैं, तो यह काफ़ी शानदार है"
  • यह जानने की जिज्ञासा है कि UEFI कितना पुराना है
    • अफ़सोस है कि long mode के साथ BIOS को ख़त्म नहीं किया गया
  • यह जानने की जिज्ञासा है कि क्या यह boot प्रक्रिया EFI/UEFI के साथ संगत है
    • यह भी जिज्ञासा है कि क्या UEFI supervisor असली hardware पर real mode/protected mode/long mode को emulate करता है
  • यह जानने की जिज्ञासा है कि ARM पर यह प्रक्रिया अधिक सरल है या नहीं