Loader
লোডার
OS-এর অংশ যা একটা executable ফাইলকে একটা নতুন process-এর virtual address space-এ map করে আর entry point-এ execution শুরু করায় — execve() syscall-এর ভেতরে চলে।
also: program loader
কোনো আলাদা কমান্ড-লাইন প্রোগ্রাম না — execve() syscall-এর ভেতরে চলে
(fork/exec-এর exec, Level 4-এর process লেসনের বিষয়)।
কাজ, ধাপে ধাপে:
- ELF header পড়ে কোন section কোথায় map করতে হবে বোঝে
- process-এর জন্য একটা নতুন virtual address space তৈরি করে
.text/.data/.bssmap করে (প্রায়ই lazily, demand paging দিয়ে)- dynamic executable হলে
ld.soচালু করে বাকি symbol resolve করায় - 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 দেখা যায়।