profile image

L o a d i n g . . .

프로세스 (Process)

- 메인 메모리에 할당 되어 실행중인 상태인 프로그램

- 프로그램은 일반적으로 하드디스크 (보조기억장치)에 저장되어 아무 일도 하지 않는 상태임

- 프로세스는 실행 하면서 Pointer, Data, Text, Register 등이 끊임없이 변함

- Job, Task 등으로 불리기도 함


프로세스 상태

  • New: 프로그램이 메인 메모리에 할당 됨
  • Ready: 할당된 프로그램이 초기화와 같은 작업을 통해 실행되기 위한 모든 준비를 마침
  • Running: CPU가 해당 프로세스를 실행
  • Waiting: 프로세스가 끝나지 않은 시점에서 I/O (입력/출력)으로 인해 CPU를 사용하지 않고 다른 작업을 함

// 해당 작업이 끝나면 ready 상태로 돌아가야 CPU에 의해 실행 가능

  • Terminated: 프로세스 종료

PCB (Process Control Block)

- 프로세스에 대한 모든 정보가 모여있는 곳

- 학생에게 학생증이 있다면 프로세스에겐 PCB가 있다고 생각하면 됨

- PCB 안에는 프로세스의 상태, 프로세스 번호 (PID), 해당 프로세스의 프로그램 카운터 (PC), 레지스터 값, MMU 정보, CPU 점유 시간 등이 포함 되어 있음

- CPU는 여러 프로세스를 중간 중간 바꿔가며 수행하므로, 수행중인 프로세스가 나갈 때, 이 프로세스의 정보를 어딘가에 저장하고 있어야 다음에 이 프로세스를 수행할 때 이전에 수행한 그 다음부터 이어서 작업 할 수 있음 (이러한 정보를 저장하는 것이 PCB)


프로세스 큐 (Queue)

- 프로세스는 수행하면서 상태가 여러 번 변하므로 서비스를 받아야 하는 곳이 다르고, 일반적으로 프로세스는 여러 개가 한 번에 수행되므로 그에 따른 순서가 필요함, 이러한 순서를 대기하는 곳이 큐 (Queue)

- 운영체제가 이해하는 프로세스는 PCB이므로, 스케줄링 큐는 PCB의 Linked List로 관리되고 있음

  • Job Queue: 하드디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐
  • Ready Queue: CPU 점유 순서를 기다리는 큐
  • Device Queue: I/O를 하기 위한 여러 장치가 있는데, 각 장치를 기다리는 큐가 각각 존재

- 순서를 기다리는 공간이 있다면 이 순서를 정해주는 알고리즘이 있어야 하는데, 이것이 스케줄링 (Scheduling)


멀티 프로그래밍 (Multi-Programming)

- 단일 프로세서 (CPU) 환경에서 여러 개의 프로세스가 동시에 실행되는 것

// 실제로 동시에 실행되지는 않음

- 여러 프로세스가 실행되려면 이 프로세스들이 모두 메인 메모리에 존재하고 있어야 함


Degree of Multi-programming

- 멀티프로그래밍의 정도

- 현재 메모리에 할당되어 있는 프로세스 개수임


I/O bound process VS CPU bound process

- I/O bound process: 해당 프로세스에서 I/O 작업이 차지하는 비중이 높은 프로세스

- CPU bound process: 해당 프로세스에서 CPU 작업 (계산)이 차지하는 비중이 높은 프로세스

- Job Scheduler는 I/O bound process 와 CPU bound process를 적절히 분배해서 메모리에 할당해야 함


Scheduler

- Long Term Scheduler, Midum Term Scheduler, Short Term Scheduler 로 나눌 수 있음

- Long Term Scheduler: Job Queue에 할당 될 프로세스 순서 정할 때 사용

- Medium Term Scheduler: 주기적으로 메인 메모리의 프로세스 중 보조 기억 장치로 옮길 프로세스를 찾을 때 사용

- Swapping: 메인 메모리에서 장시간으로 사용하지 않는 프로세스를 하드 디스크로 옮기고, 나중에 이 프로세스가 다시 사용되려고 하면 하드디스크에서 해당 프로세스를 다시 메인 메모리로 할당함


Context Switching

- CPU가 한 프로세스에서 다른 프로세스로 옮겨가는 것

- 어떤 프로세스 하나를 실행시키다가 멈추고 다른 프로세스를 실행 시키는 것

- Dispatcher: CPU의 내부 데이터를 이전 프로세스 데이터에서 새로 실행되는 프로세스로 바꿔주는 역할

- 스케줄러와 디스패처가 컨텍스트 스위칭 때 실행되는데, 이런 작업이 발생 될 때마다 Overhead가 발생하므로, 이 두 가지 역할을 하는 코드들의 효율성이 중요함


참고

1. https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-5.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B4%80%EB%A6%AC

2. https://velog.io/@sierra9707/%EB%B0%B1%EC%97%94%EB%93%9C-%EB%A1%9C%EB%93%9C%EB%A7%B5-OS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B4%80%EB%A6%AC

복사했습니다!