• कंप्यूटर के पावर बटन दबाने के क्षण से Linux kernel के चलने तक की प्रक्रिया को चरण-दर-चरण समझाने वाला तकनीकी विवरण
  • CPU के real mode से शुरू होकर protected mode और long mode में जाने की प्रक्रिया को विस्तार से कवर किया गया है
  • BIOS/UEFI firmware, bootloader (GRUB), kernel decompression और address relocation जैसी हर स्टेज की भूमिका और काम करने के सिद्धांत का विस्तृत वर्णन
  • memory mapping, interrupt, page table, kASLR जैसे kernel initialization के लिए ज़रूरी मुख्य कॉन्सेप्ट्स को संक्षिप्त उदाहरणों के साथ समझाया गया है
  • Linux बूट के अंदरूनी मैकेनिज़्म को समझकर system architecture, security, performance optimization के बारे में गहरी समझ मिलती है

Part 1 — पावर बटन से kernel के पहले execution तक

  • पावर बटन दबाते ही CPU real mode में reset होकर शुरुआती निर्देशों को execute करता है

    • real mode, 8086 दौर से मौजूद एक सरल addressing scheme है, जिसमें segment और offset को मिलाकर physical address निकाला जाता है
    • उदाहरण: physical_address = (segment << 4) + offset
    • reset के बाद CPU 0xFFFFFFF0 address (reset vector) पर jump करता है और firmware को control सौंप देता है
  • register CPU के अंदर मौजूद ultra-fast storage slots होते हैं, जैसे CS (code segment), IP (instruction pointer) आदि

    • CS मौजूदा code की location बताता है, और IP अगले execute होने वाले instruction की ओर इशारा करता है

BIOS और UEFI

  • BIOS पुराना firmware है, जो POST (power-on self test) के बाद boot order की जाँच करता है और bootable disk खोजता है
    • bootable disk की पहचान पहले 512-byte sector के अंत में 0x55AA मार्कर से होती है
    • BIOS इस sector को 0x7C00 address पर copy करके वहीं jump कर execute करता है
  • UEFI इसका आधुनिक विकल्प है, जो सीधे filesystem को समझ सकता है और बड़े boot programs load कर सकता है
    • BIOS के विपरीत इसमें “first sector” जैसी सीमा नहीं होती, और यह OS को अधिक समृद्ध system information देता है

bootloader

  • bootloader वह program है जो kernel को memory में load करता है और execution की तैयारी करता है
    • आम तौर पर GRUB इस्तेमाल होता है, जो config file पढ़कर kernel और initial ramdisk (initrd) को memory में load करता है
    • kernel file, real mode के लिए एक छोटे setup program और compressed kernel main image से मिलकर बनी होती है
    • GRUB, kernel location, command line, initrd location जैसी जानकारी setup header structure में लिखकर kernel setup code पर jump करता है

setup program

  • kernel execution से पहले एक अनुमानित और स्थिर workspace तैयार करने का काम करता है
    • segment registers (CS, DS, SS) को align करता है और direction flag को clear करता है ताकि memory copy एक समान तरीके से काम करे
    • stack बनाता है ताकि function call के समय temporary data store किया जा सके
    • BSS area (global variables का वह क्षेत्र जिसे प्रारंभिक मान 0 से शुरू होना चाहिए) को 0 से initialize करता है
  • earlyprintk option होने पर serial port सेट करके शुरुआती debug messages output किए जा सकते हैं
  • firmware से RAM map (e820) माँगकर usable memory regions और reserved regions की पहचान की जाती है
  • सारी तैयारी पूरी होने पर पहली C function main को call किया जाता है, और उसके बाद mode transition चरण शुरू होता है

interrupt

  • interrupt वह मैकेनिज़्म है जिसमें CPU मौजूदा काम को थोड़ी देर रोककर किसी urgent event को handle करता है
    • key input, timer आदि इसके सामान्य hardware events हैं
    • maskable interrupt को अस्थायी रूप से रोका जा सकता है, जबकि NMI (Non-Maskable Interrupt) हमेशा handle होता है
    • mode transition के दौरान unexpected interrupts से बचने के लिए इन्हें अस्थायी रूप से disable किया जाता है

Part 2 — real mode से 32-bit, फिर 64-bit तक

  • आधुनिक Linux x86_64 architecture के long mode में चलता है
    • real mode → protected mode → long mode के क्रम में चरणबद्ध transition ज़रूरी होता है

protected mode

  • यह 1980 के दशक की सीमाओं से आगे बढ़ने के लिए लाया गया 32-bit mode है, जिसमें दो मुख्य structures होते हैं
    • GDT (Global Descriptor Table) : segment का starting address, size और permissions तय करता है
      • Linux flat model का उपयोग करता है, जिससे पूरा 32-bit space एक लगातार क्षेत्र की तरह सरल हो जाता है
    • IDT (Interrupt Descriptor Table) : interrupt आने पर किस handler को बुलाना है, उसका address रखता है
      • boot के दौरान केवल न्यूनतम IDT load की जाती है, और kernel initialization के बाद पूर्ण IDT install होती है

mode transition प्रक्रिया

  • setup code पहले interrupt disable, PIC chip stop, A20 line enable, और math coprocessor initialize करता है
    • A20 line, 1MB address wrapping समस्या को हल करने के लिए इस्तेमाल की गई एक ऐतिहासिक व्यवस्था है
  • न्यूनतम GDT और IDT load करने के बाद, CR0 register के PE bit को set किया जाता है और far jump किया जाता है
    • इससे protected mode में प्रवेश होता है, और segment व stack pointer को नई addressing scheme के अनुसार फिर से सेट किया जाता है

control registers

  • CR0: protected mode को activate करता है
  • CR3: page table का top-level address store करता है
  • CR4: PAE जैसी extended features को enable करता है

long mode में जाने की तैयारी

  • 64-bit mode में switch करने के लिए दो शर्तें ज़रूरी हैं
    • paging enable होना: virtual address और physical address के बीच mapping करनी होती है
    • EFER register के LME (Long Mode Enable) bit को set करना
  • page tables 4KB units में pages map करती हैं, लेकिन शुरुआती boot के समय 2MB units वाले identity map से सरल configuration बनाई जाती है

paging enable करने की प्रक्रिया

  • PAE feature को CR4 में enable किया जाता है, और low-address region को 2MB units में cover करने वाली न्यूनतम page tables बनाई जाती हैं
  • top-level table का address CR3 में लिखने के बाद paging enable की जाती है
  • EFER का LME bit set करके 64-bit code पर jump किया जाता है, और long mode में प्रवेश हो जाता है
  • address और registers 64-bit width तक expand हो जाते हैं, और kernel execution के लिए तैयारी पूरी हो जाती है

Part 3 — kernel decompression, address fix-up, और self-relocation

  • अब CPU 64-bit mode में है, और memory में compressed kernel image मौजूद है
    • एक छोटा 64-bit stub kernel को extract करता है और addresses को adjust करने का काम करता है

शुरुआती cleanup और safety setup

  • stub अपनी वास्तविक execution location की गणना करता है, और अगर kernel के साथ overlap हो रहा हो तो self-relocation के जरिए सुरक्षित स्थान पर चला जाता है
  • अपने BSS area को initialize करता है, और एक साधारण IDT load करता है (जिसमें page fault और NMI handlers शामिल होते हैं)
    • page fault होने पर missing mapping तुरंत जोड़कर recovery की जाती है
  • kernel, boot parameters, command line buffer आदि आवश्यक क्षेत्रों के लिए identity mapping बनाई जाती है

kernel decompression

  • extract_kernel function चलाया जाता है, जो kernel compression को खोलता है
    • gzip, xz, zstd, lzo जैसे कई compression algorithms supported हैं
    • extraction के बाद ELF header पढ़कर code/data sections को सही addresses पर copy किया जाता है
  • अगर kernel का build address और वास्तविक load address अलग हों, तो relocation किया जाता है
    • address वाले instructions और pointers को actual memory location के अनुसार ठीक किया जाता है
  • सारी तैयारी के बाद start_kernel function पर jump किया जाता है, और यहीं से वास्तविक kernel initialization शुरू होती है

kernel का self-randomization (kASLR)

  • kASLR (Kernel Address Space Layout Randomization) kernel के physical और virtual addresses को randomize करके attacks को कठिन बनाता है
    • boot के समय दो base values को random चुना जाता है
      • physical base: RAM का वह address जहाँ kernel वास्तव में रखा जाएगा
      • virtual base: वह शुरुआती virtual address जिसे kernel उपयोग करेगा
  • चयन प्रक्रिया
    • bootloader, initrd, command line buffer आदि उन क्षेत्रों की सूची बनाई जाती है जिन्हें सुरक्षित रखना ज़रूरी है
    • firmware के memory map को scan करके पर्याप्त बड़े खाली क्षेत्रों की खोज की जाती है
    • hardware random instructions आदि से मिली entropy के आधार पर random slot चुना जाता है
  • यदि उपयुक्त क्षेत्र न मिले तो default address पर वापस लौटते हैं, और nokaslr option होने पर randomization disable कर दी जाती है

शब्दावली सारांश

  • Hexadecimal (16-आधारी संख्या प्रणाली) : 0x prefix से दर्शाई जाती है, hardware bit structure और alignment के लिए सुविधाजनक
  • Register: CPU के अंदर का temporary storage (CS, DS, SS, IP, SP आदि)
  • Segment/Offset: real mode address calculation की विधि (segment * 16 + offset)
  • BIOS/UEFI: system initialization और boot program loading करने वाला firmware
  • Bootloader (GRUB) : kernel load करना और system information देना
  • Stack/BSS: function temporary storage और 0 से initialized global variable area
  • Interrupt/NMI: hardware/software events को handle करने का mechanism
  • GDT/IDT: segment और interrupt definition tables
  • A20 Line: 1MB address wrapping रोकने वाला switch
  • Protected Mode/Long Mode: 32-bit और 64-bit execution modes
  • Paging/Page Tables: virtual address और physical address

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.