※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


Job Queue, Ready Queue 그리고 Device Queue에 대해서 이야기해보자.


Job Queue

Job Queue를 설명하기 전에 논해야 할 것은 long-term 스케줄러이다. 위키피디아에 따르면, Job Queue는 다음과 같다.


In system software, a job queue (sometimes batch queue), is a data structure maintained by job scheduler software containing jobs to run.

[Reference] Wikipedia (http://en.wikipedia.org/wiki/Job_queue)


job scheduler에 의해 유지되는 data structure라고 한다. 그런데, job scheduler = long-term scheduler이므로 job queue는 secondary storage에 있는 프로세스가 메모리로 load될 때 secondary storage에 형성되어있는 큐라고 볼 수 있다.



Ready Queue

Ready 상태에 있는 프로세스들, 즉 메모리에 load되어있는 프로세스들이 ready queue에 쌓여있는다. 따라서, ready queue는 메모리에 load되어있는 queue라고 할 수 있다.


device queue

ready queue가 메모리에 있다면 device queue는 device controller에 있다. device controller는 쉽게 말해서 하드웨어 그 자체이다.



http://www.tomshardware.com/reviews/cpu-stress-test,942-5.html

위에 보이는 USB가 꽂혀있는 저 쇠덩어리가 usb controller이다. 즉, 모든 I/O device들이 controller들이고, 각각의 controller들은 당연히 buffer를 가지고 있다. 그 device queue는 그 buffer에 임시적으로 저장된다.


이번 포스팅에서는 전전 포스팅에서 설명했던 

프로세스 상태(http://operatingsystems.tistory.com/entry/OS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B4%80%EB%A6%ACProcess-Management)를 위에서 설명한 각각의 queue들과 같이 설명을 하고 싶다.


위에서 말했듯이, 아래의 과정에서는 long-term 스케줄러가 개입하게 된다. 



이 때, long-term 스케줄러는 secondary storage에 저장되어있는 Job queue로부터 프로세스를 끌어와서 메모리에 load시킨다.


ready 상태에 있는 PCB1은 CPU 스케줄러에 의해 CPU 점유권을 갖게 된다. 그 후 아래와 같이 PCB1 내부에 있는 우선순위가 다른 PCB의 우선순위보다 높으면 CPU 점유권을 갖게 된다. CPU 점유권을 가지고 있는 상태에서 I/O request가 들어오면 해당 PCB1은 CPU 점유권을 잃고 device controller 안에 있는 buffer의 device queue로 들어가게 된다. 그러면 다음과 같은 상태가 된다.



PCB1이 ready queue에서는 삭제되었음을 볼 수 있다. (만일 ready queue에서 삭제가 안 된다면, 이게 queue가 아니지?! 안 그런가?) 이 상태에서 I/O 작업이 모두 끝나면 다시 ready queue로 들어간다. 



위와 같은 상황이 asleep 상태에서 ready 상태로 돌아간 상태이다. I/O 작업이 끝났다는 말이 device queue에서 쫓겨날 때가 됐다는 뜻이고, ready queue로 다시 돌아갈 때가 됐다는 뜻이기도 하다.


한 가지 주의하자. running 상태에서 asleep 상태로 갈 때 PCB 정보들은 ready queue에서 사라지고 device queue로 간다. 그렇다면, 다음에 I/O 작업이 끝난 후, ready 상태에서 running 상태로 갈 때, 이전에 수행했던 값들은 어떻게 가지고 올까? 이 개념이 context switching이다. 애초에 running 상태에서 asleep 상태로 갈 때 OS는 context switching이라는 작업을 통해서 현재 이 프로세스의 context(register values)를 메모리에 저장해둔다.


다음 포스팅은 context switching에 대해서 자세하게 이야기해보자.

'Operating Systems' 카테고리의 다른 글

[OS] Preemption and Non-Preemption  (0) 2013.01.13
[OS] Context Switcing  (2) 2013.01.01
[OS] 스케쥴러 (scheduler)  (2) 2012.12.31
[OS] 프로세스 상태(Process State)  (2) 2012.12.31
[OS] Interrupt Service Routine (ISR)  (2) 2012.12.24
Posted by 빛나유
,