Multiprogramirani sistemi
Spooling sistemi su imali nedostatak u činjenici da korisnik nije mogao postići maksimalnu iskorištenost CPU-a ili U/I uređaja. Tada se došlo na ideju da bi operativni sistem umjesto jednog programa u memoriji trebao omogućiti istovremeno smještanje nekoliko kompjuterskih programa. Upravo ova činjenica imala je veliki, a možda i presudan značaj za razvoj savremenih operativnih sistetema, jer je omogućila multiprogramiranje (istovremeno izvršavanje nekoliko različitih poslova) u pravom smislu te riječi. U multiprogramiranim sistemima, opeativni sistemi imaju jednostavnu ulogu da prebacuju kontrolu sa jednog posla na drugi. Kada je potrebno da jedan posao (eng. job) čeka na neki resurs ili neku operaciju, CPU prebaci kontrolu na drugi posao. Bitno je naglasiti da je multiprogramiranje prva instanca gdje operativni sistem mora donositi odluku za korisnika. Multiprogramirane operativne sisteme možemo uprediti sa poslom advokata. Advokat ima nekoliko klijenata kojima pruža svoje usluge. Dok jedan slučaj čeka da dođe na sud, advokat može da zastupa drugi slučaj aktivno na sudu. Za to vrijeme prvi klijent može sređivati papirologiju i sl. Kod multiprogramiranih operativnih sistema susreću se dva nova pojma: job scheduling - što bi se moglo prevesti kao raspoređivanje poslova CPU scheduling - podrazumijeva dodjeljivanje procesora po određenom pravilu različitim poslovima, drugim riječima znači raspoređivanje procesora Prvi pojam, job scheduling susreće se u situaciji kada je potrebno dovesti nekoliko poslova koji se nalaze na nekom rezervnom skladištu, a koje se naziva job pool, u glavnu memoriju koja nije dovoljna da prihvati sve poslove odjednom. Tada operativni sistem treba odlučiti koje će poslove dovesti u memoriju. Drugi pojam se odnosi na situaciju kada su već određeni poslovi dovedeni u memoriju i čekaju na izvršenje. Tada CPU treba odlučiti koje poslove da usluži, a da se sačuva ravnopravnost u izvršavanju različitih poslova.