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 を調べて、下がったことを確認せよ。

Shinji KONO / Tue Jan 25 13:52:22 2011