커널 Document/mutex-desin.txt 질문입니다.

jai의 이미지

source: <커널코드2.6>/Documentation/mutex-design.txt
 
mutex 장점
- smaller structure: on x86, mutex is 16 bytes, semaphore is 20 bytes.
- tighter code: 25052 bytes of code saved
- faster: 2.4 times
- CONFIG_DEBUG_MUTEX 를 켜서 검사할 수있다.
        * - only one task can hold the mutex at a time
        * - only the owner can unlock the mutex
        * - multiple unlocks are not permitted
        * - recursive locking is not permitted
        * - a mutex object must be initialized via the API
        * - a mutex object must not be initialized via memset or copying
        * - task may not exit with mutex held
        * - memory areas where held locks reside must not be freed
        * - held mutexes must not be reinitialized
        * - mutexes may not be used in irq contexts
 
mutex 단점
- interrupt context 에서 사용할 수 없다. (주석!세마포가 원래 그렇다. spinlock은 사용할 수 있다.)
- acquired context 에서만 unlock 할 수 있다. (주석!세마포랑 다른점이다. 세마포는 상관없이 unlock.)

2.6에 새로 추가된 struct mutex 를 공부하는 데요.
헷갈리는 맥락을 물어볼려고 공부한 파일을 카피했습니다.
interrupt context 와 acquired context 에서 막혔습니다.

질문1. context 는 process의 state, TASK_RUNNING,INTERRUPTIBLE,UNINTERRUPTIBLE, ZOMBIE,STOPPED 인거죠?

interrupt context 에서 사용할 수 없다는 건,interrupt handler function 내부에서는 mutex를 사용할 수 없다.
질문2. mutex를 잡은 후에 interrupt 되는 건 괜찮은 거죠?

IsExist의 이미지

os 에서 context라는 말은 "스케줄링은 context가 교체되는 것이다"는 표현을 씁니다.
스케줄링의 대상이 되는 context을 말합니다.

그런데 저기 표현의 interrupt context와 acquried context에서 context는
약간 의미가 틀린거 같습니다. 후자가 제가 말한 context에 더 부합되는것
같구요.

말그대로 풀이하자면 '인터럽트 구문에서는 사용할 수 없다'가 맞지 않을까
생각됩니다. 아니면 제가 말한 후자의 의미로 'context 인터럽트에서는 사용할 수 없다'.
정도로 해석할 수 있겠네요.

acquired context 표현에 맞게 'context 인터럽트에서는 사용할 수 없다'에 한표.

이렇게 해석한다면 질문2에서는 mutex 사이에서는 사용할 수 없다일것 같습니다(mutex lock이
이루어진 다음에서도 interrupt는 걸린다는 표현이 맞을것 같습니다.)
---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

bushi의 이미지

전자는 interrupt service routine 안에서 사용할 수 없다는 뜻입니다.
semaphore 도 마찬가지입니다.
이미 lock이 걸린 놈에 대해 다시 lock을 시도할 경우 wait 를 위해 스케쥴링을 하도록 되어 있는데, 바로 이 스케쥴링이 금지되어 있기 때문입니다.

후자는 lock 을 수행한 context 에서만 unlock 을 수행할 수 있다는 뜻합니다.
이건 pthread_mutex 도 마찬가지 입니다. pthread 의 경우 어떤 쓰레드에서 lock 을 한 놈을 다른 쓰레드에서 unlock 하는 것이 불가능하지요. 커널의 mutex 도 마찬가지 입니다.
하지만 semaphore 는 다릅니다. down과 up이 같은 context 에 있을 필요가 없습니다.

OTL

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.