티스토리 뷰
지난 포스트에서 임의의 task를 두개 만들고 서로 번갈아가면서 switch 하는 모습을 봤다. 그런데 이런 task가 두개 였으니까 이렇게 쉽게 switch가 되겠지만 실질적으로 처리하는 task는 엄청 많다. 이를 한꺼번에 다루기 위해서 뭔가의 도구가 필요하고 그 순서를 가를 기준이 필요하다. 그게 바로 scheduler 이다. 여러가지 이유가 있겠지만 기준을 정해서 task의 우선순위를 정하게 되면 시스템은 효율적으로 일할 수 있기 때문에 근본적으로 성능이 향상된다. 마치 계획성있는 사람이 더 효율적인 것처럼...
그 scheduler도 내부 구조와 기준에 따라서 나눠지는데 가장 쉽게 구현할 수 있는 기준이 바로 Round-Robin 기법이다. 그냥 전체 프로세스를 일정시간단위로 끊어가면서 task를 돌리게 하는 것인데 당연히 이 방식도 뭔가의 기준이 없이 끊어서 한다면 일반적인 방식과 크게 다를 것이 없는데 여기에 우선 순위를 추가해서 우선순위별로 먼저 처리할 수 있게끔 하면 조금더 효율성을 높일 수 있다. 일종의 level을 세분화했기 때문에 명칭도 Multilevel Queue 방식이라고 한다.
위에서 각각의 Task를 다루기 위해서는 각각의 TCB(Task Control Block)가 필요한데 이를 그냥 막 생성하는 게 아니라 사전에 정의되어 있는 Pool( Task Pool)에서 할당 받아서 가져오는 형식을 취한다.
아래 이미지들이 책에서 주어진 예제들이며, 각각의 task 1번과 task 2번을 따로 실행시키면서 화면상에 출력되는 내용을 표현한 것이다.
먼저 첫번째는 - ,/ , | ,\ 이 네 개의 기호를 순차적으로 표현하는 것을 800개의 task로 한꺼번에 표현했다. 실제로 돌려보면 알겠지만 각각의 task가 원활하게 동작한다.
두번째 이미지는 text의 character와 color를 랜덤하게 뽑아서 순차적으로 돌리게끔 한 것이다. 여기에는 300개의 task가 동시에 동작하고 있다.
task1번을 300개 task2를 723개, 총 1024개의 task를 한꺼번에 돌리고 있다. 이렇게 많은 task를 한꺼번에 수행할 수 있는건 바로 scheduler가 있기 때문이고, 만약이게 없다면 생각보다 task를 많이 돌릴 수 없다. 궁금한 사람은 밑의 동영상을 보면 어떻게 돌아가는지를 확인할 수 있다.
'Study > OS' 카테고리의 다른 글
[OS] Mint64OS 21절 MultiThreading (0) | 2013.01.30 |
---|---|
[OS] Mint64OS 20절 Process synchronization (0) | 2013.01.29 |
[OS] Mint64OS 19절 Multilevel Queue Scheduler (0) | 2013.01.29 |
[OS] Mint64OS 17절 Task handling (0) | 2013.01.25 |
[OS] Mint64OS 16절 PIT / RTC 설정 (0) | 2013.01.25 |
[Site] osdev.org (0) | 2013.01.25 |
[OS] Mint64OS 15절 Console Shell 생성 (0) | 2013.01.25 |
- Total
- Today
- Yesterday
- dynamic programming
- DepthStream
- Expression Blend 4
- Windows Phone 7
- processing
- Kinect SDK
- Off-policy
- TensorFlow Lite
- Distribution
- Kinect
- Variance
- End-To-End
- 한빛미디어
- PowerPoint
- RL
- reward
- Pipeline
- 딥러닝
- bias
- Kinect for windows
- ai
- arduino
- SketchFlow
- Policy Gradient
- 파이썬
- 강화학습
- Gan
- Offline RL
- ColorStream
- windows 8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |