Foundationপ্রথম নীতি থেকে
LEVEL 3 · Assembly Language

Loader

লোডার

OS-এর অংশ যা একটা executable ফাইলকে একটা নতুন process-এর virtual address space-এ map করে আর entry point-এ execution শুরু করায় — execve() syscall-এর ভেতরে চলে।

also: program loader

কোনো আলাদা কমান্ড-লাইন প্রোগ্রাম না — execve() syscall-এর ভেতরে চলে (fork/exec-এর exec, Level 4-এর process লেসনের বিষয়)।

কাজ, ধাপে ধাপে:

  1. ELF header পড়ে কোন section কোথায় map করতে হবে বোঝে
  2. process-এর জন্য একটা নতুন virtual address space তৈরি করে
  3. .text/.data/.bss map করে (প্রায়ই lazily, demand paging দিয়ে)
  4. dynamic executable হলে ld.so চালু করে বাকি symbol resolve করায়
  5. PC/RIP-কে entry point-এ বসিয়ে CPU-কে “শুরু করো” বলে

Executable ফাইল আর চলমান process এক জিনিস না — মাঝখানে এই সক্রিয় রূপান্তরটাই loader-এর কাজ।

ELF-এ linker যা দেখে (section header, fine-grained: .text/.symtab) আর loader যা দেখে (program header/segment, coarse-grained: PT_LOAD — শুধু “কতটুকু byte, কোন permission নিয়ে map করো”) — সম্পূর্ণ আলাদা দুইটা টেবিল, একই ফাইলে, দুই ভিন্ন consumer-এর জন্য। readelf -l দিয়ে segment, readelf -S দিয়ে section দেখা যায়।