tty driver와 Blocking i/o 질문..

taeels의 이미지

안녕하세요. 리눅스 디바이스 드라이버를 공부하던 중 궁금한 점이 생겨서 이렇게 질문 올립니다.

사내에서 이미 구현 완료 된 tty driver 코드를 보며 진행하고 있는데요.

일단 tty쪽을 설명드리면...

.read가 지원되지 않으므로, kthread를 따로 만들어서 flip buffer를 채워 줍니다.

static int read_thread(void *data) 
{
  while(1){
    wait_event_interruptible(waitq, state);
    ...
    tty_flip_buffer_push(str);
  }
}

이런 형태로 데이터를 push한 후 지속적으로 wait_event_interruptible을 호출합니다.

이 스레드는 누가 만드느냐 하면,

.open 이녀석이 만들어 줍니다. tty node를 open하면 kthread가 생성되는 것이지요.

static int tty_open(...){
  kthread_run(read_thread), NULL, "mythread")
}

이런 형태로요..

.write 함수는 condition을 만족시켜주고 wake_up_interruptible을 호출하도록 되어 있습니다.

그런데,
user space app에서 해당 노드를 open하면, app이 sleep에 들어가지 않습니다.

read하는 순간 block 되고 있습니다(물론 write작업을 하면 잠시 실행이 됩니다). kthread가 노드 open직후 실행되니, 바로 block이 될 줄 알았는데 아니에요..

이렇게 되는 이유를 잘 모르겠습니다.

open해서는 프로세스가 잠드는 것이 아니고, 실제 i/o 작업을 요청할 때에만 wait_event_interruptible이 동작하는 것인가요?

코멘트 주시면 감사하겠습니다(__)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.