동기화에 대한 질문 있습니다. 프로그레스가 무얼 말하는건지요.

jude1064의 이미지

공룡책을 공부중인데 progress에 대한 말이 나오는데, 영 이해가 가지

않네요.

Progress: If no thread is excuting in its critical section and there
exist some threads that wish to enter critical sections, then only
those threads that are not executing in their noncritical section
can participate in the decision of which will enter its critical section

임계영역이 아닌곳에서 실행중이 아닌 쓰레드들중--> 먼소리죠??

잘이해가 안가네요. 선택은 크리티컬 섹션을 사용중이 아닌 쓰레드들중

골라야 한다.. 이런말 같은데.. 잘이해가 안갑니다. 어찌 이해해야

하는지요..

용가리의 이미지

님께서 올리신 원문을 읽어 보시면 대충 해석하면 다음과 같네요.

Progress : 크리티컬섹션에서 실행중이 아닌 쓰레드들 중에서
크리티컬섹션에 진입하려고 하는 쓰레드들이 있다면,
논크리티컬섹션에서 실행중인 쓰레드들만이 크리티컬섹션에
들어가는 것을 결정할 수 있다.

대충 저정도로 해석 할수 있겠네요. 여기서 크리티컬섹션이란
우리말로 임계영역이라고 하는데, 다수의 쓰레드들이 공유하는
변수나 혹은 리소스 같은걸 얘기할수 있겠죠.
즉, a와 b가 동일한 변수 var를 공유한다면 var 자체 혹은 var를
사용하는 곳이 임계영역에 해당되겠지요. 왜 그럼 이런 var를
크리티컬섹션이라고 하냐면 만약, a가 var에다가 1을 대입했습
니다.. 그리고 그 값으로 뭔가 딴일을 막 할려고 하는데, 이때
b 가 var다가 0을 집어 넣어 버렸습니다. 그럼 a가 var를 가지고
딴일을 하려고 할때는 그 값이 0이 되지요. 즉, 원치 않는 값이
들어가게 됩니다. 즉, 이런 크리티컬섹션을 이용하려고 할때는
이런 현상을 방지하기 위해 동기화라는 일을 해줍니다.
대충 이정도로 하고요.

님이 질문하신 대로, 저 위의 원문이 무슨 말이냐면 한마디로
"아직 A라는 크리티컬섹션에 진입하지 않은 쓰레드들만이 A라는
쓰레드에 진입할 수 있다" 정도 되겠네요. A 크리티컬섹션에
들어간 쓰레드가 또 들어간다는 건 뭐가 좀 이상하겠죠....

설명이 충분했는지 모르겠네요. 할말은 많은데 표현력이 부족해서
더 이상 설명하기는 좀 힘드네요.
혹시 더 궁금한게 있으시면 정확히 뭐를 딱 찍어서 해주십시오.
그럼 제가 아는 한도 내에서 더 설명 드리도록 하께요....
그럼 2만.....

jude1064의 이미지

먼저 답변 감사합니다. 저도 그렇게 이해를 했는데, 원문에서는

that are not executing --> 실행중이 아닌으로 나오네요. 한글판에도

그렇고.. 이상합니다. 진행이 안된다면 크리티컬 섹션 문제를 해결할수 없다.

이중 한가지 조건인데.... 책 그대로 최대한 이해해보려고 하는데 ....

좀 이상하네요.

말 자체에 신경을 안쓰고 이해 한다면, 크리티컬 섹션 외부의 쓰레드들만이

진입할 수 있다. 이거 같은데...

그럼 답변 부탁합니다~~

To live is To Die

용가리의 이미지

아 제가 약간 잘못했네요...
not executing인데, 제가 executing로 해석을 했네요...
지금 책을 찾아서 보니까 정확히 알겠네요....
제가 가진 공룡책은 5판인데요, 거기에는 이렇게 나와 있습니다.
바뀐건 쓰레드가 프로세스로 바꼈습니다. 아마 님 책이 6판인 모양이네요.

Progress: If no process is excuting in its critical section and there
exist some processes that wish to enter critical sections, then only
those processes that are not executing in their remainder section
can participate in the decision of which will enter its critical section
next, and this selection cannot be postponed indefinitely.

약간 용어가 바뀌긴 바뀌었는데, remainder section이 noncritical section
으로 보셔도 무방합니다. 그러니까 then 부터 해석해 보면 "noncritical
section에서 실행중이 아닌 프로세스들만이(이말은 크리티컬섹션에서
실행중인 프로세스와 비슷한 의미가 되겠죠....) 다음번에 크리티컬섹션에
들어가려고 하는 프로세스들을 결정할 수 있다. 그리고 이러한 결정이
무한이 연기될 수 없다" 이런 뜻이 되겠죠....
제 책에는 밑에 그림 6.1로도 나와 있네요. 한번 더 자세히 보십시오.

그러니까 님께서 질문하신 progress는 critical section에서 실행중인
프로세스들이 critical section에 들어가려고 하는 프로세스를
무한 대기 상태로 둘수 없다 이런 뜻이 되겠네요. 여기 설명된 내용이
critical section 문제를 해결하기 위한 필수 조건중의 하나가 됩니다.
거기 책에 보면 3가지 조건이 나오니까 한번 보십시오.
원하시는 답이 되었는지 모르겠네요....

urmajest의 이미지

그 부분을 시험공부하면서 읽은 기억이 있는데 지금은 잘 생각 안나네요

책이 사물함에 있어서 -_- 정확히는 모르겠지만 이해를 돕자면..

critical section과 non-critical section은 쓰레드나 프로세스의 코드 부분을

말해요. 즉, critical section에선 동시에 한 쓰레드만 (때에 따라선 몇개의 쓰레드만) 접근 할 수 있는

변수나 장치를 사용한다는 거죠. (예를들어, cpu나 semaphore 처럼요)

질문하신 분의 내용만 보자면, 각 쓰레드는 아래와 같은 구조가 되어있죠.

(예를 들어 혼자 써야 하는 장치가 printer라고 하면요)

[non-critical section] (printer를 사용하지 않는 코드부분)

while { printer == lock; }

printer = lock;

[critical section] (printer를 사용하는 코드부분)

printer = unlock;

[non-critical section]

이와 같은 형태를 취해야 한다는거죠 ^^

non-critical section을 execute하고 있다는 건,

critical section에 들어가기 위해 기다리고 있지 않다는 말이거든요.

여러 쓰레드가 같은 장치를 access할려고 기다리고 있고, 그 장치가 사용

가능하게 되었을 때 어떤 쓰레드가 그 장치를 사용하도록 할 것인지는,

policy에 달린 문제이지만 반드시 기다리던 쓰레드에게 사용권을

넘겨주어야 progress가 진행이 될 수 있다는 말 같네요.

(다른 작업 신나게 하고 있는 쓰레드에게 사용권 줘버리면, 딴 쓰레드 들이

그 사용권 따기 전까진 아무것도 못하겠죠?)

그리고 답변하신 분의 책에서 인용한,

this selection cannot be postponed indefinitely.

는 deadlock / starvation 에 대한 말이네요

참고로 deadlock은 진행되지 못하고 있는 상태가 영원히 지속되는 경우,

따라서 victim을 정해서 얽힌 lock을 풀어주지 않을 경우 계속 멈춰있는 경우

이고, starvation은 우선권을 가지는 다른 쓰레드 때문에 어떤 쓰레드가 굶고

지쳐 쓰러질 지경이 되는 경우를 말합니다 ^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.