OPERAČNÍ SYSTÉMY
Semestrální projekt
Marek Fukala, L95201
Emanuel Hučka, L95513
File System - opravy a kontroly TUOX
  1. 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.
  2. Vypracování:
    1. 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é.
    2. 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.
    3. 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
      .
    4. 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.
    5. 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ů.
    6. 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.
    7. ! TUOX SPEC.: vysvetleni cache - zkontrolovat
      Zkontrolováno.

Vytvořili Marek Fukala a Emanuel Hučka 24.8.1999