한개 시퓨에서도 레이스컨디션 문제가 발생할수있어요??

hooker의 이미지

한개의 시피유만 사용하는 시스템에서 레이스컨디션문제가 발생할수있어요??커널쓰레드에서요....
감사합니다.

shkwon81의 이미지

물론입니다!! race condition 자체는 CPU의 수와는 상관이 없습니다. 물론 커널 쓰레드냐 유저 쓰레드냐의 여부도 상관이 없구요.

단지, 어느 순간에 어떤 것이 먼저 수행되느냐에 따라 결과에 영향을 끼칠 수 있다면 race condition이 되는 것입니다.

다만, 다중프로세서 시스템의 경우에는 여러 개의 쓰레드가 병렬로 동작하므로 race condition에 의해 문제가 발생할 확률이 훨씬 높아지는 것입니다.

idlock의 이미지

병렬성과 병행성

어린시절(물론 지금도 철분이 부족하다고 하지만 -.-) os 개론 공부하면서 나온 병렬성과 병행성의 차이점....

.. 누가 설명해주실분 -.- 생각이 않나냐.. 쩝.

익명 사용자의 이미지

Kernel thread 에서 경쟁조건이 발생할수 있을까요?
다시한번 의문이 가는군요.

제 생각은 Kernel thread에서는 아니라고 생각됩니다.

설마 long long 변수를 사용하고 irq handler에서 해당 경쟁조건이
발생하는 변수를 건드리지는 않는지요?

서지훈의 이미지

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

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

익명 사용자의 이미지

서지훈 wrote:
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하게...

근데... 이건 아주 모범적인 코드로 짠 경우 일테고...
어떻게 프로그램을 짜느냐에 따라서 달라질 수도 있겠죠...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

shkwon81의 이미지

Quote:
어린시절(물론 지금도 철분이 부족하다고 하지만 -.-) os 개론 공부하면서 나온 병렬성과 병행성의 차이점....

병렬성은 진정한 의미의 동시 작업이라고 생각하시면 됩니다.
하드웨어적으로 CPU가 여러 개가 존재해서 여러 쓰레드가 어느 순간에 동시에 동작하고 있는 것을 말합니다.

이에 비해, 병행성이란 "마치" 여러 개의 작업이 동시에 수행되는 것처럼 보이는 것을 말합니다.
즉, 1 CPU 시스템에서도 시분할 방식을 사용하여 여러 쓰레드를 번갈아 수행할 수 있죠.. 따라서 결과적으로 사용자의 입장에서는 동시에 수행되는 것처럼 보이는 것이죠.

shkwon81의 이미지

흠.. 커널 쓰레드를 "커널 레벨 쓰레드" 로 생각하고 답변했습니다.

제 답변 자체도 "커널 레벨 쓰레드"와 "유저 레벨 쓰레드"를 의도한 것이었습니다. ㅠㅠ

그럼~ 즐거운 하루 되세요!!

댓글 달기

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