/proc/<PID>/stat 에서 current eip 에서 커널 영역 주소가 나타나지 않는 이유가 뭘까요???
디바이스 프로그래밍 공부중에
static ssize_t
mycdrv_read (struct file *file, char __user * buf, size_t lbuf, loff_t * ppos)
{
printk (KERN_INFO "process %i (%s) going to sleep\n", current->pid,
current->comm);
wait_event_interruptible (wq, (atomic_read (&data_ready)));
printk (KERN_INFO "process %i (%s) awakening\n", current->pid,
current->comm);
atomic_set (&data_ready, 0);
return mycdrv_generic_read (file, buf, lbuf, ppos);
}
이러한 디바이스 드라이버의 read 함수를 프로그램이 호출하였고,
wait_event_interruptible 에서 프로그램이 sleep 모드로 들어갔습니다.
이때 cat /proc//stat 을 통해서 current eip 를 표시해보면 0xC 로 시작하는 드라이버 모듈의 커널 영역 주소가 아니라 0xB로 시작하는 유저 영역 주소로 항상 표시 됩니다. 도무지 이유를 모르겠습니다.
게다가 pid 1 부터 시작해서 많은 프로세스들의 current eip 를 표시해보아도 커널 영역 주소는 전혀 나타나지 않습니다.
분명히 수많은 프로세스들이 시스템콜중일 텐데 말이죠...
자세한 설명 부탁드립니다.
댓글 달기