Ústav informatiky a výpočetní techniky Language/Codepage <a href='/~arnost/vyuka/sj2/zadani2.html.en'>
 

SJ2 - Projekt č.2

Poslední modifikace zadání: 6.1.2000

1. Zadání

Projekt řeší skupiny maximálně tří (nebo dvou) studentů. Každé zadání může být vybráno maximálně šesti studenty, tj. dvakrát pro trojčlenné skupiny. Zvolené zadání je třeba ve vlastním zájmu co nejdříve oznámit zasláním mailu na adresu arnost@dcse.fee.vutbr.cz. Text dopisu musí obsahovat složení skupiny řešitelů a subjekt (věc) dopisu by měl pro zjednodušení obsahovat text "SJ2-PRJ2". Zpráva o potvrzení nebo odmítnutí zadání bude zaslána zpět e-mailem. Aktuální přiřazení projektů je na samostatné stránce.

Projekty se řeší v chráněném režimu procesoru 80286 nebo vyššího. Při řešení úloh je vhodné využít modul KERNEL.ASM, který je k dispozici na síti společně se zadáním. Bližší dokumentace je v souboru KERNEL.TXT. Pokud při použití tohoto modulu narazíte na chybu, opravte ji a napište o tom do dokumentace (a pošlete mi e-mail). Tento modul se stále vyvíjí, takže podnětné návrhy k jeho zdokonalení a hlášení o chybách jsou vítány. Pokud bude některá vlastnost tohoto modulu na překážku při řešení projektu, tak ji upravte a zdokumentujte.

Všechny úlohy (procesy) a podprogramy (subrutiny) budou provádět nějaký výstup na monitor.

Co není specifikováno v zadání je na svobodné volbě řešitelů. Vlastní úpravy zadání je nutno uvést v poznámce na začátku programu a v dokumentaci. Je také možno vymyslet si vlastní zadání, které ovšem musí být schváleno nejdéle do 17.12.1998 (schvaluje Arnošt).


1.1 Nepreemptivní multitasking 1

[Maximálně 2 lidi ve skupině]

Vytvořte dvě úlohy, které se budou navzájem přepínat (tj. z jedné úlohy se bude spouštět úloha druhá a naopak). Přepínání realizujte pomocí instrukce vzdáleného skoku. Běh programu se bude ukončovat (návrat do módu reálných adres) stiskem klávesy (je nutno ošetřit IRQ 1). Ověřte a zdokumentujte možnost přepínání pomocí instrukce vzdáleného volání.

1.2 Nepreemptivní multitasking 2

[Maximálně 2 lidi ve skupině]

Vytvořte dvě úlohy, které se budou navzájem přepínat (tj. z jedné úlohy se bude spouštět úloha druhá a naopak). Přepínání realizujte pomocí brány přepnutí úloh. Program je třeba ukončovat návratem do módu reálných adres. Prozkoumejte a zdokumentujte chování při různých úrovních priorit pro dané úlohy.

1.3 Nepreemptivní multitasking 3

[Maximálně 2 lidi ve skupině]

Vytvořte dvě úlohy, které se budou navzájem přepínat (tj. z jedné úlohy se bude spouštět úloha druhá a naopak). Přepínání realizujte pomocí přerušení, jehož přerušovací vektor ukazuje na bránu v IDT, která zpřístupňuje TSS nového procesu. Zpětné přepnutí se provádí pomocí instrukce IRET při nastaveném bitu NT. Program je třeba ukončovat návratem do módu reálných adres.

1.4 Preemptivní multitasking 1

[Maximálně 2 lidi ve skupině]

Vytvořte dvě úlohy, mezi kterými se bude předávat řízení. Předávání řízení provádí speciální část (plánovač procesů), která reaguje na přerušení od časovače (IRQ 0). Přepínání realizujte pomocí instrukce vzdáleného skoku. Program je vhodné ukončit návratem do módu reálných adres. Ověřte a zdokumentujte možnost přepínání pomocí instrukce vzdáleného volání.

1.5 Preemptivní multitasking 2

Vytvořte dvě úlohy, mezi kterými se bude předávat řízení. Předávání řízení provádí speciální část (plánovač procesů), která reaguje na přerušení od časovače (IRQ 0). Přepínání realizujte pomocí brány přepnutí úloh. Program je vhodné ukončit návratem do módu reálných adres. Prozkoumejte a zdokumentujte chování při různých úrovních priorit pro dané úlohy.

1.6 Subrutina 1

[Maximálně 2 lidi ve skupině]

Vytvořte jednu úlohu, která bude opakovaně volat svoji subrutinu. Úloha předává subrutině parametry na zásobníku a dostává od subrutiny nějakou hodnotu. Program je třeba ukončovat návratem do módu reálných adres. Volání subrutiny realizujte pomocí brány volání. Ověřte možnost umístění brány volání v GDT i LDT. Prozkoumejte a zdokumentujte chování při různých úrovních priorit úlohy, brány a subrutiny.

1.7 Subrutina 2

Vytvořte jednu úlohu, která bude spouštět podprogram (kód v jiném segmentu). Ověřte a zdokumentujte možnost spuštění podprogramu pomocí instrukcí vzdáleného skoku, vzdáleného volání a pomocí přerušení. Prověřte všechny kombinace priorit úlohy a podprogramu v kombinaci s příznakem přívětivosti (conforming). Pro přechod do nižší úrovně privilegovanosti použijte instrukci propůjčení aktuální úrovně privilegovanosti (ARPL). Běh programu (funkčních kombinací priorit) se bude ukončovat (návrat do módu reálných adres) stiskem klávesy (je nutno ošetřit IRQ 1).

1.8 Tři procesy na 80386

Vytvořte tři procesy, dva se mezi sebou budou přepínat pomocí brány přepnutí úloh, třetí bude s volitelnou prioritou přepínán pomocí přerušení časovače, jehož vektor ukazuje na bránu, která zpřístupňuje TSS procesu. Návrat bude proveden přes IRET s nastaveným bitem NT. Program bude vytvořen pro procesor 80386 a vyšší. Program je vhodné ukončit návratem do módu reálných adres.

1.9 Ochrana paměti při přístupu k datům

Vytvořte program, který bude demonstrovat mechanismus ochrany paměti při přístupech (čtení a zápis) k datovým segmentům na různých úrovních priviligovanosti z kódových segmentů na různých úrovních (0-3). Vyzkoušejte všechny kombinace. Ošetřete výjimky způsobené chybnými přístupy do paměti. Program je třeba ukončovat návratem do módu reálných adres.

1.10 Brány přerušení

Demonstrujte rozdíl mezi bránou přerušení (interrupt gate) a bránou skoku (trap gate). Demonstrujte rozdíly v kontrole úrovní priority mezi instrukcí INT n a přerušeními generovanými procesorem (výjimky). Prověřte různé kombinace úrovní oprávnění úlohy, brány a obslužné rutiny. Program je třeba ukončovat návratem do módu reálných adres.

1.11 Nepreemptivní přepínání kontextu koprocesoru

Vytvořte program, který bude demonstrovat mechanismus zpožděného přepínání kontextu matematického koprocesoru. Vytvořte alespoň dvě úlohy, které budou provádět nějaký výpočet pomocí koprocesoru a přepínejte mezi nimi pomocí instrukcí dlouhého skoku. Koprocesor nemusí být využíván všemi úlohami trvale, aby se kontext přepínal jen "podle potřeby". Nastavte správně bity EM a MP v registru CR0. Ošetřete výjimku 7 tak, aby přepínala kontexty koprocesoru mezi úlohami. Program je třeba ukončovat návratem do módu reálných adres.

1.12 Preemptivní přepínání kontextu koprocesoru

Vytvořte program, který bude demonstrovat mechanismus zpožděného přepínání kontextu matematického koprocesoru. Vytvořte alespoň dvě úlohy, které budou provádět nějaký výpočet pomocí koprocesoru. Koprocesor nemusí být využíván všemi úlohami trvale, aby se kontext přepínal jen "podle potřeby". Předávání řízení provádí speciální část (plánovač procesů), která reaguje na přerušení od časovače (IRQ 0). Nastavte správně bity EM a MP v registru CR0. Ošetřete výjimku 7 tak, aby přepínala kontexty koprocesoru mezi úlohami. Program je vhodné ukončit návratem do módu reálných adres.

1.13 Stránkování na žádost

Vytvořte program, který bude demonstrovat princip funkce virtuální paměti pomocí stránkování na žádost. Vytvořte alespoň dvě úlohy, které budou pracovat s větším objemem dat (např. Eratosthenovo síto, řazení, apod.). Předpokládejte, že máte k dispozici jen určitý omezený počet fyzických stránek paměti (např. 4), který je menší než velikost virtuální paměti (např. 16 stránek). Virtuální paměť realizuje pro jednoduchost také v normální paměti, nepoužívejte odkládací soubor. Stránkujte pouze data, kód úloh nechte vždy v paměti.
Pokud úloha přistoupí na stránku, která není právě přítomná ve fyzické paměti, dojde k výjimce a správce virtuální paměti odloží nějakou jinou stránku (page-out) a do vzniklého volného místa ve fyzické paměti překopíruje požadovanou stránku z virtuální paměti (page-in). Znázorněte činnost správce virtuální paměti na obrazovce. Program je vhodné ukončit návratem do módu reálných adres. Velmi kvalitní řešení může být ohodnoceno body navíc.



2. Obhajoba a odevzdání

Obhajoby projektů proběhnou během posledního týdnu výuky v lednu 2000. Pokud se sejde dostatek zájemců, může se uspořádat další termín obhajob i dříve. Obhajoba bude před komisí, obhajovat se bude u počítače (bez slajdů). Každý člen řešitelského týmu pohovoří o části programu, na které se podílel, seznámí komisi s problémy, které při práci na projektu řešil a zodpoví případné dotazy. Přibližná doba obhajoby je 10 minut pro prezentaci projektu a 10 minut pro odpovědi na dotazy. Termíny a časové rozvržení obhajob jsou na samostatné stránce.

K obhajobě se dostavte pokud možno o něco dřív než je uvedeno v časovém rozpisu, aby komise nemusela zbytečně čekat na další skupiny pokud by něčí obhajoby skončily dřív nebo se nekonaly.

V rámci každé skupiny si studenti určí podíl každého člena skupiny na konečném řešení (v procentech).

Odevzdávají se všechny zdrojové soubory s kódem v JSI, dávka nebo Makefile pro překlad a dokumentace o rozsahu 2--3 strany A4. Řešení projektů by měla být odevzdána v den obhajoby (i po obhajobě), nejpozději v pondělí 17.1.2000. Pokud použijete modul KERNEL.ASM, odevzdejte verzi použitou k řešení úlohy (popř. i s vašimi úpravami) spolu s ostatními soubory. Mohlo by se stát, že aktuální verze na síti nebude kompatibilní s předchozími verzemi a to by mohlo při hodnocení vést ke značné ztrátě bodů.

Dokumentace by se měla zabývat problematikou, která souvisí s řešenou úlohou, zvláště pak částmi, které nejsou podrobně popsány v literatuře. Rovněž by zde měly být uvedeny všechny odchylky od zadání a vlastní interpretace sporných částí zadání (pokud nastanou nejasnosti, zdokumentujte je).



3. Hodnocení

Každý student může získat až 20 bodů.
Orientační hodnocení jednotlivých částí projektu:
 program 14
 dokumentace 3
 obhajoba 3

Při posuzování programu se hodnotí též nápaditost výstupu na monitor.



4. Literatura a pomůcky

F. Zbořil - Strojově orientované jazyky (skripta FEI VUT Brno)
Z. Vrátil - Assembler PC
M. Brandejs - Mikroprocesory INTEL (Grada)
Q:\VYUKA\SJ2\MANUALS\ - Manuály k procesorům Intel
Q:\VYUKA\HABAN\AT-HELP\SHHELP.COM
KERNEL.TXT - Dokumentace k modulu KERNEL.ASM
Internet :-)


© Ústav informatiky a výpočetní techniky, Božetěchova 2, 612 66 Brno
Tel.: 54114 1144, 541212 219, Fax: 54114 1270
E-mail: uivt@fee.vutbr.cz, Web: http://www.fee.vutbr.cz/UIVT/
Poslední změna: 6. January 2000