Now the time has come for me to dig up an old corpse and give it new life. The corpse in question is twsinit from Bizarre Sources, a project where I once crammed the whole init program in Linux into 1 page of memory.
You see, any program that runs has memory allocated to it for things like code, data, stack, environment, etc. The normal size for init in Linux is about 1-1.5MB in memory. But the init process really only needs to do one job; it inherits all orphan processes and thus has to take care of its “children” terminating. Otherwise they turn into zombie processes.
To do that job you really dont need 1MB of code. So I wrote a program from scratch called twsinit that can do the job of starting the system and buring zombie processes. The last official release did the job in two pages of memory, 1 page code and 1 page stack. But another version after that did away with the stack page as well.
So right now Im digging around in my old code, relearning how it works, and then I need to move on to learning ARM assembly and calling conventions in ARM Linux. Shouldnt be too difficult.