- Process 개념
- Process 스케줄링
- Operations on Processes
- Cooperating Processes
- Inter-process Communication; IPC
- Communication in Client-Server Systems
1. Process 개념
(job == process) 프로세스는 실행하는 프로그램을 말한다
이는 다음 세 가지가 메모리에 포함된다.
- PC; Program Counter
- stack
- data section
메모리 영역 : (snupi.tistory.com/9?category=819647)
- 프로세스는 다음 state가 있다.
- new
- : 프로세스가 생성될 때의 상태
- running
- : 명령이 실행될 때
- waiting
- : 이벤트가 발생하기를 기다리는 상태
- ready
- : CPU에 적재되어 기다리는 상태
- terminated
- : 실행이 끝났을 때
- PCB: 프로그램이 프로세스가 될 때 각종 정보를 가진 PCB; Process Control Block의 형태를 가지고 다음과 같이 구성된다.
-> 이는 ready 상태일 때 Main Memory에 저장된다.
- Process 상태
- PC
- CPU 레지스터
- CPU 스케줄링 정보
- Memory-management 정보 (base/limit reg, page/seg table)
- Accounting 정보 (CPU time used/limit, job/process num)
- I/O 상태 정보 (list of IO 디바이스 및 open files)
- Context Switch: CPU가 다른 프로세스로 switch 할 때, 시스템은 전 프로세스의 상태를 저장하고, 새 프로세스의 저장된 상태를 로드한다
-> Context switch Time은 overhead가 일어난다. (<- hardware support)
2. Process 스케줄링
프로세스는 스케줄링 되어 큐에 저장된다.
- Job queue
- : 모든 프로세스
- Ready queue
- : in main memory, ready and waiting
- Device queues
- : I/O 디바이스를 기다리는 프로세스
- 스케줄러
- Long-term scheduler (job scheduler)
- : ready queue로 가는 프로세스를 선택한다
- : 빈도가 낮고, 속도([s], [m])가 느리며, CPU 사용이 적다
- : multiprogramming의 정도(메모리에 올리는 개수)를 제어한다
- Short-term scheduler (CPU scheduler)
- : 다음 실행될 프로세스를 선택하고 CPU에 할당한다
- : 빈도가 높고 속도([ms])가 빠르며, CPU 사용이 많다
- Medium-term scheduler
- : 일시적으로 디스크로 swapped-out될 프로세스를 선택한다
- : Time-sharing 시스템으로 CPU에 경쟁하는 프로세스를 swap out 하여 Multiprogramming 정도를 완화한다
- : 후에 다시 ready queue(메모리)로 swap in 한다
3. Operations on Processes
프로세스 생성
부모 프로세스가 자식 프로세스를 만들며 트리 형태를 가진다.
- 자원 공유 유형
- 부모와 자식 간에 자원을 모두 공유
- 부모의 일부 자원 공유
- 공유 X
- 실행 유형
- 부모와 자식 동시 실행
- 자식이 끝날 때까지 기다림
- 주소 공간
- 부모와 같은 주소 (같은 프로그램, 데이터)
- 자식이 새로운 프로그램 (fork하고 exec)
ex) UNIX
- fork 시스템 콜이 새 프로세스를 만든다
- exec 시스템 콜은 fork 후에 새 프로그램에 프로세스의 메모리 공간을 둔다
int main()
{
Pid_t pid;
/* fork another process */
pid = fork(); /* fork() 라는 System Call을 이용하여 pid 생성 */
if (pid < 0) { /* error occurred */
fprintf(stderr, "Fork Failed");
exit(-1);
}
else if (pid == 0) { /* child process */
execlp("/bin/ls", "ls", NULL); / fork() 다음에 ‘execlp()’ = ‘exec()’ /
}
else { /* parent process */
/* parent will wait for the child to complete */
wait(NULL);
printf("Child Complete");
exit(0);
}
}
종료
프로세스가 마지막 명령을 실행하고 Output 데이터는 자식에서 wait 상태의 부모에게 간다.
OS에 삭제할지를 묻고 (-> exit), 프로세스의 자원이 할당 해제된다.
이후 부모가 자식 프로세스의 실행을 중단한다 (-> abort)
(만약 부모가 중단시키면 모든 자식들은 중단되게 된다 -> cascading termination)
4. Cooperating Processes
다른 프로세스의 실행에 영향을 주고받는 프로세스 (<-> independent)
ex) parent-child 프로세스
장점은 다음과 같다
- 메모리 공간 등을 공유한다
- multi CPU를 나눠 처리하여 계산 속도가 향상한다
- 유사한 기능을 별도의 프로세스로 나누는 모듈화가 이뤄진다
- 편리하다
이에는 생산자-(버퍼)-소비자 관계가 있다
- 컴파일러-어셈블리 코드-어셈블러
- 어셈블러-객체 모듈-메모리로 올리는 로더
- 웹 서버 - HTML - 웹 브라우저
버퍼의 제한이 있을 경우, 원형 큐와 같은 형태로 insert(), remove()가 이뤄진다
5. Inter-process Communication; IPC
프로세스 간에 communicate하고 동기화(순서화)하는 메커니즘 (Message Passing)으로,
Cooperating Processes는 IPC로 통신하며 데이터와 정보를 공유한다
이는 둘을 이어주는 link를 필요로 하며,
다음 명령으로 메시지를 교환한다
- send(message)
- receive(message)
통신 link에는 다음 측면이 있다
- physical 측면
- : shared memory / hardware bus / switch / network
- logical 측면
- : direct - indirect / syn - asyn 통신 / auto - explicit buffer
이 외에도
- 링크 구현
- 몇 개의 링크에 몇 개의 프로세스가 연결되는지
- 링크의 대역폭
- 메시지의 크기
- 방향의 종류
등 구현 시의 고려사항이 있다
communication의 두 가지 모델
kernel로 메시지를 주고받는 message passing 모델과, shared memory 모델이 있다
메세지 패싱 모델은 데이터 업데이트가 빠르나, 많은 메세지가 오갈 경우에 성능이 떨어진다.
반대로 공유 메모리 모델은 많은 공유 메모리가 소모되지만, 공유 속도가 빠른 장점이 있다.
Direct/Indirect 통신
직/간접 통신으로도 구분할 수 있다.
직접적 communication은 누가 송수신자인지 명시한다.
- send(P, m): P로 m 보냄
- receive(Q, m): Q로부터 m 받음
직접적 communication은 자동적으로 링크가 형성되고,
한 쌍의 프로세스에 하나의 링크가 연결된다.
이는 단방향일 수 있지만 주로 쌍방향이다
이와 반대로 간접적 communication은 고유의 id를 가진 mailbox를 거쳐 데이터를 전달한다
이는 프로세스들이 공통의 mailbox를 가지고,
다중의 링크 혹은 프로세스가 연결될 수 있다.
- send(A, m): mailbox A로 m 보냄
- receive(A, m): mailbox A로부터 m 받음
이 때, 같은 mailbox를 공유하는 receiver들이 누가 receive할지 불분명하게 되는 상황을 방지한 해결책은 다음과 같다
- 두 프로세스에 한 링크만
- receive 명령을 한 순간에 한 프로세스만 실행 가능함
- 시스템에서 임의적으로 하나 선택해서 알려줌
버퍼의 용량에 따라
버퍼의 용량에 따라 다음 세 가지 방법으로 나뉜다
- 버퍼의 용량이 0인 경우
- : 송수신자가 준비가 될 때까지 기다린다
- : 이는 blocking 방식이고, 동기식이다 (랑데부; rendezvous: 송수신 처리 시 동기화)
- 제한이 있는 경우
- : link가 찰 때까지 보내고 받고, 차게 되면 기다린다
- : link가 찰 때까지 보내고 받고, 차게 되면 기다린다
- 제한이 없는 경우
-
- : 이는 기다림 없이 계속 보내고, 필요할 때 메시지나 null을 받는다
- : 이는 non-blocking, 비동기식이다
6. Communication in Client-Server Systems
- socket은 각 endpoint이고 IP주소 : port번호를 참조한다
ex) web의 port 번호는 80, telnet은 23, FTP는 21이다
- Remote Procedure Call (RPC): 원격에 있는 콜을 실행한다
클라이언트 stub은 서버를 가리키고, 서버 stub은 메시지를 받고 실행하고 결과를 클라이언트한테 전송한다.
- Remote Method Invocation (RMI): 원격에 있는 객체를 실행한다 (RPC와 유사하고 JVM에서 실행한다)
'OS' 카테고리의 다른 글
[OS][운영체제] 6. Process Synchronization / 프로세스 동기화(순서화) (0) | 2021.05.05 |
---|---|
[OS][운영체제] 5. CPU Scheduling / CPU 스케줄링 (0) | 2021.04.23 |
[OS][운영체제] 4. Threads / 스레드 (0) | 2021.04.23 |
[OS][운영체제] 2. Operating-System Structures / OS의 구조 (0) | 2021.04.22 |
[OS][운영체제] 1. Computer-System Structure & Operating System / 컴퓨터 구조와 OS (0) | 2021.04.22 |