Vypracované otázky z Operačných systémov
Napsal: 24. 1. 2008 11:03
Zjavne nie sme prví, ktorí sa potýkajú s menovaným problémom. Nech žije(ú) neznámy(i) autor(i) nasledujúceho diela!
Pro všechny studenty informatiky, fyziky, matematiky a učitelství na Matfyzu provozuje a spravuje Spolek Matfyzák
https://forum.matfyzak.cz/
Kód: Vybrat vše
89. Identify where the following function relies on the virtual address space to store executable code, static data, heap and stack.
void *SafeAlloc (size_t iSize)
{
void *pResult = malloc (iSize);
if (pResult == NULL)
{
printf ("Failed to allocate %z bytes.
", iSize);
exit (ENOMEM);
}
return (pResult);
}
Kód: Vybrat vše
7. Explain what the interface between processes and the operating system looks like, both for the case when the operating system code resides in the user space and for the case when the operating system code resides in the kernel space.
13. Using a step by step description of a context switch, show how an implementation of threads in the user space and an implementation of threads in the kernel space differ in the way the context is switched. Na popisu přepnutí kontextu krok po kroku ukažte, jak se implementace vláken v uživatelském prostoru a implementace vláken v prostoru jádra liší ve způsobu přepínání kontextu.
Kód: Vybrat vše
Identify where the following function relies on the virtual address space to
store executable code, static data, heap and stack.
void *SafeAlloc (size_t iSize)
{
void *pResult = malloc (iSize);
if (pResult == NULL)
{
printf ("Failed to allocate %z bytes.
", iSize);
exit (ENOMEM);
}
return (pResult);
}
Kód: Vybrat vše
Popište obvyklý prubeh systémového volání jako synchronního pozadavku na obsluhu software ovladacem zarizeni. Predpokládejte obvyklou architekturu ovladace, kde spolu asynchronnie a synchronne volané cásti ovladace komunikují pres sdílenou frontu požadavku. Prubeh popište od okamžiku volání do okamžiku ukoncení obsluhy. Každý krok popište tak, aby bylo zrejmé, kdo jsou jeho úcastníci a kde získají informace potrebné pro vykonání daného kroku.
Ja som u jednotlivých vecí označil o čo ide. Teda u parametrov funkcie, lokálnych premenných a volaní ďalších funkcií ide o zásobník, ten reťazec sú statické dáta, volanie funkcií je kód (vlastne celé je to kód) a pri práci s pResult ide o haldu.David píše:Ahoj,
nevite nahodou nekdo odpoved na tuhle otazku?
Napada me neco jako ze kod a static data na zacatku virtualni pameti, za tim heap. Na konci stack. Ale vubec si nejsem jisty, jestli je tohle odpoved na danou otazku...Kód: Vybrat vše
Identify where the following function relies on the virtual address space to store executable code, static data, heap and stack. void *SafeAlloc (size_t iSize) { void *pResult = malloc (iSize); if (pResult == NULL) { printf ("Failed to allocate %z bytes. ", iSize); exit (ENOMEM); } return (pResult); }
Krok 1 - sepsal jsem všechny otázky ze současných skript.jaruch píše:to gask>
Ako si to mergoval to co mas na strankach? Aj si kontroloval, ako sa zmenili od minuleho roku a doplnil nove/ zmenene znenia, ci si len spojil tie subory, co su na studnici? Bo ja som sa o to snazil dnes poobede, ale od devices tam bolo sa mi zda akosi vela rozdielov a ked som videl, ze uz si cosi spravil, tak som to nechal tak...
Inak asi by bolo dobre, keby sme tie vacsie otazky a hlavne exercises co chybaju nejako... dali dokopy, mozno si rozdelili co kto spravi a tak.
A co kdyz by na nic necekalo? Kdyz by dana operace byla rychla? To by se pak volajici vlakno nemuselo uspavat - volani by bylo neblokujici. A zaroven by byla akce provedena pred navratem z volani - tedy bylo by to synchronni. Jinak si to predstavit neumim.macbeth píše:Bo mne sa zda ako nemozne, aby napriklad existovalo neblokujuce synchronne volanie, kedze (podla skript)
Kód: Vybrat vše
14. Interaktivní procesy většinu času čekají na vstup a nic nedělají, ale pokud se něco stane, na co mají reagovat, musí se ke slovu dostat rychle. Naproti tomu, akce, kterou musí provést je typicky nenáročná a stačí jim kratší kvanta.
Dávkové procesy to mají přesně naopak. Většinu času něco počítají a, aby pracovaly trochu efektivně (měly data v cache apod.), potřebují, aby je chvilku nikdo nepřerušoval -> vyžadují delší kvanta. Na druhou stranu nepotřebují být plánovány rychle.
43. Vynechání volatile by mohlo vadit například u stavové proměnné zámku. Pokud by se překladač, nedej Bože, rozhodl práci s ní vyoptimalizovat a nechat její hodnotu jen v registru, protože se stejně za chvíli zase bude měnit, tak zámky přestanou fungovat. Volatile tenhle druh optimalizace zakáže.
57. Wait-free algoritmus zaručuje, že všechny zúčastněné procesy skončí v konečném počtu kroků
68. Interní fragmentace nastává, pokud uživatel dostane větší blok paměti, než si objednal / využívá. To se stává například u heap alokátorů, které umí přidělovat bloky jen o velikostech v násobcích nějaké konstanty. Například buddy systém, který umí jen mocniny dvojky může docílit toho, že proces chce 17B paměti, ale dostane 32B, tedy skoro 50% interní fragmentace. Řešení zas tak moc asi není, jenom přidělovat bloky co nejbližších velikostí jako požadované. Uživatel typicky neví, že má víc paměti, než chtěl, tak s tím moc neudělá.
69. Externí fragmentace spočívá v tom, že v paměti jsou mezi velkými bloky roztroušeny malé, které jsou ale tak malé, že je nikdo nechce. V součtu má tedy systém stále hafo volné paměti, ta je ale rozdrobena do nepoužitelných kousků. Stává se to například zase u těch heap alokátorů, když se hodně alokuje / uvolňuje. Řešení je například bloky setřepat a tím volné místo spojit, to ale jde jenom tehdy, pokud v kódu nejsou absolutní adresy.