1. CPU, Process, Memory
(1) CPU, Process, Memory
프로세스(Process) 는 컴퓨터에서 실행 중인 프로그램을 말하며 각 프로세스는 독립된 메모리(Memory) 공간을 할당받아 실행되기 위해 대기하고 있다. 프로세스는 명령어와 데이터 집합을 가지고 있는데, 이 때 프로세스의 명령어를 CPU(Central Process Unit) 에서 실행시킨다.
(2) I/O (Input/Output)
프로세스 는 CPU 연산 외에도 네트워크 또는 입출력 장치를 통해 데이터를 주고 받는다. 이와 같은 행위를 I/O(Input/Output) 라고 한다. I/O 는 외부에서 응답이 완료될 때까지 기다리는 blocking I/O, 응답이 올 때까지 기다리지 않고 다른 작업을 하는 Non-Blocking I/O 가 있다.
2. Multi-(Programming, Tasking, Processing, Threading)
(1) Multi-Programming
초기의 컴퓨터의 CPU 는 단일 코어만 존재했다. 한 코어는 한 프로세스만 실행할 수 있기 때문에 CPU 사용률이 좋지 못했다. 예를 들어 blocking I/O 와 같은 응답이 완료될 때까지 기다리는 경우에는 CPU 를 사용하지 못하기 때문이다. 이를 개선하고자 여러 프로세스를 메모리에 올려놓고 실행 중인 프로세스가 I/O 발생하면 CPU가 다른 프로세스 실행하는 방법을 멀티 프로그래밍(MultiProgramming) 이다.
(2) Multi-Tasking
멀티프로그래밍에는 단점이 존재했다. 특정 프로세스(Process01)이 계속해서 I/O 없이 CPU 를 점유하고 있다면 Process01 이 완료될 때까지 다른 프로세스(Process02) 는 CPU 를 점유할 수 없다. 이와 같은 문제를 해결하기 위한 방법 중 하나가 멀티태스킹(MultiTasking) 이다. 프로세스가 CPU 를 사용할 때 아주 짧은 시간(quantum) 만 실행할 수 있도록 한다.(시분할 방식) 즉, 하나의 CPU 가 두 프로세스를 번갈아가면서 실행한다.
멀티태스킹(MultiTasking) 은 사용자 입장에서 두 프로세스가 동시에 실행하는 것처럼 느끼도록 하는 장점이 있지만 아래와 같은 단점과 요구사항이 존재했다.
- 실제로 하나의 프로세스가 여러 작업을 수행하지 못한다.
- 듀얼 코어가 등장하면서 더욱 효율적으로 사용하고 싶었다. 하나의 프로세스에 하나의 쓰레드를 사용하면 하나의 작업 단위만 실행하기 때문에 효율성에 한계가 있었다.
- 프로세스의 컨텍스트 스위칭 비용은 크다.
- 이전에 멀티쓰레드가 도입되기 이전에는 작업량을 늘리기 위해서는 동일한 프로세스를 2개를 실행했다. 하지만 프로세스는 데이터 공유(e.g. data, code, heap) 을 공유하지 않아 IPC(Inter Process Communication) 이 필요하다. 공유하지 않는 데이터가 많으면 프로세스를 상태를 변경해야 할 레지스터의 수도 그만큼 많아지기 때문에 시스템에 부담을 준다.
(3) Multi-Threading
쓰레드(Thread) 는 CPU 에서 실행되는 단위(unit of execution) 을 말한다. 하나의 프로세스에는 최소 한 개 이상의 쓰레드를 가질 수 있고 쓰레드는 한 프로세스의 메모리 영역(e.g. code, data, heap) 을 공유한다. (stack 은 별도로 관리한다.)
이전 멀티태스킹 방식의 단점을 해결하고자 해서 도입했던 개념이 멀티 쓰레딩(Multi-Threading) 이다. 멀티 쓰레드는 한 프로세스가 동시에 여러 작업을 실행하는데 목적이 있다. 즉, 단일 코어 기준 한 프로세스에 2개 이상의 쓰레드 이상으로 관리되는 방식을 말한다. 멀티 쓰레드 방식은 아래와 같은 장점을 가진다.
- 시스템 자원 소모 감소
- 프로세스 생성 및 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 사용할 수 있다.
- Context Switching 이 빠르다.
- 스레드 간 프로세스 메모리 정보를 공유하기 때문에 프로세스 상태를 백업할 필요가 없다.
(같은 프로세스 속하므로 메모리 주소 공간이 바뀌지 않아 빠르다.) - MMU 의 메모리 주소 참조를 변경할 필요가 없고 TLB(Translation Look-aside Buffer) 를 비워줄 필요가 없다.
- 스레드 간 프로세스 메모리 정보를 공유하기 때문에 프로세스 상태를 백업할 필요가 없다.
(4) Multi-Processing
멀티 프로세싱(Multi-Processing) 은 CPU 의 코어가 2개 이상으로 프로세스의 작업을 처리하는 것을 말한다. 듀얼 코어가 한 프로세스의 두 쓰레드가 실행될 수 있고, 두 프로세스의 각 쓰레드가 실행하기도 한다.
Reference
'cs' 카테고리의 다른 글
캐시 정리 (Cache Summary) (0) | 2025.03.09 |
---|---|
해시 테이블(Hash Table) (0) | 2024.02.19 |
thread type & model (1) | 2024.02.15 |
가상 메모리 (Virtual Memory) (0) | 2024.01.26 |