[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