Zadání:
Kontroly a opravy zdrojových kódů souborového systému pro operační systém TUOX.
Zadání viz. soubor dodelat.txt. Pozn.: Po konzultaci se zadavatelem
byly provedeny jen níže uvedené změny.
Vypracování:
MOUNT.C: get_dir - vracel ptr na lokalni automatickou promennou
(pole char[255], udelal jsem z ni static, nekdy prepsat lepe)
Návrh řešení:
I. Místo předávání tímto statickým způsobem, by bylo vhodnější využít služeb memory manageru a
alokolat si předem paměť. Potom předat modulu adresu této paměti, ten do ní zapíše výsledek
a vrátí obsluhu do volající fce. Ta si jej přečte a odalokuje paměť.
II. nebo lépe: v místě volání funkce GET_DIR počítat se změnou názvu souboru, který dáváme
jako parametr funkci GET_DIR. Vypreparovaný název adresáře by byl předán zpět přímo v této vstupní
proměnné.
OPEN.C: do_open - zakomentovano nekolik testu (nesmyslnych ?)
Řešení:
Test na přístup k i-nodu je proveden hned za okomentovaným blokem kódu. V testu se zjišťuje
funkcí ACCESS, jestli je povolen přístup k inodu v módu, který je předán v FS_MSG.FS_MODE.
Proto nemá význam testovat vzlášť možnost zápisu.
Druhá podmínka v komentované části, týkající se testu na adresář také nemá v kontextu smysl.
buf_pool() - zkontrolovat odstranovani bloku, ktere presahuji hranici 64kB
Řešení:
- přečte se adresa začátku bloku
- vytvoří se z ní reálná 20-bitová adresa
- přičte se délka bloku - reálná adresa konce bloku
- porovnavají se horní 4 bity adresy začátku a konce bloku
- pokud se nerovnají - daný blok vymaže
Upravený soubor cache.c .
FS/MAIN.C: fetch_name: zapomenut count - predelano, ovsem otresne, cte se bajt
po bajtu az do nuly (kvuli kazdemu msg systasku), nekdy zkultivovat
Návrh řešení:
Kopírování byte po byte je nutné z toho důvodu, že nemůžeme zjistit délku vstupního řetězce,
jelikož ten se nachází v jiném adresovém prostoru, do kterého se z filesystemu přímo
nedostaneme. Jako nejlepší řešení by zřejmě bylo doplnit do jádra (SYSTASK.C) další
typ zprávy vedle již stávajících (např. SYS_COPY). Zpráva by se mohla označit
SYS_LEN. Vracela by délku k zadanému řetězci. Tím pádem se ve funkci fetch_name
nejprve zjistí délka řetězce a následně se už pomocí SYS_COPY kopíruje najednou celý řetězec.
Zpravy C_TIME,C_STIME predefinovany podle CLOCK, musi se jim prizpusobit
knihovny (a dokumentace)
Řešení:
- v Tuox\Clock\Clock.C je chyba ve výpočtu milisekund. Výpočet by měl být ve tvaru (realtime%HZ)*1000/HZ.
Bez této úpravy vrací CLOCK čas v milisekundách jako zbytek po dělení počtu tiků frekvencí tiků.
FS/STDCALL/PROTECT.C: forbidden() - zkontrolovat! (prepsal jsem, snad dobre) pripsan #include "common\stat.h"
Řešení:
Zdrojový kód funkce forbidden jsme zkontrolovali, a jeví se jako správný.
Při kompilaci nehlásí kompilátor chyby.