한개의 시피유만 사용하는 시스템에서 레이스컨디션문제가 발생할수있어요??커널쓰레드에서요.... 감사합니다.
물론입니다!! race condition 자체는 CPU의 수와는 상관이 없습니다. 물론 커널 쓰레드냐 유저 쓰레드냐의 여부도 상관이 없구요.
단지, 어느 순간에 어떤 것이 먼저 수행되느냐에 따라 결과에 영향을 끼칠 수 있다면 race condition이 되는 것입니다.
다만, 다중프로세서 시스템의 경우에는 여러 개의 쓰레드가 병렬로 동작하므로 race condition에 의해 문제가 발생할 확률이 훨씬 높아지는 것입니다.
병렬성과 병행성
어린시절(물론 지금도 철분이 부족하다고 하지만 -.-) os 개론 공부하면서 나온 병렬성과 병행성의 차이점....
.. 누가 설명해주실분 -.- 생각이 않나냐.. 쩝.
Kernel thread 에서 경쟁조건이 발생할수 있을까요? 다시한번 의문이 가는군요.
제 생각은 Kernel thread에서는 아니라고 생각됩니다.
설마 long long 변수를 사용하고 irq handler에서 해당 경쟁조건이 발생하는 변수를 건드리지는 않는지요?
A, B, C의 순서로 커널 Thread들을 만들었다면. 후에 이들은 그들의 우선 순위에 따라 스케쥴될 것입니다. 문제는 하나의 thread가 working하고 있을때. 이 thread가 cpu점유권을 포기하지 않으면 (sleep하거나 아예 thread가 그 할일을 다하고 사라지거나 ) 다음 thread로 cpu점유권이 넘어가지 않는 다는 것입니다. 그러니까... 커널은 비선점형(non-preemptive) 으로 동작한다는 얘기입니다. OK???
후에 이들은 그들의 우선 순위에 따라 스케쥴될 것입니다.
문제는 하나의 thread가 working하고 있을때.
이 thread가 cpu점유권을 포기하지 않으면 (sleep하거나 아예 thread가 그 할일을 다하고 사라지거나 )
다음 thread로 cpu점유권이 넘어가지 않는 다는 것입니다.
그러니까...
커널은 비선점형(non-preemptive) 으로 동작한다는
얘기입니다. OK???
http://kldp.org/~eunjea/hcol-archive/2001/misc/2001-Jun/0418.html
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h> do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
Quote:A, B, C의 순서로 커널 Thread들을 만들었다면. 후에 이들은 그들의 우선 순위에 따라 스케쥴될 것입니다. 문제는 하나의 thread가 working하고 있을때. 이 thread가 cpu점유권을 포기하지 않으면 (sleep하거나 아예 thread가 그 할일을 다하고 사라지거나 ) 다음 thread로 cpu점유권이 넘어가지 않는 다는 것입니다. 그러니까... 커널은 비선점형(non-preemptive) 으로 동작한다는 얘기입니다. OK??? http://kldp.org/~eunjea/hcol-archive/2001/misc/2001-Jun/0418.html <어떠한 역경에도 굴하지 않는 '하양 지훈'>
제 생각이 그거거든요. 즉, Kernel thread는 하나의 순차적인 흐름제어라는 것이죠. 그죠? 맞죠?
하지만 irq 요청에 따른 처리는 Kernel thread와는 동기적으로 움직이지 않는거 같은데 만약 2개 사이에 데이터를 주고 받는다면 경쟁조건이 발생할 가능성이 있지 않을까요?
IRQ를 받은 구간에서 쓰레드 부분을 건드린다면은... 문제가 되겠지만... 그렇지 않은 경우라면 RaceCondition은 일어나지 않을거 같네요... Sequence하게...
근데... 이건 아주 모범적인 코드로 짠 경우 일테고... 어떻게 프로그램을 짜느냐에 따라서 달라질 수도 있겠죠...
병렬성은 진정한 의미의 동시 작업이라고 생각하시면 됩니다. 하드웨어적으로 CPU가 여러 개가 존재해서 여러 쓰레드가 어느 순간에 동시에 동작하고 있는 것을 말합니다.
이에 비해, 병행성이란 "마치" 여러 개의 작업이 동시에 수행되는 것처럼 보이는 것을 말합니다. 즉, 1 CPU 시스템에서도 시분할 방식을 사용하여 여러 쓰레드를 번갈아 수행할 수 있죠.. 따라서 결과적으로 사용자의 입장에서는 동시에 수행되는 것처럼 보이는 것이죠.
흠.. 커널 쓰레드를 "커널 레벨 쓰레드" 로 생각하고 답변했습니다.
제 답변 자체도 "커널 레벨 쓰레드"와 "유저 레벨 쓰레드"를 의도한 것이었습니다. ㅠㅠ
그럼~ 즐거운 하루 되세요!!
텍스트 포맷에 대한 자세한 정보
<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]
물론입니다!! race condition 자체는 CPU의 수와는 상관이
물론입니다!! race condition 자체는 CPU의 수와는 상관이 없습니다. 물론 커널 쓰레드냐 유저 쓰레드냐의 여부도 상관이 없구요.
단지, 어느 순간에 어떤 것이 먼저 수행되느냐에 따라 결과에 영향을 끼칠 수 있다면 race condition이 되는 것입니다.
다만, 다중프로세서 시스템의 경우에는 여러 개의 쓰레드가 병렬로 동작하므로 race condition에 의해 문제가 발생할 확률이 훨씬 높아지는 것입니다.
병렬성과 병행성
병렬성과 병행성
어린시절(물론 지금도 철분이 부족하다고 하지만 -.-) os 개론 공부하면서 나온 병렬성과 병행성의 차이점....
.. 누가 설명해주실분 -.- 생각이 않나냐.. 쩝.
Kernel thread 에서 경쟁조건이 발생할수 있을까요?다시한번
Kernel thread 에서 경쟁조건이 발생할수 있을까요?
다시한번 의문이 가는군요.
제 생각은 Kernel thread에서는 아니라고 생각됩니다.
설마 long long 변수를 사용하고 irq handler에서 해당 경쟁조건이
발생하는 변수를 건드리지는 않는지요?
[하양] 참고하시길...
http://kldp.org/~eunjea/hcol-archive/2001/misc/2001-Jun/0418.html
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
Re: [하양] 참고하시길...
제 생각이 그거거든요.
즉, Kernel thread는 하나의 순차적인 흐름제어라는 것이죠.
그죠? 맞죠?
하지만 irq 요청에 따른 처리는 Kernel thread와는 동기적으로
움직이지 않는거 같은데 만약 2개 사이에 데이터를 주고 받는다면
경쟁조건이 발생할 가능성이 있지 않을까요?
[하양] 당연히...
IRQ를 받은 구간에서 쓰레드 부분을 건드린다면은...
문제가 되겠지만...
그렇지 않은 경우라면 RaceCondition은 일어나지 않을거 같네요...
Sequence하게...
근데... 이건 아주 모범적인 코드로 짠 경우 일테고...
어떻게 프로그램을 짜느냐에 따라서 달라질 수도 있겠죠...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
[quote]어린시절(물론 지금도 철분이 부족하다고 하지만 -.-) os
병렬성은 진정한 의미의 동시 작업이라고 생각하시면 됩니다.
하드웨어적으로 CPU가 여러 개가 존재해서 여러 쓰레드가 어느 순간에 동시에 동작하고 있는 것을 말합니다.
이에 비해, 병행성이란 "마치" 여러 개의 작업이 동시에 수행되는 것처럼 보이는 것을 말합니다.
즉, 1 CPU 시스템에서도 시분할 방식을 사용하여 여러 쓰레드를 번갈아 수행할 수 있죠.. 따라서 결과적으로 사용자의 입장에서는 동시에 수행되는 것처럼 보이는 것이죠.
흠.. 커널 쓰레드를 "커널 레벨 쓰레드" 로 생각하고 답변했습니다.
흠.. 커널 쓰레드를 "커널 레벨 쓰레드" 로 생각하고 답변했습니다.
제 답변 자체도 "커널 레벨 쓰레드"와 "유저 레벨 쓰레드"를 의도한 것이었습니다. ㅠㅠ
그럼~ 즐거운 하루 되세요!!
댓글 달기