공부/운영체제2011. 6. 28. 21:26


process
실행중인 프로그램.
포함하는 것 :
프로그램 코드, 현재상태(PC, 레지스터값), 스택(함수 파라미터, return address, 지역변수), 데이터섹션(전역변수) 
 
프로세스 상태
new(프로세스가 생성되었을 때), running(실행중일 때), waiting(I/O 처리같은 어떤 이벤트가 끝나기를 기다리는 것) ready(실행되기를 기다림. new에서나 waiting 상태에서 ready로 가겠죠.), terminated(프로그램 실행이 끝남)

PCB(Process Control Block)
OS에서 프로세스들을 관리하기 위해 사용하는 자료구조
구성요소
프로세스 상태, Program Counter, CPU registers, CPU 스케쥴링 정보(우선순위, 스케쥴링 큐를 가리키는 포인터 등), 메모리 관리 정보(value of base and limit registers, page table, segment table), 할당된 I/O 장치 리스트, 연 파일 리스트 등.
PCB는 프로세스간 스위칭 할 때 주로 사용한다.

Process Scheduling Queues
OS가 프로세스들을 관리하기 위해 사용하는 큐

종류
Job queue : running중인 모든 프로세스
Ready queue : 상태가 ready인 프로세스 리스트, 큐 헤더가 첫번째, 마지막 PCB 포인터다.
Device queues :  상태가 waiting인 프로세스들. 장치마다 그 장치 사용을 기다리는 큐가 있네.

Context Switch
CPU가 다른 프로세스를 처리하려고 할 때 발생. 기존 프로세스 PCB를 메모리에 저장하고 새로운 프로세스 PCB에서 값을 불러올 때 그 시간 동안 아무일도 못하는 상황. overhead라고 한다.
그래서 이 overhead가 OS성능에 영향을 미친다. 하드웨어 성능 좋으면 빨라지겠고 자주 일어날수록 느려지겠지.

프로세스 생성
부모 프로세스가 자식 프로세스들을 생성한다.
자식 프로세스는 OS로부터 자원을 얻을 수 있고, 또한 부모 자원을 공유할 수 있다.
자식 프로세스가 실행될 때 어떤 부모는 자식이 제 할 일 다하고 끝나기를 기다리고 어떤 부모는 자식이랑 동시에 일을 한다.
자식 프로세스는 부모의 주소공간의 복사값을 가지고 그 공간에 프로그램을 불러온다. 리눅스에서 fork함수가 자식프로세스를 생성하는 거고, exec 함수가 호출되면 자식프로그램이 실행되는 거다. 따라서 exec함수가 실행되기 전까지는 부모프로세스의 복사값을 가지고 있겠지.

Swapper and Init processes
Process 0 (swapper)
Process 1 (init) : 초기화 프로그램이다. 부팅될 때 생성되는 첫번째 user process. 모든 user process의 1대조상. 자식있는 부모가 종료되면 자식은 미아가 되는데 init이 관리 해줌. 
process 2 (pagedaemon) : free memory pool 유지.

프로세스 종료 2가지 경우
정상적인 종료 : 자기 할일 다 했을 때, OS에게 끝내달라고 요청하고 OS는 프로세스에 할당된 자원을 해제한다.
비정상적인 종료 : 다른 프로세스를 죽일 수 있다. SIGKILL 같은 걸로.

프로세스간 협력
실행중인 프로세스들끼리 서로 영향을 끼칠 수 있다.
같이 함으로써 자원을 공유할 수 있고, 계산을 나눠서 해서 빨라질 수 있는 등의 장점이 있다.
프로세스간 어떤식으로 커뮤니케이션을 할 것이고 공유데이터를 어떻게 처리할 것인지에 대한 문제를 생각해볼 수 있다.
예로 Producer-Consumer problem이 있다. producer는 정보를 생산하며 consumer는 정보를 소비한다. 이 두 프로세스는buffer를 통해 커뮤니케이션을 하고 자원을 공유한다. producer나 consumer가 정보를 너무 빨리 생산하거나 소비하면 정보가 꽉 차거나 텅 비게 되는 경우도 발생할 것이다. 서로 이 경우를 알아차리고 기다리게 될 것이다.

Direct/Indirect communication.
커뮤니케이션 방법.
Direct
프로세스들이 서로 이름을 지정해서 메시지를 주고 받는 방식. 채팅처럼 양방향이 될 수도 있고 무전처럼 단방향이 될 수도 있다.
Indirect
메일박스를 통해 메시지를 주고 받는다. 여러 프로세스가 같은 메일박스를 공유하면 서로 메시지를 주고 받을 수 있다. direct는 두 프로세스가 메시지를 주고 받는 반면, 얘는 많은 프로세스와 통신할 수 있다.

Synchronization
메시지가 전달되는 방식은 blocking 또는 nonblocking 이다.
blocking은 synchronization, non-blocking은 asynchronous

Buffering
큐 사이즈가 0이면 Sender는 receiver가 일을 처리할 때까지 기다려야 한다.
큐 사이즈가 메시지를 몇개 받을 수 있으면 sender는 만약 큐가 다 찼을 경우에 기다린다.
큐 사이즈가 무한이면 sender는 기다릴 필요가 없다.

 

'공부 > 운영체제' 카테고리의 다른 글

6장 Synchronization  (0) 2011.07.04
Process scheduling  (0) 2011.07.03
Multithreaded Programming  (0) 2011.06.30
2장 System Structures  (0) 2011.06.25
1장 Introduction  (0) 2011.06.24


Posted by skyjumps