보는 바와 같이 task는 처음 생성이 되면 곧바로 실행이 되지 않는다.

대부분 Kernel은 크게 두개의 Queue 를 사용한다.

물론 기법에 따라 다 다르다. 하지만, 사용 개념은 같다.

어떤 Kernel은 몇개의 Queue를 우선순위별로 사용하지만,

큰 개념은 두개의 Queue다.

1. Runnable Queue 혹은 Ready Queue 라고 한다.

2. Blocked Queue 혹은 Sleep Queue 라고 한다.

이 두 Queue는 Multitasking 을 하기 위한 필수 기법이라고 할수 있다.

이를 통해 우리는 여러 Program 을 동시에 수행하듯이 사용할수 있는 것이다.

우선 한 task가 생성이 되면 Runnable Queue에 들어가서

Scheduling을 통해 실행상태(Running State)가 되길 기다린다.

이러다가 Scheduling을 통해 실행상태가 되면 수행을 하다가 두가지 경우가 발생할수 있다.

1. Time Slice Expired

실행상태에서 task에 주어진 시간을 모두 소진 하였을때이다.

고급


2. I/O Request or Event Occured

수행 시간이 오래걸리는 I/O 요청이나

MFC 프로그램 처럼 Event 중심 프로그램이 Event가 발생되기를 기다리는 동안에는

CPU를 할당 받지 않고 수행의 대상이 되지 않는 Blocked Queue에서

대기 하게 된다.

Blocked Queue에 삽입 되면, Interrupt가 발생이 되어야만 다시 Ready Queue에 삽입이 될 수 있다.

이때 Interrupt는 다양한 Signal이 될 수도 있고, Event가 될 수도 있다.

Interrupt가 되어 I/O가 완료되거나, Event가 발생하게 되면

해당 task는 Blocked Queue에서 Ready Queue로 전환되게 된다.

+ Recent posts