Основни елементи су сљедећи:
- Процедура за подизање оперативног система – booting.
- Реализација распоређивача процеса – Реализовати кружни алгоритам.
- Реализација техника управљања меморијом – динамичко партиционисање са одабиром најбоље одговарајуће меморијске партиције.
- Реализација фајл система – дрволико (као што је иначе у пракси код већине ОС
- *Реализација интеракције са улазно/излазним уређајима – нека улаз увијек буде тастатура, а излаз монитор. Ова интеракција се може реализовати путем бафера и технике pooling или система догађаја. Овај дио задатка је опциони. Уколико студентима овај захтјев дјелује претежак, могу користити уграђене функције за читање и писање по конзоли.
- Реализовати креирање, читање и брисање датотека – користити повезане листе блокова меморије.
- Осмислити команде оперативног система које треба да садрже најосновније ствари за које ће омогућити покретање већег броја процеса. Студенти имају слободу да наведене команде дизајнирају како желе или да искористе неки linux/windows командни језике. Основне команде су:
- Команда за листање датотека и поддиректоријума у актуелном директоријуму
- Команда за промјену актуелног директоријума
- Команда за креирање, брисање и преименовање директоријума
- Команда за покретање извршне датодеке и слање у позадину како би могао да се покрене нови процес – подразумијева се моментално слање у позадину. То значи да се улазни параметри увијек прослеђују преко текстуалне датотеке, те се резултат извршавања такође исписује у неку излазну текстуалну датотеку. Позив може да буде на сљедећи наћин: <назив команде> <назив извршне датотеке> <назив датотеке са резултатима>
- Листање актуелних процеса – за сваки процес приказати неке стандардне информације попут: пид, имена програма, тренутно стање процеса (према животном циклусу), тренутно заузеће меморије и слично
- Прекид неког процеса
- Блокирање и одблокирање ноког процеса
- Гашење симулатора
- Креирати једноставан асемблер. Овом приликом је потребно креирати највише десетак основних наредби асемблера (пребацивање из/у меморију са регистра, сабирање, одузимање, множење, дијељење, наредба скока и слично). Овом приликом је потребно направити симулацију регистара. Приликом учитавања асемблерског кода (текстуалне датотеке са екстензијом .asm), потребно је генерисати одговарајући машински код, те га потом извршити. Омогућити приказ меморије и регистара.