http://www.kocw.net/home/m/search/kemView.do?kemId=1046323
운영체제 강의를 듣고 정리한 내용입니다
Message Passing
Message system
프로세스 사이에 공유 변수(shared variable)를 일체 사용하지 않고 통신하는 시스템을 말한다
Direct Communication
통신하려는 프로세스의 이름을 명시적으로 표시한다
Process P ---> Process Q
Indirect Communication
mailbox(혹은 port)를 통해 메시지를 간접적으로 전달한다
Process P -----> Mailbox M ------>Process Q
-> Direct Communication, Indirect Communication 둘 다 커널을 통해 전달한다
원칙적으로 프로세스들은 독자적인 주소공간을 가지고 있다
그럼에도 주소공간을 공유하는 것이 shared memory이다
-> 이 또한 커널에 시스템 콜을 해서 맵핑 후 공유한다
CPU Scheduling
CPU-butst Time의 분포
여러 종류의 job(process)이 섞여있기 때문에 CPU 스케줄링이 필요하다
- Interactive job에게 적절한 response 제공을 요망한다
- CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용한다
/*
CPU의 사용량을 골고루 분포시키는 것은 그렇게 스케줄링했다 가정했기 때문이고
실제로는 한가지 일만 할당시키게 스케줄링 할 수도 있다
*/
프로세스 특성 분류
프로세스는 특성에 따라 두 가지로 나눠진다
I/O-bound process
- CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job(process)
- many short CPU bursts
CPU-bound process
- 계산위주의 job
- few very long CPU bursts
CPU Scheduler & Dispatcher
CPU Scheduler
Ready 상태의 프로세스 중에서 CPU를 줄 프로세스를 고른다
Dispatcher
CPU의 제어권을 CPU scheduler에 의해 선택된 프로세스에게 넘긴다
이 과정을 context switch(문맥 교환)이라고 한다
CPU 스케줄링이 필요한 경우는 프로세스에게 다음과 같은 상태 변화가 있는 경우이다
- Running -> Blocked(I/O 요청하는 시스템 콜)
- Running -> Ready(할당시간 만료로 timer interrupt 발생)
- Blocked -> Ready(I/O 완료 후 인터럽트)
- Terminate
**1,4에서 스케줄링은 nonpreemptive -> CPU를 자진 반납한다(강제x)
그 외의 스케줄링은 preemptive -> CPU를 강제로 빼앗는다