[잡담] O(1) 스케쥴러에서

조회 수 1921 추천 수 92 2008.04.02 00:45:04
박은병 *.189.127.118
어떻게 O(1)이 되나 예전부터 찾아봐야지 하다가 방금

찾아봤는데 허무하게도..

하드웨어 명령에 비스무리한걸 지원해주는군요

sched_find_first_bit를 찾아보면

arm은 clz 명령(msb부터 최초의 1이 나올때까지 숫자센다)를 이용하고
x86은 bsfl 이라는 명령을 사용하는 군요

예전에 ucos-ii를 볼때 테이블을 만들어서 찾아내는 뭐 그런걸 생각했는데 하드웨어적으로 명령이 구현이 되어 있군요..

근데 뭐 쪼잔하게 더 깊이 들어가자면 이 하드웨어적인 명령이 O(1)인가?? 라는 의문도 드는군요
ㅋㅋㅋㅋ 뭐 그렇겠죠..^^..

조용락

2008.04.02 06:53:31
*.53.87.149

음.. 잘은 모르겠지만 O(1)스케줄러의 핵심은
단순히 첫번째 비트를 찾는 것 하나만을 의미하는 것 같지는 않습니다.
N개의 테스크가 있을 때 이중에 한 개를 선택해 처리를 해야 하는 시점에서 모든 태스크의 우선순위를 계산한다는게 O(n)일테구, 미리 우선순위가 정해져 있기 때문에 첫번째 우선순위의 태스크부터 처리를 하면 되는게 O(1) 스케줄러라고 봤을 때 첫번째 우선순위의 태스크를 선택하는 것만을 O(1) 이라고 보기 보다는
각 태스크의 타임슬라이스가 끝날 때마다 다음 타임슬라이스 값을 계산하고 다 계산된(expired) 우선순위큐와 active 큐의 포인터를 교환하는 동작까지를 O(1)의 핵심이라고 묶어서 봐야 되지 않을까 싶습니다.

그나저나 최근에 커널에 선택되었다는 CFS 스케줄러는 O(1) 스케줄러에 개선의 여지가 남아 있었다는 것으로 봐야되나요? 그룹 스케줄링이 가능하다는 이야기는 들었지만 단순히 토발즈가 그러한 이유때문에 CFS를 선택했다고 이해하기에는 좀 어려운 감이 없잖아 있습니다만.. 잘 만들어 둔 O(1)을 제껴둔 진짜 이유를 아직 잘 모르겠습니다..

박은병

2008.04.02 12:42:51
*.180.141.51

아..그렇죠..ㅋ
결국 expired큐 active큐 그리고 prior_array를 O(1)의 핵심일텐데, 대부분의 책에서는 그냥 이렇게 까지만 설명하고 마지막으로 비트를 찾아내는데에 대한 설명은 빠져있어서 추가적으로 찾아본 거구요..^^;
물론 비트찾아내는건 중요한 이슈가 아닌게 맞죠..ㅋㅋㅋㅋㅋ

CFS scheduler 참고
target=_blank>http://monac.egloos.com/1440912

이백

2008.04.02 13:43:04
*.120.109.21

만약 커널책으로 진도를 나가게 되면, 분석중인 커널의 버젼을 바꾸어 보는것도 좋을 듯한데요. 2.6.24 에 대한 arm patch 버젼이 나왔던데, 문제는 주석을 어떻게 옮기는 것이네요..ㅋㅋㅋ 노가다를 해야 하나?

박은병

2008.04.02 15:28:55
*.180.141.51

뭐 꼭 옮겨야 되나요??^^

그냥 두개 따로 쓰면 되지 않을까요~~ㅋㅋㅋㅋ

조용락

2008.08.25 22:40:36
*.227.211.180

난독증인가요..ㅡ.,ㅡ; 뭐라고 하죠? 글의 의도를 잘 이해 못하는거요.ㅋㅋㅋㅋ 박은병님이 남기신 글의 요지를 이제야 파악했네요...;;

동문서답을 했지만 이제와서는 아 내가 저런 답변도 했었나 싶습니다.ㅋㅋ 다까먹어서 지금 골치아픕니다.ㅠ
List of Articles
번호 제목 글쓴이 날짜 조회 수
117 [문서] 커널 분석 문서입니다. file 이백 2008-11-10 1466
116 [공지]스터디 일정 [1] 김재호 2008-06-07 1560
115 [공지사항] ARM11 스터디 분석 종료 [1] 이수연 2008-05-17 1733
114 [잡담] 이쿠 지송합니다. [1] 이백 2008-05-14 1400
113 [공지] 5/2 스터디 박은병 2008-05-02 1448
112 [정보] 서버 ip 모르시는 분들을 위해 알려드립니다. [1] 이정우 2008-04-29 1566
111 [공지] 4/26 스터디 [1] 박은병 2008-04-25 1243
110 [의문] 이번주 스터디 진행하나요? [4] 이수연 2008-04-23 1249
109 [잡담] 4월 19일 스터디 불참 [5] 이백 2008-04-16 1376
108 [잡담] 금일 스터디와 이것저것.. [4] 박은병 2008-04-13 1477
107 java virtual machine 에 관심있으신 분 계신가염? [6] 이수연 2008-04-04 1708
» [잡담] O(1) 스케쥴러에서 [5] 박은병 2008-04-02 1921
105 [토의] 스터디 진행 [11] 이백 2008-03-31 1546
104 [정리] 3/29 스터디 초간단 정리 @ㅁ@;; 이수연 2008-03-30 1604
103 [정리] 3/29 스터디~~ 박은병 2008-03-30 1462
102 [문의] linux device driver 개정 3판 가지고 계신분? [6] 이백 2008-03-27 1700
101 [정리] 3/22 스터디( kmem_cache_init ) [2] 박은병 2008-03-23 1699
100 [slab참고문서] 문경원 2008-03-22 1480
99 [공지] 3/22 의 스터디. [3] 김성준 2008-03-21 1568
98 (진행중) 2008-03-15일 진도 내용..이번주 했던 내용 정리입니다. [1] 문경원 2008-03-16 1678



XE Login