* Process Management : CPU가 프로세스가 여러개일 때, 스케줄링을 통해 관리하는 것

  • CPU는 각 프로세스들이 어떤 것인지 알아야 관리가 가능하다. 프로세스들의 각자 특징을 갖고 있는 것이 바로 Process Metadata

* Process Metadata : 프로세스의 특징을 나타내는 정보로, 프로세스가 생성되면 PCB(Process Control Block)에 저장이 된다.

  1. Process ID
  2. Process State
  3. Process Priority
  4. CPU Registers
  5. Owner
  6. CPU Usage
  7. Memory Usage

1. PCB (Process Control Block)

  • 프로세스 메타데이터들을 저장해 놓는 곳
  • 한 PCB 안에는 한 프로세스의 정보가 담김

* PCB 목적

CPU는 프로세스의 상태에 따라 교체작업이 이루어진다. (Interrupt가 발생해서 할당받은 프로세스가 wating 상태가 되고 다른 프로세스를 running으로 바꿔올릴 때)

이때, 앞으로 다시 수행할 대기 중인 프로세스에 관한 저장값을 PCB에 저장해두는 것.

* PCB 관리 : Linked List 방식으로 관리됨.

  • PCB List Head에 PCB들이 생성될 때마다 붙게 된다. 주소값으로 연결이 이루어져 있는 연결리스트이기 때문에 삽입, 삭제가 편리하다.
  • 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.
  • 이렇게 수행중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching이라고 한다.

2. Context Switching

  • CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에 읽어 레지스터에 적재하는 과정

* Context Switching 발생 경우

  • 인터럽트가 발생
  • 실행중인 CPU 사용 허가시간을 모두 소모
  • 입출력을 위해 대기해야하는 경우

즉, 프로세스의 상태 변경 시 발생(ex. Ready->Running, Running->Ready, Running->Waiting)

3. IPC(Inter Process Communication)

프로세스는 독립적으로 실행된다. 독립되어 있으므로 다른 프로세스에게 영향을 받지 않는다.

프로세스는 서로 독립적이기 때문에 통신을 하는 방법이 따로 있는데 이를 가능하게 해주는 것이 바로 IPC 통신이다.

* 커널(운영체제의 핵심적인 부분)은 프로세스 통신을 위해 다양한 IPC 메커니즘을 제공한다.

* IPC 종류

1. 익명 PIPE

  • 파이프는 두 개의 프로세스를 연결하게 되고, 하나의 프로세스는 데이터를 쓰기만, 다른 하나는 데이터를 읽기만 할 수 있다.
  • 한쪽 방향으로만 통신이 가능한 파이프의 특징 때문에 Half-Duplex(반이중) 통신이라고 부르기도 한다.

2. Named PIPE(FIFO)

  • 위의 익명 PIPE는 통신을 할 프로세스가 명확하게 알 수 있는 경우에 사용한다. (ex. 자식과 부모 프로세스 간)

  • Named PIPE는 부모 프로세스와 무관하게 다른 모든 포르세스들 사이에서 통신이 가능하다. 그 이유는 프로세스 통신을 위해 이름이 있는 파일을 사용하기 때문이다.

  • 익명 PIPE와 마찬가지로 읽기 전용과 쓰기 전용을 따로 써야하므로 read/writer를 위해서는 2개의 파이프가 필요하다.

3. Message Queue

  • 입출력 방식은 Named PIPE와 동일하다.

  • 하지만 Named PIPE는 데이터의 흐름이라면 Message Queue는 메모리 공간이다.

4. Shared Memory(공유 메모리)

  • 데이터를 공유하는 방법
  1. 통신을 이용하여 데이터를 주고 받는 것
  2. 데이터를 공유하는 것, 함께 사용하는 것(LIKE 스레드)

-> Shared Memory는 공유메모리가 데이터 자체를 공유하도록 지원하는 설비

  • 중개자 없이 바로 메모리에 접근할 수 있기 때문에 다른 모든 IPC 통신들 중에서 가장 빠르게 작동할 수 있다.

5. Memory Map(메모리 맵)

  • 4의 공유 메모리와 마찬가지로 메모리를 공유한다는 측면이 있다.

  • but 메모리 맵은 열린 파일을 메모리에 매핑시켜서 공유한다는 점.(공유 매개체가 파일 + 메모리)

  • 주로 파일로 대용량 데이터를 공유할 때 사용한다.

6. 소켓

  • 프로세스와 시스템의 기초적인 부분이며, 프로세스들 사이의 통신을 가능하게 한다.

  • 클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용한다.

* 소켓의 동작과정

4. CPU Scheduling

1) 스케줄링 : CPU를 효율적으로 사용하기 위해 프로세스를 잘 배정하기

  • 조건 : 오버헤드 少 / 사용률 多 / 기아 현상 少
  • 목표
1-1) Batch System : 가능하면 많은 일을 수행. 시간(time)보다 처리량(throughout)이 중요
1-2) Interactive System : 빠른 응답시간, 적은 대기 시간
1-3) Real-time System : 기한(deadline) 맞추기

2) 선점 / 비선점 스케줄링

  • 선점(Preemptive) : OS가 CPU의 사용권을 선점할 수 있는 경우, 강제 회수하는 경우
  • 비선점(Non-Preemptive) : 프로세스 종료 or I/O 등의 이벤트가 있을 때까지 실행 보장 (처리시간 예측 어려움)

3) 프로세스 상태

  • 비선점 스케줄링 : Interrupt, Scheduler Dispatch
  • 선점 스케줄링 : I/O or Event Wait

* 프로세스의 상태 전이

✔ 승인(Admitted) : 프로세스 생성이 가능하여 승인됨.

✔ 스케줄러 디스패치(Scheduler Dispatch) : 준비 상태에 있는 프로세스 중 하나를 선택하여 실행시키는 것.

✔ 인터럽트(Interrupt) : 예외, 입출력, 이벤트 등이 발생하여 현재 실행 중인 프로세스를 준비 상태로 바꾸고, 해당 작업을 먼저 처리하는 것.

✔ 입출력 또는 이벤트 대기(I/O or Event wait) : 실행 중인 프로세스가 입출력이나 이벤트를 처리해야 하는 경우, 입출력/이벤트가 모두 끝날 때까지 대기 상태로 만드는 것.

✔ 입출력 또는 이벤트 완료(I/O or Event Completion) : 입출력/이벤트가 끝난 프로세스를 준비 상태로 전환하여 스케줄러에 의해 선택될 수 있도록 만드는 것.

4) CPU 스케줄링의 종류

4-1) 비선점 스케줄링

4-1.1) FCFS(First Come First Served)

  • 큐에 도착한 순서대로 CPU 할당
  • 실행시간이 짧은게 뒤로 가면 평균 대기 시간이 길어짐

4-2.2) SJF(Shortest Job First)

  • 수행시간이 가장 짧다고 판단되는 작업을 먼저 수행
  • FCFS보다 평균 대기 시간 감소, 짧은 작업에 유리

4-2) 선점 스케줄링

4-2.1) Priority Scheduling

  • 정적/동적으로 우선순위를 부여하여 우선순위가 높은 순서대로 처리
  • 우선 순위가 낮은 프로세스가 무한정 기다리는 Starvation(기아 상태)이 생길 수 잇음
  • Aging 방법으로 기아상태 문제 해결 가능

4-2.2) Round Robin

  • FCFS에 의해 프로세스들이 보내지면 각 프로세스는 동일한 시간의 Time Quantum(실행의 최소 단위 시간)만큼 CPU를 할당받음
  • 할당시간(Time Quantum)이 크면 FCFS와 같게 되고, 작으면 Conext Switching이 잦아져서 오버헤드 증가

4-2.3) 다단계 큐(Multilevel-Queue)

  • 작업들을 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용하는 기법
  • 우선순위가 낮은 큐들이 실행 못하는걸 방지하고자 각 큐마다 다른 Time Quantum을 설정해주는 방식 사용
  • 우선순위가 높은 큐는 작은 Time Quantum 할당. 우선순위가 낮은 큐는 큰 Time Quantum 할당.

4-2.4) 다단계 피드백 큐(Multilevel-Feedback-Queue)

  • 다단계 큐에서 자신의 Time Quantum을 다 채운 프로세스는 밑으로 내려가고 자신의 Time Quantum을 다 채우지 못한 프로세스는 원래 큐 그대로
  • 짧은 작업에 유리, 입출력 위주(Interrupt가 잦은) 작업에 우선권을 줌.
  • 처리 시간이 짧은 프로세스를 먼저 처리하기 때문에 Turnaround 평균 시간을 줄여줌.

5) CPU 스케줄링 척도

5-1) Response Time

  • 작업이 처음 실행되기까지 걸린 시간

5-2) Turnaround Time

  • 실행 시간과 대기 시간을 모두 합한 시간으로 작업이 완료될 때까지 걸린 시간