@ Scheduling을 얘기하기전에
// Resource에 대해서 얘기해보도록 하겠습니다.
> Process간에 CPU를 어떻게 Multiplexing하는지에 대해서
.. 지금까지 배워왔습니다.
@ Resource는 두가지로 나누어 볼 수 있습니다.
// Pre-emptable Resource
> 양보가 가능한 Resource를 말합니다.
.. 상황에 따라서
> 양보한다는 것은 이때까지 자신이 사용하던 것을 보류하거나 포기할 수 있습니다.
.. CPU 등이 예시가 됩니다.
.. main Memory
// Non Pre-emptable Resource
> 빼앗을 수 없습니다.
> 빼앗기게 되면 이때까지 하게 되었던 일들이 무효화 됩니다.
.. Printer 등이 예시가 됩니다. (중간에 프린트를 그만둘 수 없습니다)
.. CPU도 그럴 수도 있습니다.(상황에 따라 달라집니다.)
@ Garbitration, Resource Allocation 문제가 발생합니다. (Scheduling)
// 여러 Process가 CPU를 잡으려 할 때 누구에게 줄것인가
// 누가 CPU를 사용할 때 얼마나 줄 것이냐
// 이 부분은 시스템의 성능에 영향을 굉장히 많이 주게 됩니다.
@ CPU Scheduling을 설명하기 전에
// CPU Burst라는 것을 알아야 합니다.
> Batch 시절 수행의 unit은 Job이라고 불렸습니다
.. job(multi x)은 우선 컴퓨터 시스템의 submit이 되면 완료할 때까지 수행해야 합니다.
.. Process는 끝나지 않아도 중간에 쉴 수 있습니다.
// 이런 job에 있어서 Scheduling할 때는 entity가 job의 수행 타임입니다.
// 그렇다면 조금조금씩 점유할 때는 Scheduling 단위로 무엇을 잡아야 하는 것일까요?
> 이를 CPU Burst를 사용했습니다.
@ 어떤 프로그램을 살펴보면
// CPU를 차지하고, I/O를 기다리고, 다시 CPU를 받는 구간으로 나눌 수 있게됩니다.
> 이를 CPU Burst, I/O의 경우는 I/O Burst라고 부릅니다.
// CPU Burst는 CPU를 받아서 수행하는 시간 단위 입니다.
@ 그렇다면 CPU Burst의 size는 어느정도 있까요?
// 3msec 정도 쯤 수행하며,
> 그 사이즈는 프로그램에 따라 다를 수 있습니다.
// CPU Burst 사이즈가 큰 경우는
> 과학 연산 등이 될 것입니다.
// 작은 경우는
> I/OInteractive한 경우가 있습니다.
@ 어떤 프로세스가 수행을 하지 않을 때, 다음에는 누구에게 넘기고, 얼마나 수행키는 문제를 확인해보겠습니다.
// CPU State Transition은 언제 일어날까요?
> Ready -> Running
.. Dispatcher 관여합니다.
> Running -> Ready
.. 이를 어떤 Scheduling이라고 할까요?
.. Pre-emptive Scheduling
> Running -> Wait
.. Non Pre-emptive Scheduling
> Running -> Terminate
.. Non Pre-emptive Scheduling
> Wait -> Ready
.. Pre-emptive Scheduling
// Scheduling이라고 하는것은 CPU Transition을 촉발하는 행위라고 생각할 수 있습니다.