To be done.
Primitivní řešení, bootstrap natáhne program, který má pro sebe celou paměť.
Nevýhody jsou zřejmé, chybí device drivery, software není přenositelný. Potřeba přenositelnosti, vznikají operační systémy, tou dobou v podstatě jen device drivery. Example CP/M.
Table 3.1. Struktura paměti CP/M
Adresa | Obsah |
---|---|
0000h-0002h | Warm start vector (JMP BIOS + 3) |
0005h-0007h | System call vector (JMP BDOS) |
005Ch-006Bh | Parsed FCB 1 |
006Ch-007Bh | Parsed FCB 2 |
0080h-00FFh | Command tail area |
0100h-BDOS | Transient program area |
BDOS-BIOS | BDOS |
BIOS-RTOP | BIOS |
Paměť se při startu systému pevně rozdělí na partitions, do každé partition se umístí jedna aplikace. V závislosti na architektuře systému se mohou udělat buď oddělené fronty aplikací, které se budou zpracovávat v jednotlivých partitions, nebo jedna společná fronta aplikací.
Example IBM OS/360, říkal tomu multiprogramming with a fixed number of tasks (MFT). Později bylo zavedené multiprogramming with a variable number of tasks (MVT).
Klasické problémy jsou vnitřní fragmentace a umisťování aplikaci do partitions, s tím souvisí také problém relokace a ochrany dat.
Relokace se řeší buď bez podpory hardware, prostou úpravou binárního kódu aplikace, nebo s podporou hardware, pak je zpravidla k dispozici bázový registr. Bázový registr má jednu drobnou přednost, tou je relokace za běhu aplikace.
Ochrana je možná buď zavedením práv ke stránkám, nebo omezením adresového prostoru.
Example IBM 360, paměť rozdělená na 4KB bloky, každý měl 4b klíč a příznak fetch protect. Při čtení fetch protected stránky nebo při zápisu libovolné stránky musel mít program v registru PSW shodný klíč. Registr PSW bylo možné nastavit pouze v supervisor režimu.
Example CDC Cyber 6000, each application had to be allocated a single partition, starting at the address in Reference Address (RA) register, limit at the length in Field Length (FL) register.
U fixed partitions bylo navíc vidět, že pár malých aplikací může zablokovat systém na neúnosně dlouhou dobu, pokud je malý počet partitions. Aby se tomu zabránilo, zavedlo se periodické odkládání procesů na disk (swapping).
U fixed partitions se také začalo více narážet na situaci, kdy se program vůbec nevešel do fyzické paměti. Zavedlo se postupné nahrávání částí programu tak, jak byly používány (overlaying). Bohužel toto mírně zpomaluje volání procedur, mírně zatěžuje programátora a neřeší problém velkého heapu.
Protože fixed partitions mají vysokou vnitřní fragmentaci, nejsou pro swapping příliš vhodné. Zavedly se tedy variable partitions, princip je zřejmý.
Problémem variable partitions je externí fragmentace, případně také možnost změny velikosti segmentů za běhu. Fragmentace by se mohla řešit setřásáním segmentů za běhu, ale to se raději nedělá, protože to dlouho trvá a kvůli relokaci to nemusí být triviální. Example CDC Cyber 6000, mainframe ve výrobě kolem 1970, jeho feritová paměť se slovem šířky 60 bitů měla speciální hardware, který uměl přesouvat paměť rychlostí 40 MB za vteřinu. Relokace byla snadná díky adresaci bázovým registrem.
Přibývá samozřejmě také nutnost pamatovat si rozvržení variable partitions, což je problém, který se objevuje i v mnoha podobných situacích, jako je správa heapu, správa paměti v kernelu, správa swapu.