system operacyjny podczas uruchamiania pliku typu .COM jest załadowanie pliku do segmentu pamięci, ustawienie rejestrów (m.in. wskaźnika stosu na koniec segmentu, pozostałych rejestrów na początek segmentu) i przeskoczenie do początku załadowanego programu.
Każdy program zapisany w tym formacie musi mieścić się w jednym segmencie pamięci, czyli zajmować maksymalnie 64KB. Podczas uruchamiania programów tego typu tworzony jest nagłówek PSP (Program Segment Prefix), a zaraz za nim wczytywany jest cały program. Blok PSP znajduje się pod adresem: CS:0000-CS:0100, a zaraz za nim kod programu (CS:0100:CS:????).
Dzięki segmentacji architektury x86 takie rozwiązanie działa. Jeżeli program mieści się w jednym segmencie, to sprawa jest rozwiązana, jeżeli natomiast nie to istnieje potrzeba obliczania adresów względnych, co spoczywa na rękach programisty. Sytuacja ta jest dosyć prosta do rozwiązanie i dosyć łatwa do zautomatyzowania, a zajmować się tym będą już linkery i loadery w kolejnym MS-DOSowym formacie plików, czyli formacie .EXE.
UNIX-owe pliki a.out
Nagłówek pliku:
int |
a_magic; |
// |
numer magiczny | |||
int |
a_text; |
// |
długość kodu | |||
int |
a_data; |
// |
długość danych | |||
int |
a_bss; |
// |
wielkość danych |
niezainicjowanych | ||
int |
a_syms; |
// |
wielkość tablicy |
relokacji | ||
int |
a_entry; |
// |
punkt wejścia do |
programu | ||
int |
a_trsize; |
// |
wielkość tablicy |
relokacji |
dla |
kodu |
int |
a_drsize; |
// |
wielkość tablicy |
relokacji |
dla |
danych |
Ładowanie i uruchamianie plików a.out:
NMAGIC (1975- 1990s)
• przeczytanie nagłówka w celu wydobycia informacji o rozmiarach segmentu
• sprawdzenie, czy istnieje dzielony segment dla tego pliku, jeżeli tak to mapujemy ten segment do przestrzeni adresowej procesu, jeżeli nie ma to zapisujemy do nowego segmentu