Busy Wait の課題
Menu以下の kbhit 関数の実装を調べる
ssh://futenma/net/home/hg/teacher/kono/os/ex/keyrecord
keyrecord/ keyplay
keyrecord/ keyplay のコンパイルエラーを取って、実際に動作させて見よう。
./keyrecord > data stty -raw ./keyplay data
kbhit
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 を動かして、top を使って CPU usage を調べよう。
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 を調べて、下がったことを確認せよ。