[OSy] Dotaz ke 3. zadani
Martin Decky
decky at dsrg.mff.cuni.cz
Thu Dec 13 11:51:18 CET 2007
> Napr. taky gets nie je potrebne robit v kernel-mode, staci to spravit
> ako user funkciu, ktora potom holt bude volat syscall getc - co sice asi
> bude znamenat reziu navyse, ale tomu sa clovek fakt nevyhne (ibaze by
> dovolil user procesom sahat priamo na zariadenia). Podobne printk nemusi
> robit samotny kernel, staci ked to urobis v user mode a pre vypis znakov
> zavolas putc (resp. mozno aj puts by mohla byt cez syscall - kvoli aspon
> nejakej efektivite).
Ano, presne tak to bylo mysleno. Vzpomente si take na drivejsi obecnejsi
vetu v zadani:
"Respektujte pravidlo, ze systemova volani by se mela pouzivat jen na ty
sluzby, ktere nelze _snadno_ implementovat v uzivatelskem prostoru."
Zcela konkretne je tedy v poradku implementovat putc() a getc() jako
syscall (protoze je to pouzivani sluzby pomyslneho "kerneloveho driveru"
obrazovky a klavesnice), ale je zcela nevhodne implementovat printf()
jako specializovany syscall, ktery jen preda argumenty do kernelu a
zavola kernelovy printk().
Variantne by pochopitelne i putc() a getc() mohly byt ciste user space
funkce, ale tim by se navrh architektury systemu velmi zkomplikoval a
zadani nic takoveho nepozaduje.
Kazdopadne za predpokladu, ze mame funkci putc(), lze puts() a printf()
naprogramovat zcela v user space. Analogickou uvahu prosim aplikujte i
na dalsi pripady
M.D.
More information about the NSWI004
mailing list