리눅스는 RTOS가 아닌가요?

조야의 이미지

내공이 매우 얇은.. 사회 초년잡니다..

부족한부분을 많이 메꾸기 위해 마소 정기구독을 1년전부터 해오고 있는데..

한달전 마소 IT컬럼에 보니 "리눅스는 RTOS가 아니다" 라고 인터뷰가 되어있더라고요.

오직 "윈도우 CE 만이 RTOS다" 라고 못 박아 결론을 내렸는데요.. 궁금해서 이걸 팀장님(임베디드 리눅스)에게 물어보니

"아니다! 리눅스도 RTOS다" 라고 하셨는데.. 정확한 판단을 어디에 기준을 가지고 내려야 할지.. 감이 잘 안와서요..

감히 이렇게 질문 드려봅니다;

imyejin의 이미지

그냥 Windows 2000, XP 같은 거는 RTOS 가 아니고 Windows CE 만 RTOS 라는 것처럼,
그냥 리눅스 커널은 기본적으로 RTOS가 아니지만 임베디드 리눅스 중에서 RTOS 가 분명히 있겠죠.
그냥 인터뷰는 낚시성이 아닐까 생각이 됩니다 :-)

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

김정균의 이미지

이름이 기억이 잘 나지 않습니다만.. embeded 에서 사용하는 리눅스 배포본들은 RTOS 가 맞습니다. Linux RTOS project 가 있고, 이것들을 반영한 배포본이 있지요.

khiny의 이미지

리눅스 커널2.6에 와서 RTOS를 어떤 기법을 이용해서 흉내낸다?고 봐던거 같습니다.
정확히는 RTOS라고 할수는 없지만 그거나 거의 다름없다고 말이죠.
그래서 마우스포인터같은게 한발느린감같은게 사라졌다고 들었습니다.
(2.4커널에서는 마우스포인터감이 좀 안 좋죠. 가끔 버벅이기도 하고)
임베디드쪽 리눅스는 RTOS라고 알고있습니다. 위에 김정균님 말씀처럼..

익명 사용자의 이미지

RTOS란 게 뭐예요?
ROTC는 들어봤어도 RTOS란 건 처음 들어봐서 무슨 말인지 알지를 못하겠습니다.

dragonkun의 이미지

whitenoise의 이미지

dragonkun의 이미지

제가 알기론 리눅스 커널은 기본적으로 RTOS 가 아닙니다.
대신에 RTOS 패치들이 있고, 몬타비스타 리눅스 등의 리눅스 커널에 RTOS 를 패치해서 나온 리눅스들도 많이 있습니다.

저도 그 인터뷰 읽어보았는데(아마 낭만IT로 유명하신 김국현님의 인터뷰였던걸로 기억합니다.)
대충 읽어보니 맞는 이야기를 하고 있는 걸로 기억하네요.
RTOS 패치나 몬타비스타 리눅스 등의 배포판 이야기도 인터뷰에서 언급하지 않았었나요?
------
Emerging the World!

Emerging the World!

anfl의 이미지

리눅스 kernel은 RTOS가 아닙니다.
리눅스에 real-time을 구현하기 위한 시도로는 patch를 가한 몬타비스타 kernel과 RT-linux가 대표적이죠.

RT-linux라면 모르겠는데 RT-linux와 같이 완전히 real-time task를 linux kernel에서 분리하지 않고 patch만 한 몬타비스타 kernel은 RTOS라고 보기 어렵습니다.
차라리 새로 짜면 모를까 처음부터 real-time을 고려하지 않았고 preemptive kernel도 아니였던 linux가 RTOS가 되기 위해서는 모든 kernel source와 모든 device driver들을 다 뜯어고치지 않는한 어려울거라 생각이 되는군요.

마찮가지로 처음에 interrupt nesting도 고려하지 않았던 WinCE가 RTOS가 되기 위해서는 linux와 마찮가지로 거의 대부분을 고쳐야 혹은 고쳤어야 하지 않을까 쉽네요.
WinCE만 유일한 RTOS다....
이 이야긴 정말 우습군요.


익명 입니다의 이미지

리눅스 커널은 2.6에 와서 preemptive kernel로 다시 짰죠.

anfl의 이미지

네. 그 소스들을 직접봐왔었죠.
그렇다고해서 RTOS는 아니죠.

PS. 근데 그래서 어쨌다고요?


익명 입니다의 이미지

위에서 preemptive가 아니었다는 언급을 하셨길래요. 커널 쪽에서 이런 것을 바꾸었을 정도인데, 혹시 앞으로 버전이 몇십 개 정도 올라가면 real-time 지원이 붙지 않을까요?

일단 interrupt에서 pending되어 있으면 그 다음 signal을 무시하는데, 이걸 처리하는 것을 가능케 해 주는 것만 붙이고 하는 식으로 조금씩 조금씩 더 나아가면 되겠죠.

falaris의 이미지

wince가 RTOS였나요;;
음냐.몰랐습니다;;

......
grayfalaris.springnote.com

익명 사용자의 이미지

그 사람들은 그렇다고 주장합니다. ^^

익명 사용자의 이미지

Real Time을 어떻게 보느냐에 따라 달라질 수도 있겠지만 일반적으로 Linux Kernel은 RTOS Kernel이 아닙니다.
다른 분들이 언급하신 것 처럼 Linux kernel의 실시간'성'을 향상시키기 위한 노력들은 꾸준히 계속되어 왔지만,
기본 Linux kernel은 VxWorks 등의 상용 RTOS에 접근한 실시간 성능을 만족시키지는 못합니다.

berise의 이미지

깊게 검토해 보진 않았지만, Real-Time을 만족하는 배포판이 있습니다.

현재 Redhat과 Suse를 기반으로 실시간 조건을 만족하도록 꾸민 배포판이 있습니다.

http://www.ccur.com/isd_solutions_redhawklinux.asp?o9=1

관심 있으면 한 번 보시길 바랍니다.

berise@nowhere.comes.out

falaris의 이미지

x86만 지원하네요 ㅠ.ㅠ
회사에 있는 보드 죄다 ppc인데 ㅠ.ㅠ
......
grayfalaris.springnote.com

anfl의 이미지

과연 그럴까요?
실시간의 조건이란 예측 가능성과 완료시간에 대한 완료 가능성을 말하는건데
리눅스 소스로써 과연 예측 가능성과 완료 시간에 대한 완료 가능성에 대해서
지켜줄수 있을거라고 생각하지 않네요.

이상적인 real-time system은 multi-tasking system에서 환경에서 존재하지 않죠.
근접하려고 노력할뿐.

근본적으로 힘든게 있습니다.
많은 RTOS들의 text size가 그렇게 크지않죠.
5Kbyte ~ 40Kbyte 정도이고 sub-system중에 규모가 큰 sub-system이 얼마나 포함되냐에
따라 200K ~ 400K까지 늘어나기도 하지만 기본 kernel은 40K 이하입니다.

이렇게 작게 만드는데는 일부러 그렇게 만드는것도 있지만 size가 크지면 크질수록
그만큼 real-time을 지켜줄수 있는 시나리오의 범위를 벋어나기 때문입니다.

때문에 저는 size가 이미 1MByte를 넘어가는 linux가 real-time system에서
일어날수 있는 모든 worst cast에 대해 고려했다고는 생각하지 않네요.
real-time OS를 만드는것은 모든 시나리오에 대해서 고려해서 어떠한 상황에서도
정말 중요한 일에 대해서는 완료 시간에 대한 완료 가능성을 지켜주게 설계하는것입니다.

이제껏 수년간 linux kernel을 봐왔었는데 최근 2.6 kernel에 들어서 real-time에 대한
고려를 task scheduler에서 신경쓴듯하지만 그건 RTOS가 되기 위한 기본중에 기본일뿐입니다.
RTOS가 되기 위해서는 OS 모든 code 전반에 대해서 real-time를 염두해두고 짜야하고
생각할수 있는 최악의 상황이 되었을때 어떻게 real-time을
보장해 줄것인가에 대해서 고려를 해야됩니다.
하지만 linux는 아니죠.

만약 제가 원자력 발전소의 system을 설계한다면 linux는 절대쓰지 않을것 같습니다.
어떠한 일을 하는데 있어서 모든 일에는 적임자가 있는 법이죠.
전투를 하는데 있어서도 아무리 운동을 잘하는 민간인이라 하더라도
20대 어린 청년시절부터 전투 교육을 수십년간 받아온 특전사보다는 못하는건 사실이죠.
linux가 모든 문제에 해답이 될수는 없습니다.
critical한 환경에서 linux는 그 자체로써 위협요인이 될수 있습니다.

PS. WinCE도 마찮가지 일거라 생각이 드는군요.
WinCE만이 유일한 RTOS라는 이야기는 가볍게 지나가는 헛소리로 여기면 될듯합니다.


blkstorm의 이미지

제가 커널 담당자는 아니었습니다만... 리눅스 커널 2.6을 이용해서 RTOS를 구성할 수는 있습니다.

하지만, 초기부팅시간이 꽤 오래 걸리고, 플래쉬 메모리를 다른 RTOS에 비해서 많이 차지합니다. '기능'과 '성능'이라는 두 측면으로 보았을 때, 리눅스는 RTOS의 '기능'을 할 수는 있습니다만, '성능'에 있어서는 약간 의문이 남습니다.

특히, Usermode-kernel mode switching과 address translation이 가져오는 시스템 성능 저하가 매우 큰 것으로 알고 있습니다. 후자의 문제를 해결한 것이 uclinux인 것으로 알고 있습니다.

2005년에 소니 디지털 TV제품중에 OS를 리눅스로 구성해서 출시한 모델이 있습니다. 대형 TV의 특성상 화면이 켜지는데 시간이 오래 걸리는데, 그 시간동안 부팅을 하는 것같았습니다.

그리고... Real-time property는 (개인적인 의견으로) 커널의 크기에도 의존하겠지만, CPU의 성능과 하드웨어의 지원에 따라서 많이 차이가 난다고 봅니다. 일례로, 저가형 ARM Core의 경우에는, Floating point 연산을 소프트웨어 에뮬레이션으로 처리해서, 부동소수점 연산이 들어가는 모듈은 CPU 클럭을 상당히 많이 차지합니다.

다른 예로 mp3나 jpeg codec이 있습니다. 대부분의 휴대전화나 mp3플레이어의 경우에는 embedded cpu에 코덱이 딸려서 나오거나, 별도의 디코딩 하드웨어를 갖고 있"었"습니다.(요즘은 잘 모르겠군요. ㅎㅎ) 만약, mp3/jpeg decoding을 CPU가 직접한다면, 절대로 그 당시 가격대 성능비는 나올 수 없었습니다.

반대로 해석한다면, 하드웨어 디바이스의 지원이 충분하다면, 임베디드 리눅스도 경쟁력이 있다고 봅니다. 여기서 제조원가의 문제가 들어가는데, 하드웨어에 더 투자를 해서 리눅스의 성능을 극대화하느냐, 아니면 소프트웨어(상용 RTOS)에 투자를 해서 소프트웨어의 성능을 극대화하느냐의 선택에 놓이게 됩니다. 그건 어르신들이 결정할 일이겠지요. ^^;;

임베디드 디바이스의 경우에는 최적화의 이슈가 크기 때문에, 어떤 RTOS를 사용하느냐도 중요하지만, 어떤 플랫폼에서 어떻게 소프트웨어를 최적화하느냐가 더 중요하다고 봅니다.

제가 이런 글 올리면 회사 다닐 때 같은팀의 커널 담당자가 웃을텐데... ^^;; 하여튼, 희미한 제 기억으로는 결국 가격대 성능비와 하드웨어에 따라서 RTOS 리눅스의 가능성은 달라진다고 봅니다.

anfl의 이미지

사실 real-time issue는 H/W 성능과는 크게 관계가 없습니다.
real-time은 정말 상대적인 개념으로써
아무리 성능이 느린 system이라도 예측 가능성과 완료시간에 대한 완료가능성만
지켜줄수 있다면 그건 real-time system이죠.
processor 성능에 의해 real-time이 결정된다면 그건 이미 real-time system이 아닙니다.

그러면 어떤게 real-time system 이냐...
글쎄요. 잘모르겠네요.
지금까지 4개의 RTOS를 만들었고, 1개의 GPOS를 만들었지만
항상 이론과 현실에 근접해서 최악의 상황을 대비하려고 노력했을뿐
그리고 최악의 시나리오를 도출해서 해결할수 있다고 증명했지만
다른 어떤 시나리오가 도사리고 있을지는 모르겠네요.

RTOS는 이상이고...
제가 보기에 linux는 linux가 바라보는 다른 이상을 향해 나아가고 있는 OS인것 같군요.
뭐 나쁘진 않네요.
linux가 RTOS가 된다면 더 좋겠지만 지금 이대로도 그다지 나쁘지 않은것 같습니다.


blkstorm의 이미지

Quote:
그러면 어떤게 real-time system 이냐...
글쎄요. 잘모르겠네요.

하핫, 제가 드리고 싶은 말씀을 그대로... ^^;;

이건 지극히 제 개인적인 의견입니다만, RTOS는 RTOS 그 자체로서는 의미가 없다고 봅니다. 그것이 어떠한 플랫폼에서 돌아가서 어떠한 최적화를 통해서 어느정도의 성능을 보이느냐, 즉 제품의 측면에서 의미가 있다고 생각합니다. (이것은 가격의 측면도 고려한다는 말씀입니다.)

P.S.: 지금 봤는데...

Quote:
윈도우 CE 만이 RTOS다

누가 이런 얼토당토 않은... -_-;;
익명 사용자의 이미지

RTOS는 작업 수행의 예측 가능성이라는 특정한 요구사항을 만족시키기 위한 OS의 하나의 형태일 뿐이겠지요.
상용 RTOS와 같은 실시간성 보장을 위해서는 OS에서 응용 프로그램의 메모리 가상화/보호나 사용자 응답성 등을 포기해야 할 겁니다.
다만 Linux Kernel 2.6의 scheduler 향상이나 각종 interrupt latency patch 등에도 불구하고
original Linux kernel가 상용 RTOS처럼 strict한 실시간성을 보장할 수 없다는 것은 개인적으로 아쉽습니다.

wish의 이미지

쓸까 말까 고민하다가...

리얼 타임 OS를 보통 "교과서"에서 나눌 때,

1) 소프트 리얼 타임: 어떤 태스크가 지정된 시간 안에 끝날 수 있도록, "최선을 다하는" OS
2) 하드 리얼 타임: 어떤 태스크가 지정된 시간 안에 끝날 수 있도록, "보장해 주는" OS

이렇게 나누었던 것으로 기억합니다.

바닐라 리눅스가 하드 리얼 타임일리는 만무하구요 ;; 소프트 리얼 타임 OS는 정의 자체가 모호 해서 그 범주 안에 들어갈 지 어떨 지 ;;

또한 Win CE만이 리얼 타임 OS 라고 했을 때, 과연 2)의 의미로 사용했는 지는 의문입니다.

위의 분들께서도 말씀 하셨듯이, 진짜 미션 크리티컬한 분야에서의 실시간 성은 리눅스 같은 범묭 OS 스타일에서는 힘들것 같습니다. WinCE도 마찬가지일 것 같고 ;; 하드 리얼 타임으로 가려면 많은 제약 조건(예를 들자면 쓰레드 갯수 제한 등등)이 붙어야만 한다고 알고 있습니다.

reom의 이미지

애초에 RTOS로 만들어지지도 않았고 RTOS일 필요도 없는것 같은데요.

물론 리눅스를 임베디드 쪽에서 많이 사용하고있고 그때문에 RTOS와 같은 특성이 필요해지긴 했지만
애초에 RTOS가 아니었고 RTOS가 아니라고해서 폄하될 이유가 전혀 없는것 같습니다.
오히려 리눅스가 임베디드 환경에서 갖는 장점은 소스가 공개되어있어서 여러 환경에서도 필요에따라 다양하고 자유롭게 적용시켜 사용할 수 있다는게 아닐까 싶습니다. 이미 다른 분들이 구축한 다양한 정보나 시스템이 존재한다는 점도 있구요. RT를 흉내낸 리눅스가 이미 존재한다는 것 자체가 이런 리눅스의 장점 덕분이겠죠. 실시간성을 요구하는 사람들이 존재하고 그 요구에 따라 커널을 자유롭게 수정했다는 사실 자체가요. 이정도면 Realtime이 아니어도 충분히 임베디드에서 사용하기에 좋은 OS아닙니까.

Realtime 특성이 정말 중요한 곳이라면 차라리 위에 분들 말씀처럼 vxworks 등을 사용하는게 나을것 같습니다.

저도 임베디드 환경에서 리눅스를 올려서 개발하고있는 처지인지라 응답시간이 정확하지 않다는 게 아쉬울때가 많긴하고 그래서 어쩔수없이 다른 OS를 사용하는 경우도있지만 그럼에도 불구하고 여러 경우에 리눅스를 사용하는 이유는 충분히 있지요.

윈 CE가 진짜 RealTime인지는 궁금하군요.

lagendia의 이미지

인터뷰하시는 분이 (Windows) CE만 RTOS인가요? 라고 묻고 인터뷰 받는 분이 '네'라고 책에 나오네요. 그러면서 많은 사람들이 리눅스가 RTOS라고 착각하고 공부하고 있다고 하시더군요.

RT리눅스와 몬타비스타가 있다는 것에 대해서는 언급하셨어요.

제가 찜찜했던 부분은 "RTOS 버전의 리눅스는 상용으로 구입해야 한다"고 말씀하셨는데,
오픈소스이면서 RTOS에 포함되는 것으로는
FreeRTOS(Microkernel),Inferno(Virtual Machine),Plan 9 from Bell Labs(hybrid),RTEMS, Soft Hard Real-Time Kernel(Microkernel) 등이 있고
오픈소스임이 불분명한 것에는(유사한 듯한) OS2000(Microkernel)이 있어요.

Interviewer와 Interviewee가 모두 Microsoft에 관계된 분이라서,
질문과 답변이 MS 지향적으로 나오지 않았을까 생각해요.

익명 사용자의 이미지

언급하신 'RTOS 버전의 리눅스는 상용으로 구입해야 한다'의 상용 리눅스가 MontaVista, TimeSys, FSMLabs 등에서 제공하는 상용 임베디드 리눅스 배포본 및 개발환경을 의미하는 같습니다. 또한 언급하신 RTEMS 등의 free 혹은 open source RTOS는 리눅스와는 관계가 없는 것 같습니다.
RTLinux는 hard real-time 요구도 만족시킬 수 있는 듯 한데 문제는 real-time 성능을 만족시키는 커널이 리눅스 커널과는 별개의 부분이라는 점이지요.