TUOX – RAM disk task
Zadani:
Odladeni ovladace RAM disku na minimalnim jadre, ustaveni konvenci pro
stanoveni adresy zacatku a velikosti pameti pro RAM disk - spoluprace s
bootstrapem a predani zacatku volne pameti memory manageru.
Původní stránky:
1997-98
1996-97
Popis ovladace:
Ovladac mem_task zajistuje funkci techto zarizeni:
- /dev/ram – vlastni ramdisk, inicializuje se pri startu TUOXu na 64 kB
- /dev/mem – cela (realna) pamet TUOXu, 640 kB, pristupne pro cteni a s velkou opatrnosti i pro zapis (nikdy ne nulty blok!)
- /dev/kmem – tabulka procesu proc[], pristup pouze pro cteni
- /dev/null – zarizeni null – zapomene vsechno, co je zapsano, pri cteni vraci vzdy 0 prectenych bloku
Popis prijimanych zprav viz stranky 1997-98.
Zdrojove kody
Ovladac RAM disku mem/memory.c, mem/memory.h,
testovaci soubory test/test5m.c = zakladni test blokoveho zarizeni,
test/test6m.c = kompletni test blokoveho zarizeni (zapis do vsech bloku a kontrola spravneho cteni), testovaci faze 5 a 6.
Upravy a doplneni zdrojovych kodu:
-
Testovaci faze (test.cnf):
#define TEST_CODE "test/test5m.c" (nebo test6m.c)
#define TEST_PHASE 5 (nebo 6)
#define TEST_USE_MEM
Funkce: testy blokovych zarizeni.
-
Do projektu (!.prj) je treba pridat mem/memory.c
-
Upravy kmain.c:
-
radek 161: misto idle musi byt (r. 161 - 165):
#if defined USE_MEM
mem_task,
#else
idle,
#endif
-
radek 342 (nebo jinde): deklarace mem_params[]
int mem_params[2];
-
radek 369: inicializace mem_params[]: pocatecni segment, velikost
mem_params[0] = k_data_segment+65536/16; /* volny segment za DS */
mem_params[1] = 65536/BLOCK_SIZE; /* pocet bloku = 64 */
-
radek 375: pridani procesu do seznamu uloh
if (task[i]!=mem_task)
addToProc(i,k_code_segment,task[i],NULL,0, (task[i]==idle) ? -1 : TASK_Q);
else
addToProc(i,k_code_segment,task[i],mem_params,2, TASK_Q);
Stav: Driver i testy plne funkcni
-
1.6.1999 Problem s predavanim parametru mem_task (pole, struktura?)
-
7.6.1999 Parametry predany pres pole int[], neni zarucena typova kontrola (mem_task je deklarovan jako PUBLIC void mem_task(Word origin, phys_bytes size);)
Testovaci message vyvola trap(), asi jsou spatne zadane parametry
-
8.6.1999 Problem byl ve volani send() místo send_recv() a chybejici m_type, dalsi problem je ve vypoctu pameti pro ramdisk.
-
29.6.1999 Konecne jsem prisel na to, ze neni dobre zapisovat do prvniho kb /dev/ram :-)
RamDisk je inicializován na DS+1:0, s velikostí 64 kb, /dev/kmem spravne odpovida na DEV_WRITE, zapis do /dev/ram a /dev/mem je třeba odzkouset pod MS-DOSem.
-
20.8.1999 Po mensi prestavce je hotova funkcni verze driveru i obou testu (funguje i pod M$ Wir NT).