Keep going
프로세스 스케줄링 본문
Process Scheduling
- ready 되어 있는 process가 여러개 있다면 어떤 프로세스에게 cpu를 줄 것인가
- process scheduler : ready queue에 있는 여러가지 process 중에서 어떤 process가 다음 cpu 실행을 받을 것인가 결정함
- 시스템안에서 여러가지 큐
- job queue - DISC에서 main memory 나올 때까지 기다리는 큐
- ready queue - cpu를 받기 위해 준비된 애들이 연결 되어 있는 애들
- device queues - 장치에 있는 큐
- 프로세스가 어떤 큐에 있는가를 기준으로 process를 나눠 볼 수있다.
- process 처음 생겨나면 ready queue, cpu 받으면 실행
- I/O 요청 → I/O queue
- 할당된 시간이 지나면 ready queue
- 자식 만들면 자식 실행되면서 자기는 ready queue
- 인터럽트 발생하면 ready queue
- 반복하다 cpu 받고 종료
Schedulers
- long-term scheduler (job scheduler)
- DISC에서 여러 job 중 main memory로 갖고 올 때 어떤 job을 갖고 올거냐 하는 것을 선택하는 스케줄러
- 시간이 길다?
- 메인 메모리에서 자리가 비어야만 job 하나를 갖고오기 때문에 실행되는 간격이 길다
- 주요 작업
- job queue에서 ready queue로 작업을 갖고 오는 것
- invoked infrequently (가끔 한 번씩 실행)
- 메인 메모리 작업 개수(degree of multiprogramming) 조정
- 요즘 시스템에서는 batch 시스템을 잘 이용안하므로 대부분 long term scheduler 없는 경우 많다.
- short-term scheduler (cpu scheduler)
- ready queue 작업에서 어떤 작업한테 cpu를 줘서 실행시키느냐 결정
- invoked frequently (자주 실행)
- 사용자에게 여러 명의 프로그램 진행되는 것 같이 모양을 보여주기 때문에 수밀리초보다 한번씩 cpu schedulling 자주 실행 → 빨라야 함
- 느리면 schedulling 하는데 오버헤드 커서 유용한 작업 못하기 때문에 shorterm scheduller는 아주 빨라야 한다.
프로세스 구별
- I/O bound process (I/O 중심 프로세스)
- I/O 작업을 주로 하는 process
- I/O가 전체 실행시간 부분 차지
- CPU bound process (cpu 중심 프로세스)
- 딥러닝 같은 방대한 계산해야하는 것들
- I/O들 일어나지 않고 CPU만 엄청나게 많이쓰게 된다.
- 만약 메인 메모리에 I/O bound job, CPU bound job 여러개 있다면 어떻게 main memory에다가 집어넣는게 좋은 방법일까?
- I/O bound job만 다 들어있는 경우
- 잠깐 cpu쓰고 I/O 하러 감 → 나머지 cpu문제는 애들중에 어떤 I/O가 끝날때까지 놀아야 하는 것 → cpu 노는 시간 길어짐
- cpu bound job 만 다 들어있는 경우
- 한 작업이 cpu 잡으면 한동안 안 내놓는다. → I/O 하러 잠깐 가면 그동안 2번째 작업은 CPU를 오래쓴다. → I/O는 이미 끝났고 놀고있다. → I/O idle time 길어진다.
- I/O bound job, cpu bound job 섞여있는 경우
- cpu 쓰다가 내놓으면 잠깐 i/o작업가고 i/o bound job이 잠깐 cpu 잠깐 쓰는 형태로 I/O 작업하는동안에도 CPU 많이 사용한다.
- CPU와 I/O 동시에 동작하는 시간 많아짐
- 시스템 전체 활용도 ↑
- I/O bound job, cpu bound job 적당히 섞여서 메인 메모리에 들어와 있는 것 선호
- I/O bound job만 다 들어있는 경우
운영체제 발달 과정에서 main memory 적을 때 생기는 일
- terminal 연결된 여러명의 사용자가 사용한다고 생각해볼 때 사용자들이 작업을 막 만들면 main memory가 모자랄 수 있다.
- Swapping : main memory에 있던 작업중에서 일부는 잠깐 DISC에 내려 보내고 여유 생기면 DISC로부터 갖고올 수 있다.
- Swapper : 누구를 내려보낼 것인가와 DISC - swap area에 swap 된 작업 중 어떤 job을 갖고올 것인지 결정하는 것
- mid term scheduler 중간 시간 간격으로 실행
Context Switch
- 한 프로세스 실행되다가 다음 process로 넘어가려면 process 상태 save, 약간의 작업을 더하고 다음 실행을 process 상태 복원 그리고 실행
- 중간에 시스템 호출이 일어나므로 사용자 모드에서 커널 모드로 바뀌어야 되고 커널모드에서 실행되다가 사용자 모드로 바뀌어야 한다.
- Context switch : 한 프로세스는 실행되고 있다가 다른 프로세스 실행으로 바꾸는 작업
- 어떤 프로세스를 실행하고 있다가 문맥을 저장하고 다른 프로세스 문맥으로 load해서 다른 프로세스 실행 하는 것
- 문맥 = Process control block
- Context Switch 시간은 사용자 프로그램 실행하는 시간에 속하지 않는다.
- context switch 시간이 길어지면 시스템 느려진다. PCB에 다양한 정보 저장할 수록 시간이 증가한다.
- 요즘 하드웨어들은 Context Swith 지원하기 위한 기능들이 들어 있는 경우 많다.
- register set 여러개 둬서 A 프로세스 실행할 때 A register set 사용하다가 B 프로세스 실행할 때 B register set 사용하면 레지스터 PCB에 저장/복원 안해도 된다. → 시간 단축
Comments