První písemka, 9. 11. 2016, směs otázek

Procesor a assembler

  1. Je teoreticky možné, aby obyčejný počítač fungoval bez operační paměti (RAM)? Jaké nejdůležitější potíže nastanou a jak by šly případně řešit?
  2. Ne, protože procesor umí vykonávat jedině instrukce z operační paměti.
  3. Je teoreticky možné, aby obyčejný počítač fungoval bez procesoru?
  4. Ne. Bez procesoru v počítači poběží akorát zdroj napětí.
  5. Je teoreticky možné, aby obyčejný počítač fungoval bez pevného disku?
  6. Ano, může bootovat například z flashdisku anebo ze sítě.
  7. Je teoreticky možné, aby obyčejný počítač fungoval zcela bez grafické karty? (Pokud pomineme zjevnou vadu, že nebude kam připojit monitor.)
  8. Ano, může sloužit třeba jako webový server.
  9. Pokud má program pro mikrokontroler Atmega8 velikost 1 kB (kilobajt), kolik zhruba obsahuje instrukcí? Vysvětlete svůj výpočet.
  10. Každá instrukce má dva bajty, proto je instrukcí zhruba pět set.
  11. Pokud program pro mikrokontroler Atmega8 sestává z 200 instrukcí a jde o libovolné instrukce včetně skoků, jakou nejkratší a nejdelší dobu může trvat, než se vykonají všechny z nich? Vysvětlete svůj výpočet.
  12. Vykonat každou trvá přinejmenším jeden takt procesoru, takže celkově aspoň 200 taktů. Protože program obsahuje skoky, může se zacyklit hned na první instrukci a všechny se tedy nevykonají nikdy – nekonečně dlouho.
  13. Pokud program pro mikrokontroler Atmega8 sestává z 200 instrukcí a neobsahuje žádné skoky, žádná přerušení ani volání podprogramů, jakou nejkratší a nejdelší dobu může trvat, než se vykonají všechny z nich? Vysvětlete svůj výpočet.
  14. V tomhle případě je to vždycky zhruba 200 taktů. (Ve skutečnosti některé instrukce trvají déle, takže to může být až 600 taktů, ale to nechceme řešit.)
  15. Dokažte na příkladu ze života, že běžné počítače (narozdíl od mikrokontroleru Atmega8) můžou měnit svůj programový kód, i když jsou zapnuté a nějaký program zrovna běží.
  16. Když obyčejně spouštíme nějaký program, musí se jeho strojový kód nejdřív načíst z disku. Dokud je na disku, jsou to jenom data a spustit by nešla.

Operační systém

  1. Uvažte situaci, kdy jeden z mnoha běžících procesů právě provádí instrukci podmíněného skoku. Která instrukce (tj. na jaké pozici v paměti) se může provést jako následující? Vypište rámcově všechny varianty.
  2. Tři varianty: buďto skočíme, a to na adresu, na kterou podmíněný skok ukazuje. Nebo neskočíme, pak se provede následující instrukce. Anebo nastane hardwarové přerušení, což přebije obě předchozí varianty a následující instrukce bude program ošetřující to přerušení, které nastalo.
  3. Uvažte situaci, kdy nastane hardwarové přerušení. Jakým způsobem to ovlivní aktuálně běžící proces a jak to může ovlivnit všechny ostatní?
  4. Proces dočasně běžet přestane, aby se mohlo ošetřit přerušení. Pokud se nestane něco zlého, proces pak bude opět pokračovat, jako by nic. Všechny procesy systému může takové přerušení ovlivnit skrze operační systém, pokud mají uživatelská oprávnění se to dovědět.
  5. Uvažte situaci, kdy některý proces má v paměti uložená tajná data. Neví se předem, kde ta data jsou, ale z nějakých důvodů je přímo před nimi tisíckrát za sebou napsáno „přísně tajné“. Může jiný proces spuštěný zároveň data v paměti najít a přečíst? Vysvětlete.
  6. To nejde, virtuální paměť brání číst data ostatních procesů.
  7. Uvažte situaci, že by byla softwarová chyba například v programu Skype a na nějakou specifickou zprávu by odpověděl tak, že by přečetl a poslal kilobajt dat odněkud z paměti. Jaká všechna data by hypoteticky z počítače takovým způsobem mohla uniknout?
  8. Může tak uniknout cokoliv, co má v paměti přímo Skype, tedy například historie zpráv a přihlašovací údaje. Žádné jiné dokumenty ani hesla takhle utéct nemůžou.