스케줄러
✅ 프로세스는 자신의 임무를 완료한 후 사라질 때 까지 많은 큐를 돌아다님.
이 때 프로그램들은 제한된 CPU를 서로 사용하고 하는데 OS는 이러한 프로세스들 중 하나를 택하는데 바로 scheduler 가 이러한 역할을 담당.
✅ 실행 준비가 완료된 프로세스들은 준비큐(Ready Queue)에 놓이며
프로세스는 프로세서를 할당 받을 때 까지 준비 큐에서 대기함.
1) Job Queue - Job Scheduler(Long-term scheduler)
2) Ready Queue - CPU Scheduler(Short-term scheduler)
3) Medium-term scheduler / Swapper
✅ Job Scheduler ( Long - term scheduler)
✅ Ready Queue - CPU Scheduler(Short-term scheduler)
✅ Medium-term scheduler / Swapper
✅ 프로세스 스케줄링은 일반적으로 큐잉 다이어그램(Queueing diagram) 이라고 함.
✅ 두가지 타입의 큐(ready queue, device queue) 존재
✅ 원은 queue를 서비스하는 자원이며, 화살표는 시스템에서 프로세스들의 흐름을 표현.
✅ 새로운 프로세스는 처음에 ready queue에 놓이며 프로세스는 CPU를 할당 받을 때(dispath)까지 ready queue에서 대기.
✅ 프로세스에 CPU가 할당되어 실행되면 아래 사건들 중 하나가 발생 할 수 있음.
1) 프로세스가 I/O 요청하여 I/O 큐에 넣어질 수 있음.
2) 프로세스가 child process를 생성하고 그 프로세스의 종료를 기다릴 수 있음.
3) 프로세스가 interrupt의 결과에 따라 강제로 CPU로부터 제거되어 ready queue에 다시 놓일 수 있음.
✅ 1),2) 와 같은 경우에는 프로세스가 결국 대기 상태에서 준비 상태로 전환된 다음 다시 준비 큐로 들어감.
✅ 프로세스는 종료될 때 까지 이러한 주기를 계속적으로 반복.
✅ 프로세스가 완전히 종료되면 모든 큐에서 사라지고 PCB 및 자원이 반환됨.
✅ PCB 저장하는 큐의 종류
1) Job Queue -> 모든 프로세스 저장 (Job = Process)
2) Ready Queue -> 자원할당을 받기 위해 대기하는 큐
3) Device Queue -> 특정 I/O 장치 사용을 대기하는 프로세스들의 집합
✅ 프로세스들은 실행 동안 여러 queue들 사이를 이동함
✅ 프로세스가 종료되면 queue에서 제거되며 할당된 자원과 PCB 반납.
프로세스의 생성
✅ 운영체제가 최초의 프로세스를 생성하면 이미 존재하는 프로세스가 다른 프로세스를 복제 생성함
✅ 이때 기존 프로세스를 부모 프로세스라고 하며 새로 생긴 프로세스를 자식 프로세스라고 함.
✅ 부모 프로세스가 자식 프로세스를 복제 생성한다.
✅ 프로세스 세계에서는 자식 프로세스가 먼저 죽고, 이를 부모 프로세스가 처리함.
복제는 ?
✅ 프로세스의 트리(계층 구조) 형성
✅ 프로세스는 자원을 필요로함
-> 운영체제한테 할당 받음.
-> 부모와 공유함.
✅ 자원의 공유
-> 부모와 자식이 모든 자원을 공유하는 모델
-> 일부를 공유하는 모델
-> 전혀 공유하지 않는 모델
✅ fork
✅ exec
✅ exit
✅ abort
✅ wait
Two issues in process termination
**텍스트**
✅ Zombie Process (unerased process, ghost process)
자식 프로세스가 종료됬지만 부모 프로세스가 자식 프로세스의 종료 상태를 회수 하지 않았을 경우 남아있는 자식 프로세스를 zombie process 라고함 ( 자식 프로세스가 작업을 끝낸 후 exit() 했지만 부모 프로세스가 wiat()을 하지 않은 경우)
종료된 프로세스 일 경우 프로세스의 정보가 프로세스 테이블에 남게 되는데 부모 프로세스가 wait()을 하지 않으면 자식 프로세스가 exit() 되지만 정보가 남아있는 상태임.
✅ Orphan Process
IPC ( Inter - Process Communication )
✅ IPC는 프로세스들 간의 통신과 동기화를 이루기 위한 메커니즘을 의미.
✅ 메시지 전달방식 (커널을 통한 메시지 전달) 과 공유 메모리 방식 (일부 주소 공간 공유)이 있음.
멀티 프로세스
✅ 브라우저 프로세스는 유저 인터페이스, 디스크, 네트워크 I/O 를 관리함
✅ 랜더 프로세스는 웹페이지를 랜더링하고 HTML, JavaScript를 다룸
-> 새롭게 만들어진 웹사이트 마다 새로운 renderer 가 부여됨.
-> 샌드박스에서 디스크와 네트워크 I/O를 제한하면서 안전성에 대한 위험을 최소화하며 운영함.
✅ 플러그 인 타입 마다 각각의 플로그 인 프로세스 존재
프로세스 간 통신 : 프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법
✅ 프로세스는 완전히 독립된 실행객체이고 독립되어 있다는 것은 다른 프로세스들에게 영향을 받지 않는 다는 것이다.
✅ 하지만 서로 독립된 존재들인만큼 서로 통신하는 과정에 있어 어려움이 존재하는데 이를 위해서 커널 영역에서 IPC라는 내부 프로세스 간 통신을 제공하고 프로세스는 커널이 제공하는 IPC설비를 이용해 프로세스 간 통신을 할 수 있다.
운영체제 자체도 소프트웨어 이므로 CPU 위에 올라가 사용 가능한데, 메모리 공간의 제약으로 인해 운영체제의 일부분만 CPU 위로 올라가게 되는데 이렇게 올라가게 된 즉 메모리에 상주하는 운영체제의 일부를 커널이라고 함( 보통 운영체제라고 하면 이러한 커널을 의미함) 즉, 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분을 의미.
IPC 종류
1) 메시지 전달 (Message Passing)
✅ 커널이 제공하는 API를 이용해서 커널 공간을 통해 통신한다. 메시지 큐(Message Queue)를 사용해 송신 프로세스는 큐에 enqueue, 수신 프로세스는 큐에 dequeue 하며 상호간 통신. 메시지 큐는 커널 단에서 관리됨.
- 파이프 (쉘에서 사용하는 파이프)
- 소켓(TCP/IP) - 로컬에서도 통신이 가능하며 원격에서도 통신 가능.
2) 메모리 공유 (Shared Memory)
✅ 프로세스끼리 특정 공통의 메모리 영역을 공유하며 상호간 통신 하는 방법.
✅ 데이터 자체를 공유하도록 지원하며, 한 프로세스에서 변경한 메모리 공간의 내용을 다른 프로세스에서 접근할 수 있다. 공유 메모리는 커널에서 관리됨.
✅ 대량의 정보를 다수의 프로세스에게 배포 할 수 있음.
✅ 중개자 없이 곧바로 메모리에 접근 할 수 있기에 모든 IPC 중에서 가장 빠르게 작동 가능.
Socket(소켓)
✅ Unix 도메인 소켓 또는 IPC 소켓은 동일한 호스트 운영체제에서 실행되는 프로세스간 데이터를 교환하기 위한 데이터 통신 엔드 포인트임.
✅ 네트워크 소켓 통신을 통해 데이터를 공유
-> 데이터 교환을 위해 양쪽 PC에서 각각 임의의 포트를 정하고 해당 포트 간의 대화를 통해 데이터를 주고받음.
-> 이 때 각각 PC의 PORT를 담당하는 소켓은 가각 하나의 프로세스 이다.
-> 즉 해당 프로세스는 임의의 PORT를 맡아 데이터를 송수신 하는 역할을 진행하는 프로세스 이다.
-> 각각의 PC에서 프로세스를 통해 타 PC PORT에 연결하라는 명령을 보내게 되면 두 프로세스는 서로 확인 과정을 거쳐 연결을 진행하고 연결 후 마치 PIPE와 같이 1대1로 데이터를 주고 받음.
✅ 클라리언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용함.
✅ 양방향 통신이 가능해짐.
✅ 서버 <-> 클라이언트 환경을 구축하기에 용이함.
✅ 중대형 애플리케이션에서 주로 사용.
RPC (Remote Procedure Call)
✅ RPC 방법은 분산 네트워크 망에서 많이 사용되는 방식.
✅ RPC 이용 시 프로그래머는 함수가 실행 프로그램의 로컬 위치에 있든 원격 위치에 있든 동일한 코드 이용 가능.
✅ 분리된 PC에 저장된 데이터를 마치 내 PC에 존재하는 것 처럼 데이터를 가져와 사용하는 통신방법.