1. 다중 프로그래밍 (Multiprogramming)

- 정의: 여러 작업을 메모리에 동시에 올려두고, CPU가 놀지 않도록 다른 작업을 실행하는 기법
- 예를 들어, CPU가 입출력 장치 작업(프린터기 복사)을 하고 있다고 하면, 이는 매우 오래 걸리는 작업이기 때문에 해당 프로세스를 Waiting 상태로 돌림(이후, CPU가 입출력 완료 인터럽트를 받게 되면 다시 Ready 상태로 전환).
- 프로세스가 Waiting 상태일 경우, CPU는 놀고 있는 상태이기 때문에, 메모리에 있는 다른 프로세스의 작업을 수행(CPU가 입출력 완료 인터럽트를 받으면 이 작업도 중지하여, Ready 상태로 전환) - 장점:
- CPU 사용률을 높임
- I/O 때문에 하나의 작업이 대기할 때 → 다른 작업이 CPU 사용 가능
- 단점 (단일 작업 기법의 경우):
- I/O 동안 CPU가 놀게 됨 (유휴 상태 발생)
- CPU와 I/O 장치를 동시에 사용 못 함
2. 시분할 시스템 (Timesharing) / 멀티태스킹 (Multitasking)
- 정의: 여러 프로세스(또는 사용자)가 CPU 시간을 분할해서 번갈아 사용하는 방식
- 특징:
- CPU를 짧은 시간 단위로 나눠 각 프로세스에 배분
- 빠른 전환 덕분에 동시 실행되는 것처럼 보임
- 다중 사용자 시스템 지원:
- 여러 사용자가 하나의 시스템을 공유하지만, 마치 자신이 단독으로 사용하는 것처럼 느끼게 됨(실제로는, CPU가 여러 사용자의 요청을 빠르게 전환하면서 처리)
3. 프로세스 상태 (Process States)
| 상태 | 설명 |
| New | 프로세스가 생성되는 중 |
| Ready | 실행 준비 완료, CPU 할당 대기 중 |
| Running | CPU를 사용 중인 상태 (오직 1개만 존재) |
| Waiting | I/O 같은 이벤트를 기다리는 상태 |
| Terminated | 프로세스 실행 종료 상태 |
- 한순간에 CPU는 오직 하나의 프로세스만 실행할 수 있음
- 나머지는 Ready 또는 Waiting 상태에 있음

- New 상태에서 프로세스가 생성됨.
- 프로세스가 생성되면서 메모리의 비어 있는 공간을 찾아서, 이 프로세스의 PCB에 주소를 할당해서 저장해줌. - Ready 상태에서 요청이 들어온 프로세스에 대해 실행 권한이 있는지 판단 후 통과
- 다중 사용자 프로그램(리눅스) 에서 다른 사용자가 내 프로세스를 실행하면 안되게 때문에 권한 확인(파일의 rwx 권한 확인) - Running 상태에서는 프로세스의 작업을 처리함
- 입출력 작업 등 오래 걸리는 작업의 경우 waiting 상태로 바꿔, 입출력 작업 완료 인터럽트를 받을 때까지 대기
- 대기하는 동안에는 CPU는 다른 프로세스 작업을 처리
- 이 과정에서 프로세스의 PCB에 저장된 프로세스의 주소값을 PC에 넘겨주는데, 인터럽트 요청으로 인해 프로세스가 실행되는 경우에는 그 프로세스의 PCB에서 주소값을 가져와 PC에 저장함.( 어떠한 프로세스를 우선적으로 처리할 것인가는 scheduler dispatch의 프로그래밍 내용에 따라 판단) - Waiting 상태에서는 입출력 완료 인터럽트를 받을 때까지 대기
- 인터럽트를 받으면 Running이 아닌 Ready로 돌아가서 scheduler dispatch의 우선순위에 따라 다시 실행될 프로세스를 선택 - Terminated 상태에서는 작업이 완료된 프로세스를 제거함.
4. 프로세스 상태 변화 예시( I/O 요청 발생 )

- PID=1이 CPU에서 실행 중 (Running)
- I/O 요청 발생 → Waiting 상태로 전환
- Ready 상태에 있던 PID=2가 CPU를 할당받아 Running 상태로 전환(CPU가 놀게 하지 않기 위함)

- PID=1은 I/O 완료 후 인터럽트를 통해 Ready 상태로 복귀
- 현재 CPU를 사용 중이던 PID=2가 일정 시간 사용 후 Ready 상태로 이동
- PID=3이 CPU를 할당받아 Running 상태로 전환(스케줄러가 PID 3번을 다음 작업으로 선택)
➡️ 여기서 포인트는 CPU의 프로세스 할당은 Ready 상태 중에서 스케줄러가 선택한다는 점!( 어떤 기준으로 선택하는지는 scheduler의 프로그래밍된 내용에 따라 달라짐 )
'OS' 카테고리의 다른 글
| [운영체제] 프로세스 종료와 통신 (1) | 2025.04.02 |
|---|---|
| [운영체제] 프로세스의 스케줄링(Scheduling) 이란? (0) | 2025.03.31 |
| [운영체제] 프로세스(Process) 란? (0) | 2025.03.24 |
| [운영체제] 사용자 인터페이스와 운영체제 (0) | 2025.03.24 |
| [운영체제] 시스템 호출(System Call)과 운영체제 (0) | 2025.03.19 |