Операционная система MenuetOS - Приложения в памяти (original) (raw)
0x90000 - Сюда загружается файл
Заголовок файла +0 -24 db 'MENUET00' ; 8 byte id
+8 -20 dd 38 ; required os (место загрузки в память)
+12 -16 dd START ; program start (смещение START)
+16 -12 dd I_END ; program image end (смещение I_END)
+20 -8 dd 0x100000 ; reguired amount of memory
+24 -4 dd 0x00000000 ; reserved=no extended header
+28 -0 START:
Стартовая область програм начинается с 0x800000 С адреса 0xfb00 область в 256 байт ответственная каждым байтом за запущеный процесс, вход в область начинается с 8 (Почему так не знаю)
Если имеем два процесса запущенных в системе один за другим, то:
0xfb08 01 (Указывает что процесс уже занимает область памяти c 0x800000)
0xfb09 01 (Указывает что процесс уже занимает область памяти c 0x800000+0x100000)
0xfb0a 00 Область памяти 0x800000+0x200000 свободна
Нетрудно догадаться что на каждый процесс отводится по 1 Мб памяти начиная с области 0x800000, т.е. 8Мб, при достижении 27Мб новые процессы в системе запускаться не будут ;-(
Таким образом всего (27-8)= 19 процессов максимум
Задача грузится в область памяти вместе с заголовком поэтому простой способ получить доступ к абсолютному адресу загрузки - mov eax, START-20