Vážení kolegové,

Poznámky pro všechny

Formality:
----------

ODSTRANTE KONECNE TY ABSOLUTNI ODKAZY (typu http://www.cs.vsb.cz/~gry72/tuox/x/y)
a NAHRADTE JE RELATIVNIMI (ve tvaru ./mysrc.html, obecne ../../../supergrandparent.html)

Nasledujici soubory obsahuji absolutni odkazy :-(  :

File FS\MOUNT\MOUNT.HTM:
File FS\INODE\SUPER.HTM:
File FS\INODE\READ.HTM:
File FS\SYSCALL\SYSCALL.HTM:
File FS\VITEJT~1.HTM:

File CD\VITEJTE.HTM:
File CD\VITEJT~1.HTM:


Zdrojove soubory: Na 1.znak 1. radku prosim nevkladejte znak # (obvykle tam je #include),
zmate to prohlizec - spravi to jeden prazdny radek na zacatku souboru.

Zacatek HTML dokumentu - pokud pouzivate ceskou diakritiku, doplnte charset=1250,
napr. nejak takto:

<HTML>
 <HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1250">
</HEAD>

Aby to bylo aspon trochu jednotne, nepouzivejte jinych kodovani nez 1250. Když tak
to můžeme překonvertovat.

Ponechat jmena puvodnich autoru zdrojovych textu, pripsat se pod ne.


Dalsi postup:
-------------
Zkompilujte svuj modul ve Small modelu a bez Borlandskych knihoven (Options/Linker/Libraries
 - Standard Runtime Libs = None).
Overte, jake externi symboly chybi. FS a MM by melo byt mozne zkompilovat
bez nevyresenych odkazu na externi symboly (snad nejake to strcpy, o knihovnu
s temi nekolika funkcemi si reknete knihovnikum).
Tasky+kernel - pripadne zapomenute promenne dopiseme do glo.h, ktere
jako non-extern pripojuje kernel. Nejlepsi by asi bylo, kdybyste mi kazdy
poslali (mailem) seznam chybejicich symbolu, jak je pozaduje linker (nebo
uplne nejlepe jen tech, ktere nejsou v COMMON/glo.h)

Následují poznámky k jednotlivým pracovním skupinám

Testeri
-------
   - struktura adresaru zahrnuje BCLIB s .OBJ s pomocnymi funkcemi
     pro prekladac

   - trap.h: muj novy. bude ne v common/, ale test/
   - seznam header souboru - radsi odkaz do COMMON
   - Nejaky popis fazi testu tak, jak jsem jej navrhnul.
     Testovaci kody od Vas (pro FS a MM), prip. odkazy na ostatni
     testovaci kody (assembler od p.Horyny a C od sl.Rojakove,
     pokud se jich nekdy dockame)

Bootstrap
---------

 - casem by se mel vyspecifikovat nejaky uzivatelsky postup,
 jak urcit, jak velky ma byt ramdisk. Tuto hodnotu nastavit,
 o to mene dostane MM. Asi neco s RAMDiskSize polozkou
 v hlavicce v boot sektoru.

Melo by se take rict, ze konstanta DRIVE v kodu je cislo disku pro BIOS,
ktery hodlam udelat bootable.

Promyslet, co by se muselo udelat, aby BOOT.COM
a loader umel pracovat s partition HDD (rekneme, ze by se
zacatecni cyl,hd,sec partition zadal rucne).
s.h: na zacatek prazdny radek, # jako 1.znak nejak zblbne browser.


Popsat, jak vznikne sekundarni zavadec. Je to DOS .COM nebo co ?
"Describtion" se pise s 'p' :-)

Zduraznit, ze polozka driveNo hlavicky musi byt nastavena
podle disku, ze ktereho bootuji.

ALLOC_TABLE (S.H) - velikost pameti alokovane pro modul
 - nebude to lepsi vzit z TUOX headeru prislusneho modulu ?


Init,login,update & sysprocs
----------------------------
 - /etc/passwd - mohly by se ignorovat radky zacinajici #
 - rict na WWW, kde je passwd a ttys (asi /etc)
 - shutdown() - fflush() - co s tim knihovnici delaji ?
 cache.c: flushall() - podobne v programu sync

sync.c,update.c: existuje v knihovnach volani sync() ?
passwd.c - poradek v headerech (podle knihovniku)
	- ! getpass() v knihovnach neni, napsat si sami
	(s TTY dohodnout NO_ECHO) pres ioctl() !
	- proc zmena umask() ?
- na WWW rict, ze nonroot passwd >6 znaku, upper&lower&nums
-zadne manevry s chown(), passwd patri rootovi, passwd ma SUID na roota
- open_pass() - proc ta smycka ?
- zalozni soubor s hesly, zbytecne, nebezpecne, nejlip zlikvidovat

login.c - popsat tu fintu s promennou prostredi INIT a vubec, jake
	promenne se ocekavaji od INITu.

- zase getpass() - v knihovnach ZATIM NEBUDE, napsat si sam
- main() - kontrola spravnosti hesla - snad strcmp()
- argv[0]: jmeno programu (shellu) - bez "-" na zacatku
- neexistuje-li shell (staci na to chyba v /etc/passwd),
  ohlasit a vratit se k promptu login:
init.c - zverejnit, ze pouziva /bin/sh na vykonani systemoveho
skriptu a jak ze se ten skript jmenuje. Zverejnit, odkud cte
nastaveni terminalu
- na konci cteni tabulky tty zavrit soubor.

cat.c - argc=1 - jmeno programu vzdy 1. argumentem
	-popsat ten vypis z konzoly (parametr -)
	- nemichat ba vystup ty texty ("open file", atd.),
	pridaly by se mezi data -> kdyz tak na stderr nebo vubec ne
echo.c - zase if (argc==0)...
tee.c - chybova hlaseni na stderr
	- na konci: return x-- ?? chyba.
-> co nejdrive dodelat  ls, chown, chmod, mount, umount, chmem, kill
   => nejdulezitejsi prikazy, nezbytne pro testovani systemu

time.c, date.c - v knihovnach asi nebude localtime()
 -> vubec overit, zda ocekavane funkce v knihovnach budou nebo si
  je treba napsat sam.
? format pro time: podle UNIXu
date.c - pocitat s rokem 2000
mkfs.c - oznacit DOS a TUOX verzi
 (nebo seskladat do jednoho zdrojaku a podmineny preklad)
 - struktury superbloku a inode by bylo lepsi include-ovat
	z COMMON (popr. FS), nez to mit opsane
 - help: n_blocks neni "max data blocks": ne maximalni, ale celkovy
     -> pokud neni zadan, lze zjistit pres ioctl() - viz stranka FS (K.Krecmer)
	- ne "blocks for kernel image" ale "... for system image"
 - main() - nejak divne testuje argc, nebo to spis neni v helpu
	switch() - boot_file obcas neinicializovane
	proc test n_inode*2 <= n_block ?

 Zapis boot bloku - vy nebo BOOT.COM od bootstrapu ? -> dohodnout
	( v tom pripade chtit po bootstrapu ciste jen kod zavadece, bez 
	kopirovaciho kodu)

 Defaultni boot blok (bez zavadece)- ne text, radsi par instrukci, ktere
 vypisou neco jako NONBOOTABLE MEDIA (pres BIOS)

 Vypocet poctu bloku s bitmape inode a volnych bloku
  spis treba: (num*sizeof(dana_struktura))/BLOCK_SIZE (+1 ?)
 - dodelat fyzicky zapis bloku - bud pres BIOS nebo floppy task
   (podmineny preklad)
 - v bitmape volnych zon/inode nahodit prvni (resp. 2) bity.
 - Mozna by se na disk mely zapsat "prazdne inodes", tj. s vynulovanou
 tabulkou souborem obsazenych bloku. Nejspis aspon na inode 1, tam take
 rozumne nastavit priznaky (ze jde o adresar, rwx,r-x,r-x, owner=root),
 nulovou delku atd.

pwd - vnitrni prikaz shellu, jako externi vlastne nema smysl
ln.c - lepsi help (ktery parametr je jmeno stareho a noveho souboru)
	- budeme podporovat symbolicke linky ? asi ne (musel by  to obslouzit FS).
	- linky na adresare povolit rootovi.
	- kdyz se nezada druhy parametr: s tim podtrzitkem je to standardni chovani ?
	  (pokud ne, vyhodit).
	- oddelovac cesty je / (ne \)
mkdir.c - radsi vracet skutecny chybovy kod
	(nejlepe ale i rict duvod chyby - seznam moznych chyb viz FS)
mknod.c - test na nulove cisla zarizeni (a jine parametry, nez je cislo).
	Konstanta EXIT_FAILURE ? Radsi chybove kody z ln.

mv.c switch(errno) - pouzit symbolickych konstant z errno.h
	- co ma byt ten prepinac -i ? Kdyz nic, vyhodit
...
...

rm.c ! - fopen("con") - NEJSME NA DOSu !
	- ani bych ten vymaz u uzivatele dotazem neoveroval
	(tim zmizi fce exists() - stejne neresi prava, radsi
	access(), ale staci chybovy kod z unlink()).
rmdir.c - vracet chybove kody z rmdir()  
 


Ramdisk
-------

memory.c: Prenos bloku z proc[] - to pretypovani nejake podezrele.
 Pozor na pointrovou aritmetiku, at k adrese pricitate opravdu
 bajty (m_ptr->m_u.m_dio.position * BLOCK_SIZE) a ne v jednotkach
 velikosti zaznamu proc[]. (&proc je prave ptr na takovy typ)

Hlavni smycka: prijde-li nejaka nesmyslna zprava,
 ve vetvi default i trap(TRAP_UNKNOWN_MSG)

Zapis na DEV_NULL: asi by melo vracet 1, jako ze se zapis bloku 
povedl (ze se data zahodila, vrchni crstvy vedet nemusi).

Jak dopadne IOCTL-GETDEVSIZE na DEV_NULL ?



MM
--
Udelat poradek v headerech - co neni vase prevzit s aktualnimi jmeny
(stahnete si aktualni verze), se skutecnym umistenim headeru (adresar) se uvidi.
Odstranit predevsim ruzne #include "kernel.h", "fs.h" - takovyto hdr vubec neni.

 - zprava exec - popsat, co se ocekava na zasobniku
	(nebo odkaz do me specifikace)
 - tuoxhead.h - k cemu ta konstanta s max. delkou nazvu souboru ?
		- co je ta "max. velikost segmentu" ?
tuoxhead.htm - proc je max. velikost textoveho segmentu
	o 15 mensi nez FFFFh ?
 - na stranku odkaz na header se symbolickym pojmenovanim clenu
	zprav (mm.h ?)
Chybove kody - jak jsem se jiz domahal v mailu : misto merror.h
namapovat chybove stavy na errno.h z COMMON (kody prip. rozsirim,
bude-li treba). Neco je udelano, ale musi se dodelat dusledne.

MM: exec() - co nachystat na stack pri vstupu do programu ?


Domluvte se s bootstrapem, jake parametry ma mit vas main().
Patrne ptr na nejakou strukturu, kde zjistite, kde pro vas
zacina volna pamet.

Popis zprav:
- ke kazde zprave vetu, co ze to dela. V nekterych pripadech
je treba popsat parametry (tam, kde to neni na 1. pohled jasne)


C_FORK - kernel nedoda zadny PID stepeneho procesu, ale z receive()
	vam ve zprave prijde jeji odesilatel, tedy index do proc[],
	takze ze takto vi, ktery proces se stepi.
	Pry to vraci PID noveho detskeho procesu. Kde ? VE FORKEDCHILD ?

funkce panic() - co to je ? Nejspis volejte makro TRAP.
A vubec, zkouseli jste to zkompilovat ? Vsechny headery musi byt 
aktualni, ze systemu ! (moc na to nevypadaji)

Domluvit s bootstrapy, jak predat velikost volne pameti a jeji zacatek do MAIN.

C_EXEC: v parametrech chybi jmeno souboru, ktery vlastne spoustim !!!
 (nebrat jej z ARGV[] ze stacku, tam uz je bez cesty) - pridat ptr
 na jmeno spousteneho programu jako parametr zpravy a prevzit jej
 z adr. prostoru uzivatele stejnym mechanismem, jako prebirate stack.

C_BRK: vystup: jaky "konec alokovane casti" ? Rekneme "konec segmentu
dat a zacatek GAPu". Popsat, jak zjistit hodnotu teto hranice 
(viz stara stranka).
C_WAIT  - kod ECHILD - ne od vas, ale z errno.h.
	- popsat, co je v "termination status" - pocitam mp_sigstatus s mproc[],
	tj. cislo signalu, kvuli kteremu proces skoncil (nebo 0 pokud normalne).

	- popis option WNOHANG: "pokud zadne dite neexistuje"
	   - nemelo by spis byt "... ukoncene dite ..." ? OVERIT v UNIX man-u !.        
	- Tu konstantu WNOHANG musi mit k dispozici C-programator. Domluvit s knihovniky, 
	  kde bude (header).
	
mm_fork(), mm_exit() - rict o teto udalosti FS (patrne by taky meli chytat
zpravu C__FORK a C_EXIT, overte, jake potrebuji parametry (budou asi jine 
nez vase: staci patrne pozice v proc[] procesu, ktereho (-ych) se to tyka)).

C_SIGNAL: dohodnout s knihovniky header, kde budou konstanty SIG_IGN,SIG_DFL
(hodnoty musi byt konzistentni mezi vami a tim, co dostane k dispozici uzivatel
knihoven).

C_ALARM: jste si jisti, ce parametr je pocet sekund ?
 Overit v man-u, ze to standardne nejsou treba milisekundy. Kazdopadne to
 cislo primo predavate clock tasku a ten ocekava tiky nebo tak neco,
 ale urcite ne sekundy.

! CHCI KONECNE TY PARAMETRY ZPRAVY _C_KSIG pro vyrizeni signalu.

C_GETPROCTBL - dohodnout s knihovniky, do ktereho headeru se
	daji ty konstanty pro options, aby byly pristupne zvenci.

PROJDETE SI ZDROJAKY, OBCAS TAM JSOU VE VYKRICNICICH (nebo $$$$$)
POZNAMKY, CO SE MUSI DODELAT. CEMU NEPOROZUMITE, OKAMZITE SE PTEJTE !
PROHLEDEJTE VSECHNY KODY NA VYSKYT MAKER send a receive A OVERTE,
ZDA ZPRAVY PRO TASKY (asi zejmena CLOCK a SYSTEM task) JSOU ZFORUMLOVANY
SPRAVNE S OHLEDEM NA NEJNOVEJSI SPECIFIKACE NA PRISLUSNYCH WWW STRANKACH.

Knihovny
--------

Konstanty pro access() - odkud ?

execve() - ptr na environment - pole pointru ukazuje na ruzne umistene bloky
v pameti, seskladat do spolecneho bloku (see login.c) - aby to umel MM prevzit.
Podobne asi s parametry prik. radku.

Bude krome execve() i execv() ? (mozna je NULL jako posledni argument -> jak si
s tim vyradi MM ?)

Vadi necemu, kdyz argv[0] neni jmeno programu, ale prazdne (pouziva init) ?
Nebo to doplni knihovny ?

assert - jak to dopadlo s tou fci abort() ? Generuje SIGABRT ?
- jaka bude adresarova struktura pro headery v /include ?
 (myslim ruzne ty include/sys atd., chtelo by to pak popsat).

- nenasel jsem volani execve() - to je asi zakladni forma, pocita se s nim

Jak jste si poradili s temi zpravami pro MM, co jsou tak zmatene
popsany ?

stdio - jak zachazi s CR,LF ?

Vase zdrojaky: adresar include/sys: jsou v nem COMMON headery.
Dame to uzivateli ? Nebo se z toho neco vybere, nebo nejaky
podmineny preklad, nebo jak ? Cilem je, aby uzivatel nemusel
zavadet spoustu symbolu zajimavych jen uvnitr systemu.

Shell
-----
- projit headery, ktere pripojujete a podivat se,
jestli a pod jakym jmenem je dali k dispozici knihovnici.

- finalni uprava stranky (doplnit, co uz se dodelalo, ale na strance to vypada,
  ze to jeste neni)
- simulovane roury
- popis jazyka: zda case sensitive, zda musi prikazy zacinat hned na
zacatku radku (nebo povolujete mezery), co komentare ve skriptech ?
- seznam chybovych hlaseni - dopsat
skript3 - nejaky ulet, testuje se stale na tutez konstantu
tsh.c - malloc() - vysledek (void*) radeji pretypovat
- mozna (???) udelat neco, aby to slo snadno overovat na DOSu
 (aspon ten getenv(PS) atd.)

- popsat programatorske reseni analyzy a interpretace skriptu,
at se na to da rozumne navazat.

Floppy
------
!!! - floppy.h - Proc #include dos.h a stdio.h ???
 (pokud to ma byt na testovani, tak podmineny preklad)

- lepe popsat razeni sektoru (co roste nejrychleji: sektory, hlavy, pak
cylindry ?)

Popis zprav: "konzistentni se zpravami RAM Disku" - nejen jeho,
obecne vsech blokovych zarizeni; odkaz na stranku FS Karla Krecmera
Oznamit, jak odlisit pocet zapsanych/nactenych bloku od cisla chyby:
cisla chyb jsou zaporna (errno.h).

Podle stranky FS (fs/device/device.html) dodelat zpravu IOCTL:
 subspravy GETNUMBERMINORDEV - zjisteni poctu minor zarizeni
 (disketovych mechanik) a GETDEVSIZE - zjisteni poctu bloku
 na danem minor zarizeni.
Popis polozek zprav: address - poznacit, ze je adresa v ramci
adr. prostoru procesu proc_nr.

Ve zdrojaku VYRAZNE odlisit rutiny, ktere nejsou pro TUOX verzi,
ale DOSovsky testovaci program - nejlepe by bylo odhodit je
do zvlastniho modulu, nebo na zacatek zdrojoveho textu a kompilovat
je podminene na zaklade definovani/nedefinovani nejakeho symbolu
(vselijaky ty "void interrupt f_counter()" apod. ).

- nez definovat vlastni typy dword a byte by bylo lepsi se smirit
s typy DWord a Byte z COMMON/type.h a pouzivat je, at neni zmatek.

Vyhodit hromady zbytecnych a nepouzivanych konstant (aspon pokud
nemohou byt k necemu dobra pro budoucnost)

HDD
---
- Rozbalit ten ZIP, at se daji zdrojaky stahnout samostatne.
- Popis do HTML a na stranku, at to je videt.

CD
--

Ocekavam predevsim popis normy ISO 9660. Prehled je prinosny a zajimavy,
ale realne vzato podle toho nikdo nic nenaprogramuje. Je treba zjistit,
jak to vypada na vyssich urovnich. Mj. by to chtelo popis struktury adresaru
a od kolegy Kratkeho ten slibovany (technicko-programatorsky) popis ATAPI rozhrani.

Clock
-----
prototyp funkce watchdog(): parametr je int, co v nem je ?
 (mozna nic, nezlikvidujeme ten parametr ?)

Popis func_ptr: mozna explicitne napsat, ze ten ukazatel
je near ptr v ramci spolecneho kodoveho segmentu jadra a tasku

GET/SET TIME: jen bych pripsal, s jakou frekvenci ty tiky chodi
a odkdy se pocita "prvni tik".
SET_ALARM - v jakych jednotkach je ten interval ? V ticich ?
CLOCK_TICK: text "clock interrupt byl vykonan" je dost matouci;
 radsi neco jako: "informace pro clock task, ze doslo k HW preruseni
od hodin". On totiz teprve bude "vykonan", totiz kod, kterym na interrupt
reagujete.

Popis navratovych kodu zprav:
 formalne trochu zmatene-ono to sice skoro kazdemu dojde,
ale co je to m_ptr ?
Jestli by nebylo lepsi treba msg.RET_ERROR_CODE, atd.,
at tam aspon neni ten pointer.

Nakonec by se melo popsat, co clock task vlastne dela mimo obsluhy
zprav od uzivatele, tj. vlastne co se deje v CLOCK_TICK. Jak se
tam pocita to casove kvantum a vola scheduler a sleduje vyprseni
alarmu atd.


Kernel
------

Kdyz uz mate na sve strance odkaz na vytah z me specifikace
(coz je chvalyhodne, jen copyright tam chybi :-)), tak by
se mel upravit podle vasi skutecne implementace.


Bootstrap&kernel
----------------
 kde je SP pri vstupu do main() ? - Pocitam nahore D segmentu


Nachystat stack INITu


Bootstrap
---------
 - predani zacatku volne pameti memory manageru - domluvit (asi pres parametr jejich main funkce)
 - predani zacatku a velikosti ramdisku jeho ovladaci - asi nejjednoduseji jako parametr main funkce

Na WWW popsat uvodni naplanovani procesu - ktere tasky (a servery
a Init) jsou umisteny do kterych front planovace a v jakem poradi.

FS (11.2.98)
--

K popisu zprav:
 Ke KAZDE zprave vypsat error kody, ktere muze vracet
 a strucne duvod kazdeho takoveho chyboveho stavu.
(pro MOUNT,UMOUNT to tam je, ale zahrabane, pro READ,WRITE OK)

ACCESS - napsat, odkud vzit konstanty pro mode (patrne COMMON ?)
CHMOD - co to je "set maska" ? Radsi nejaky odkaz do konstant COMMON
CREAT - mode nejsou "prava", proste rezim otevirani - odkud konstanty ?
podobne OPEN - konstanty

FSTAT,STAT - ukazatel na vyst. buffer - neuvadet jako char*,
 ale rovnou ptr na prislusnou strukturu. Definice te struktury
 by se take mohla nekde na tomto miste vypsat.

TIMS - vstup neni "ukazatel na vyst. buffer typu realtime", vraci
se prece 4 casy, takze kdyz tak ptr na pole 4 realtime polozek.

Co bude s tou zpravou SYNC (->do_sync() { flushAll() } ?

Zprava _C_UNPAUSE od MM, kdyz dorucuje nekomu signal; kdyby
  proces visel ve FS cekajic na cteni, z read() se vrati EINTR


name_i(),search_dir() - popis sice je, ale silne matouci !


cache.html:
 struktura buf - radsi na html stranku dat i hlavicku struktury.
 fsconst.h neni c COMMON, ale FS\COMMON

 Funkce cache: Ty nadpisy (Vraceni bloku atd) mozna nejake vetsi
 nez headery funkci, at je to prehledne.

Popis zachazeni s bloky: neplyne z toho, ze bych mel volat put_block()
i kdyz nic nezmenim, proste vzdy, kdyz uz z blokem nebudu dale pracovat

alloc_zone:  mirne zmateny popis


load_bit_maps - na WWW rict, k cemu je ta pametova kopie
 bitmap dobra a ze bitmapy zustavaji v pametu po celou dobu namontovani 
 prislusneho zarizeni.

super.c:
 load_bit_maps() - test, zda je v cache dost bloku: kdyz neni,
 nevracet blok jako MAP_BLOCK, protoze se takto dale nepouziva.

 WWW: load_bit_maps(): Nastavi prvni 0. a 1. zonu jako obsazenou - snad inode ?
	unload_bit_maps(): misto "pametove bloky" radeji bloky cache


 rw_super() - nejen "nacte do cache", ale zkopiruje do poskytnuteho 
  bufferu.
 - i pri READING je treba blok vratit put_block(), kdyz
   data z nej prevezmete a uz je nepotrebujete (aby se nepovaloval v cache).

 get_inode(): WWW - aby z toho bylo jasne, ze "tabulkou i-uzlu" se mysli
	 tabulka inode[] v pameti.

 put_inode(): Aby v popisu nekoho nematl pojem "pocet odkazu"
  Jedna vec je count, tj. kolikrat je inode najednou pouzit v ramci systemu
  a jina vec je pocet linku, ktery rika, kolik jmen inode vlastne ma.
  Maze se (uvolneni zon souboru) samozrejme pri klesnuti poctu LINKU k nule.
 Taky by se melo popsat, ze s get_inode a put_inode se zachazi stejne
 jako s get_block a put_block v cache: chci-li pristupovat k i-uzlu,
 vyzadam si jeho natazeni do tab. inode[] pres get_inode(), kdyz
 uz jej pak nepotrebuji, volam put_inode().

popis wipe_inode() - Zadna "jista pole" ! Napsat ktera.

popis get_fd(): jaky "volny slot souboru" ? Primo "volny slot tabulky filp[]).
	
Vubec by se strucne mohlo popsat, jak to tam s temi odkazy z tabulky
deskriptoru na sloty filp[] funguje, nebo aspon odkaz na prislusnou
kapitolu me specifikace.

popis read_map() - ne moc srozumitelne
.
popis rw_user() - s pojmy segment:offset radeji neoperovat, kdyz tak
	segment a virtualni adresa v nem.

device.html - odkaz, odkud jsou ta major cisla tasku (COMMON/com.h ?)
 Mohlo by se napsat, ze major # urcuje tridu zarizeni a tim i ovladac
 a je to vlastne pozice tasku prislusneho ovladace v proc[], minor #
 je poradove cislo zarizeni daneho typu.
 popis parametru zprav: proc_nr - napsat, ze je to pozice v proc[],
		at tam nekdo necpe PID.
dev_open() - odkud vzit konstanty pro mode ?
dev_io() - -"- pro rwflag ?

CELY FS: Overit, zda jste spravne pochopili get_block() a put_block().
Get_block() volam, kdyz chci blok, az uz jej nepotrebuji, volam
put_blok() - i kdyz slo jen o cteni.



TTY
---

!!! Zrusit funkce z dos.h, stdio.h, stdlib.h, conio.h apod.
(jste ovladac zarizeni TUOXu, Borlandske knihovny funkci VUBEC_NEBUDOU_PRIPOJENY).

 - dohodnete se s Karlem Krecmerem, jestli zpravy pro vas
nechat ve tvaru TTY-*, nebo prejmenovat na DEV_* (je to skoro 
jedno, jste stejne jedine znakove zarizeni).

! Na strance snad vubec ani nezminovat makra jako m_tty_line
etc (a nezverejnovat v tty_mess.h). Misto toho primo pouzivat
ty m.dio.*, kdyz uz ten format zpravy takto vzniknul. Vsimnete
si, ze ta makra v tty_mess.h jsou stejne naopak: Rongi (puvodni
autor) uz to mel napsane se svymi konstantami, kdyz jsem prisel
s novym formatem zpravy, tak to temi makry vyresil tak, aby se to navenek
jevilo jako dio a vevnitr nemusel nic predelavat.

tty_mess.h: 
 konstanty pro nastaveni/cteni parametru tty:
 zkoordinovat ty konstanty s Karlem Krecmerem a knihovniky, at
 to nekoliduje. Krome toho zverejnit konstanty pro nastavovani
 komunikacnich parametru RS232.

 Konstanty jako SUSPEND a REVIVE - taky jsou definovany nekde
 jinde (v COMMON: SUSPEND a TRYAGAIN v errno.h, REVIVE je zprava
 C_REVIVE z callnr.h), CANCEL  - z headeru vyhodit
 Vyhodit ty zkopirovane typy (ani pres podmineny preklad #if 0 ...)

 Struktury tty_params a _ctrlchars bych mozna dal i do zvlastniho
 headeru spolu s konstantami pro ioctl 
 - muze je chtit #include-ovat C-programator, kteremu nic neni
 do vnirnich veci nejakeho TTY tasku (ani nevi, ze neco takoveho
 existuje). Domluvte s knihovniky.

WWW: Struktura zprav pro TTY:
 tedy vyhodit ty #define m_ , viz vyse.
 Popsat cleny struktur pro ioctl() - kazdy nekolika slovy, jsou
  asi celkem jasne - hlavne vypsat konstanty vsech
 tech modu (co mohu davat do tty_mode: CBREAK, ECHO, ...)

Tak mne napada: zdalipak RS232 podporuje XON-XOFF protokol ?
(obdoba Ctrl-S)

Popis TTY_READ, atd: odkud jsou ty konstanty CONSOLE,
    RS232LINEx,... ? (ne ze by o ne moc slo, stejne jejich
hodnoty potrebuje znat jen root pri volani mknod pri vytvareni
spec. souboru v /dev)

Doplnit popis navratovych kodu zprav (konzistentne s K.Krecmerem)

Na strance s kody oddelte kody RS232 od zbytku, at to je prehledne.

porty.h - jeden prazdny radek na zacatek, at to sezere prohlizec
porty.c - ne natvrdo pro COM1 (Adresy 3fx).
	- pred vyslanim znaku testnout, zda uz je vysilaci registr
	 prazdny
 - v tech kodech skoro nic neni ! A co ta druha strana (ten emulator
terminalu pro DOS, kdyz jste to nechteli psat jako standardni VT100)
 ??????



Otazky k doreseni pro Pana Sefa
-------------------------------
MM,FS: Kdo vyplni jejich sloty pro proces init ? Vsechny polozky
rozumne inicializovat, fork-em se pak kopiruje ke vsem odstatnim procesum.

FS to vyplnuje pri inicializaci, MM se musi prozkoumat

Uvodni vynulovani inode, hlavne tabulky souborem obsazenych bloku.
get_super() - to neumi superblok natahnout, kdyz v tabulce zatim neni ?



Specifikace: 2.4.: server procesy - kde, konstanty
	2.6.: intr pro sys_call je 31h, be 20h

proc[].p_splimit - je to rozumne jako int* ? (ovlivni kernel)
 - jak se to vubec nastavuje ? nejak pres NEWMAP od SYSTASKu ???