기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요,

이경준이라고 합니다.

오랜만에 이솝싸이트를 찾아왔는데요 다름이 아니라 커널 선점형과 비선점형에 관해 질문이 있는데 정확한 답을 얻을 수 있는곳은 ...
이곳이라는 생각이 들더라구요. ^^

뭔가를 구현하려는것은 아니구요 그냥 단순 호기심때문에 질문드립니다.

제가 이해하기로는 비선점형은 커널 2.4에서
while(1){};
이라는 프로그램을 돌리면 비선점형 커널임이도 불구하고 다른 프로세스가 실행이 됩니다.
왜냐하면 process가 실행 될때 quantum (timeslice라고도 하는..) 타임이 할당되는데 이것이 끝나면 다른 프로세스가 실행되기때문입니다.
제가 생각하기론 커널 비선점이라고 하는 말은 "quantum 시간이 끝나기전엔 프로세스가 CPU를 안놓는다" 라고 이해하고 있습니다.

그런데 아주 priority가 높은 HW interrupt가 발생을 했다면 수행이 될것이냐가 논쟁의 핵심이었습니다.
수행이 된다고말한측에서 제시한 이유는 IDT 테이블를 통해 Soft IRQ에 인터럽트 핸들러가 수행이 될텐데.. 이 Soft IRQ handler 같은것은 커널이 따로 관리하는 다른 프로세스에 의해 수행되기때문에 즉시 수행된다는 것입니다.
그런거같기도 하고.... 아닌것같기도 하고... 헷갈리면서도 너무 궁금하네요.

답변 부탁드리겠습니다.
좋은하루 되십시요.

고도리

2009.06.22 03:11:14
*.32.117.22

일반적으로 IRQ는 process stack이랑 상관이 없습니다. 따로 처리하기 때문이지요.
IRQ가 들어왔을때 process때문에 지연을 시킨다면 문제가 많아질 듯 하네요...^^

선점형 커널의 개념은 우선순위 개념이라고 저는 생각합니다만, 상황이나 적용에 따라 달라질 수 있겠지요.

while(1); 문을 동작시키고 있는데, 우선순위가 높은 process가 이 부분을 무시하고, 선점할 수 있느냐 없느냐의 얘기라고
생각합니다

개인적으로 리눅스에서의 선점형은 그다지 의미가 없는 것으로 생각은 하지만, 있으면 좋겠지요...ㅎㅎ

오영종

2009.06.22 11:07:40
*.221.221.197

[문맥을 알기 쉽게 좀 수정함]

선점형 커널에 대해서는 구글링하면 잘 나와있을텐데 그냥 아는 내용만 조금 적어보겠습니다.

비선점형과 선점형 커널의 차이는 race condition이나 무한 루프로 들어갔을때 시스템을 재부팅하지 않고 운영체제(더 정확히는 scheduler)에 의해 오류정정이 가능하냐에 따라 나뉘어 집니다. 일반적으로 커널 자체는 충분히 시험된 코드로 이루어져 race condition이나 무한 루프가 발생하는 경우가 없으나 문제는 디바이스 드라이버 코드에서 발생할 수 있습니다. 디바이스 드라이버의 코드(HW interrupt handler 포함)도 일반적으로 커널모드에서 동작하게 되는데 아무래도 커널자체보다는 검증되지 않은 코드로 이루어져 있고 여기서 시스템을 멈추는 상황이 발생할 수 있을텐데 진정한 선점형 커널은 이러한 문제도 문제점을 포착하고 해당 문제의 코드를 더이상 방해하지 못하도록 삭제할 수 있어야 합니다. 

중요한 내용은 멀티태스킹이 사용자가 잘 만들지 또는 도와주지 않으면 죽어버리는 협업형 멀티태스킹 환경과는 달리 사용자가(여기서는 주로 디바이스 드라이버 작성자) 도와주지 않더라도 최소한 시스템이 멈추지 않아야 한다는 겁니다. 이런 안정한 시스템을 만들기 위해서는 일반적인 커널 모드에서 동작하는 thread뿐만 아니라 HW interrupt handler도 스케줄러에서 주도권을 갖고 제어를 할 수 있어야 합니다.

참고로 High priority HW interrupt handler가 실행될지 않될지는 운영체제 마다 다릅니다. HW interrupt가 최초 인지되서 소프트웨어적으로 최종 실행되기까지 HW interrupt 인지 과정과 소프트웨어 인지과정을 순서대로 거치게 되는데 중간 단계마다 진행할지 말지 소프트웨어로 설정할 수 있어서 운영체제 작성자의 의도에 따라 최종 실행완료까지 될지가 달라지게 됩니다. 

질문의 "실행"이라는 단어가 의미하는 바가 애매해서 이거다라고 답변하기가 힘든데 일반적으로 인터럽트 핸들러까지는 실행된다라고 봅니다. 정말로 실행이 될지 안될지는 로그를 출력하게 해서 확인해봐야겠죠. 리눅스의 경우 태생이 비선점형 커널로 구조적인 문제로 아무리 real time patch 또는 preemptible patch를 적용시켰더라도 100% fault tolerant system을 보장하지는 않습니다. 정리하면 HW interrupt의 처리 여부는 운영체제의 특성에 따라 달라질 수 있다이고 일반적으로는 실행된다라고 봅니다.


이정승

2009.08.10 22:12:10
*.94.41.89

선점형 커널 :  한 프로세스의 quantum이 다하면 커널영역에 동작중이다 하더라도(e.g. system call) context switching 이 일어나 다른 프로세스에게 CPU의 제어권을 넘김
비선점형 커널 :  한 프로세스의 quantum이 다하더라도 커널 영역에서 동작중이라면 user 영역으로 돌아가기 전까지 CPU 제어권을 넘기지 않음
=> 비선점형 커널의 경우 일례로 file 관련 I/O관련 system call을 처리하고 있다면 다른 프로세스들의 반응성을 저해 할 수 있음

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
5548 Alsa 환경 구성중 alsa-util compile 시 에러발생에 대한 질문(조언요... [2] 로이1024 2012-03-16 1624
5547 origen 4412 board 의 android building error에 대한 조언요청 [2] 김경식 2013-09-28 1623
5546 S5PV310 카메라 모듈 [1] 정용석 2011-12-07 1621
» 리눅스 선점형, 비선점형 차이... --;; [3] 이경준 2009-06-19 1620
5544 gcc 어셈블리 컴파일 에러 [5] 쿨한넘 2012-08-29 1620
5543 spec2006을 arm용으로 컴파일하고 있습니다. [4] 김영준 2013-12-11 1620
5542 sd_fusing tool [1] frog 2012-07-22 1619
5541 임베디드 보드에 udev가 동작하고 있는지 어떻게 확인할 수 있나요? [2] ice179 2014-03-19 1617
5540 sound 관련 문의 드립니다. [6] 리오살다 2013-04-12 1616
5539 overlay(HWComposer) 에 대해서... [2] 안심돈까스 2012-10-14 1614
5538 보드에 있는 카메라 모듈을 제어할려고 하는데요 [2] pedor 2013-09-04 1614
5537 sd 카드 체크 어떻게 하나요? ㅠㅠ [2] 딴따라 2013-01-09 1613
5536 임베디드 리눅스에 방화벽 구축 질문 라파엘르 2013-12-24 1613
5535 바이너리파일을 아스키파일로 변환하는걸 도와주세요 ... [8] 장석원 2006-09-09 1611
5534 V310 부팅시 커널 패닉 [1] 훌러덩 2011-08-22 1611
5533 MMC 관련문의 [2] 동이다 2013-06-22 1611
5532 ORIGEN 4412 보드 부팅 관련 건 file [5] 램퍼 2012-09-20 1610
5531 OPENGL-ES 를 사용해서 렌더링이 어떻게 처리되는지 궁금해서요 ?... 장석원 2010-03-26 1609
5530 scp 명령어 사용에 대한 질문하나 할게요! [1] 짜라빠빠 2013-04-10 1609
5529 센서 관련 질문 드립니다. [3] 강유 2013-10-03 1609

사용자 로그인