Busy Wait の課題
Menu以下の kbhit 関数の実装を調べる
ssh://futenma/net/home/hg/teacher/kono/os/ex/keyrecord
int kbhit(int fd){
int c; fd_set readers,readfds; struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 0; FD_SET(fd,&readers); readfds = readers; c = select(1,&readfds,(fd_set *)0,(fd_set *)0, &timeout); if (c<=0) return 0; if (! FD_ISSET(0,&readers)) return 0; return 1;}
kbhit_test.c は、contorl - C を押すと止まるように書いたが、実際には止まらない。バグを指摘して修正せよ。
epoll/kevent
Mac OS X/BSD Unix には、kevent というのがある。Linux には、epoll という API がある。kbhit に対応する関数を select ではなくて、kevent/epoll で実装せよ。
これを用いて、kbhit_test を動かして、CPU usage に差があるかどうか調べよ。
CPU usage を下げる
kbhit_test の動作を変えないようにしながら、CPU usage を下げるにはどうすれば良いか。hint
usleep select のオプション epoll/kevent のオプション
CPU usage と speed のトレードオフ
speed をどれだけ犠牲にすると、CPU usage をどれだけ下げられるか考察せよ。