Great video, thanks. One question: when source is compiled & linked into an ELF file , this file doesn't have any virtual address but local offsets. So , I guess, someone and sometime translate those local offsets to virtual adresses . Is the code (.text, .data ) stored into real memory modified ( by someone ) with virtual address references ? Or code stored into real memory still has got offsets ?
(i am no expert, just writing what i just learned from web) * every process only "sees" virtual memory. * a static linked ELF contains no symbols and is ready to run with a fixed entry point address. * an ELF that uses dynamic libraries contains symbols and needs dynamic linking which is done by the loader ( ld-linux ) In my current Arch Linux the dynamic linker/loader ld-linux is: ld-linux-x86-64.so.2 coming from the glibc 2.36 library package. (it itself is a statically linked ELF executable)
That is one method of implementing VM. There are multiple methods. Not all hardware has the came features which limits sometimes which techniques are used and can even force you to think outside the box which programmers should do anyway.
It is also worthwhile to test that the system does what the documentation seems to imply it should do. Try mmap on a large file using different flags, see what happens when the file is cashed in main memory.