RT Linux와 관련된 몇 가지 질문입니다.

zieben의 이미지

RT Linux를 사용할 일이 있어서 공부하던 중에 궁금한 점이 몇가지 생겨서 질문드리고자 글 올립니다.

1) RT Task의 경우 가상메모리를 사용하지 않고 메모리에서 수행된다고 하던데.. 만일 RT Task의 크기가 무척 커지면 어떻게 처리하는 건지요?
물론 우선 순위가 높은 RT Task 한개라면 요즘 메모리 사양을 봤을때 메모리가 부족한 경우가 별로 없을것 같지만 여러개의 RT Task가 돌아가고 있다면 문제가 다르지 않을까요?
메모리가 부족한 경우 Page out시키지 않고 어떻게 돌리는지 궁금합니다.

2)RT Linux가 Hard real time을 구현한다고 보장을 하긴 하지만 만일 여러개의 RT Task가 돌아가고 있고 그것들의 주기가 어떻게 일치해서 한개의 RT Task가 CPU를 선점한다면 다른 RT Task는 어떻게 실행이 되는지요? 그러면 Hard real time을 구현하는 것이 불가능하지 않은가요?

아직 지식이 많이 없어서 쉬운 질문인지 모르겠지만 답변 주시면 감사하겠습니다.

redrabbit의 이미지

먼저 둘다 비슷한 건데...
일단 RT 스페이스에서 동작되는 task들은 그 크기가 큰것은 좋지 않습니다.
1),2) 번다 심각한 경우 dead lock 이되기 쉬운 상황같습니다.
rt kernel상에서 동작하는 task는 아주 중요한 실스간 태스크와 간단히
디바이스 드라이버정도로 이용하고 복잡한 계산등은 linux 의 유저 스페이스에서 사용하는것이 안전하다 싶습니다.
최근의 버전에서는 어떻게 개선되었는지 궁금하지만...
제가 쓰던 버전들에서는 (무료 버전) 문제가 되었었습니다.

redrabbit의 이미지

RT 상황의 특징상 여러개의 task가 돌경우 중요도에 따라 우선순위를 매겨야 겠죠...그리고, 당연히 메모리상황등을 미리 계산해야 할것이구요^^.
저도 정확한 답변을 못드린거 같아 죄송합니다. 아뭏튼 무리가는것은 동일
프로세서에서 한번에 돌리는것은 좋지 않다 생각됩니다.

익명 사용자의 이미지

1) real time task들은 높은 우선권을 가지기 때문에 작고 신속하게 작업을 수행하도록 작성이 되는 것이 보통입니다. 적절한 예일지는 모르지만, interrupt service routine이 많은 리소스를 사용하지 않도록 작성되는 것과 비슷한 이치입니다.

2) RTLinux 기본 scheduler는 높은 우선순위의 task가 낮은 우선순위의 task를 선점하게 합니다. 높은 우선순위 task가 수행될 때 낮은 우선순위 task는 전혀 수행이 되지 않지요. 그래서 높은 우선순위의 task는 task switching latency의 면에서 실시간성을 보장받을 수 있게 됩니다. (기타 RTLinux의 다른 특성과 합쳐져서 hard real time성을 보장받게 됩니다만...)

낮은 우선순위 task들도 적절하게 수행되게 하기 위해서 시스템 디자인시 task들 간의 수행을 고려해야 합니다. 높은 우선순위의 작업들은 매우 높은 시간 제약을 가지지만 주기적이고 간단한 수행을 하는 특성을 지니기 때문에, 높은 우선순위 task들의 휴지기에 낮은 우선순위의 task들이 적절히 작업을 할 수 있도록 디자인하는 작업이 필요합니다.

echo의 이미지

1) 우선 왜 RT task 가 virtual memory 를 쓰지 않도록 한 이유가 무엇인지를 생각해 보세요.

1-a) 혹 이유를 아셨다면, hard real-time (HRT) tasks 들이 필요로 하는 메모리 양을 충족시키지 않는 시스템에 그 모든 HRT tasks 들을 mapping 하고 수행시키는 것이 올바른 HRT application design 인지를 생각해 보세요.

2) 어떤 Real-time execution engine 이 자신이 가지고 있는 resources 보다 더 많은 resources 를 요구하는 HRT tasks 들의 수행을 보장해 줄 수 있을까요?

2-a) Rate-monotonic 혹은 EDF (Earliest-Deadline-First), LLF (Least-Laxity-First) 등의 real-time scheduling algorithm 들의 schedulability test 에 관한 자료를 참고하십시요.

다들 자기 이야기 밖에 할 줄 모르는 세상에서,
메아리 같은 사람 하나 필요할 거 같아서...

익명 사용자의 이미지

hard real time에서 스케쥴링 가능성 타진에서 스케쥴링이 불가하면,
그 자체로 시스템 실패(system fail)입니다. 따라서, 이렇게 안된다면, 해당
시스템은 하드리얼타임시스템으로 구현불가라고 봐야합니다.

1) 메모리가 부족?
그렇게 되지 않게 해야지요. 메모리를 무제한 증설해서라도.
그렇지 않다면/또는 불가하고 이로 인해(swapping하여) 하드 리얼타임 스케쥴링을 놓친다면,
해당 시스템은 실패라고 봐야합니다. 단지, 소프트리얼타임으로도 만족(조금 늦어도 된다던지...)된다면,
그때에 한해, 페이징메카니즘을 고려해 볼 수 있습니다.

2) 스케쥴링 가능성을 스냅샷을 만들어서 먼저 타진해 봅니다. 이 작업은 손퓨터에 의해 행하는 경우가 많습니다. 다양한 스케쥴링 알고리즘이 존재하며, 각 알고리즘 하나하나가 주옥같습니다. (박사논문감이지요.)

* 즐거운 공부를 하고 계시군요. 먹고살기 바쁘다보니, 아~ 거의 잊었군요 이젠...ㅎㅎ ...

댓글 달기

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