목차
- 목표
- 용어 정리
- 단일 프로세스 시스템
- 멀티 프로그래밍
- 멀티 태스킹
- 스레드
- 멀티 스레딩
- 멀티 스레딩 VS 멀티 프로세싱
- 참고 자료
목표
어떻게 여러 프로그램이 동시에 실행되는지 원리를 이해
용어 정리
프로그램(Program)
- 컴퓨터가 실행할 수 있는 명령어들의 집합
프로세스(Process)
- 컴퓨터에서 실행 중인 프로그램
- 각각의 프로세스는 독립된 메모리 공간을 할당 받는다
- 명령어들과 데이터를 가진다.
CPU(Central Processing Unit)
- 명령어를 실행하는 연산 장치
메인 메모리(Main Memory)
- 프로세스가 CPU에서 실행되기 위해 대기하는 곳
IO(Input/Output)
- 파일을 읽고 쓰기
- 네트워크의 어딘가와 데이터를 주고 받는 것
- 입출력 장치와 데이터를 주거나 받는 것
단일 프로세스 시스템
한 번에 하나의 프로그램만 실행됨
→ 원래 실행되던 프로그램을 종료하고 새로운 프로그램을 실행
단일 프로세스 시스템 단점
→ CPU 사용률이 좋지 않음
EX)
p1 : CPU에서 작업, IO 작업
단일 프로세스 시스템에서는 p1이 IO 작업을 하면 CPU에서 실행하던 p1을 종료하고 IO 작업을 한다.
이때 CPU는 아무 일도 하지 않고 쉬게 된다. → 사용률이 안 좋다.
멀티 프로그래밍(MultiProgramming)
단일 프로세스 시스템의 해결책
여러 개의 프로그램(프로세스)을 메모리에 올려놓고 동시에 실행시키자!
IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨
멀티프로그래밍의 목적
→ CPU 사용률을 극대화
멀티프로그래밍의 단점
→ CPU 사용 기간이 길어지면 다른 프로세스는 계속 대기
멀티태스킹(MultiTasking)
멀티프로그래밍의 단점의 해결책
→ 프로세스는 한번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하자!
멀티태스킹의 목적
→ 멀티프로그래밍과 마찬가지로 CPU 사용률을 극대화 하는데 CPU 점유 시간을 아주 짧게 만든다.
→ 프로세스의 응답 시간을 최소화 시키는데 목적이 있다.
→ 일반 사용자가 느끼는 체감은 여러 프로그램을 동시에 실행하는 느낌이다. 실제 동작은 1개의 프로세스만 CPU에서 동작하고 있지만
남아있는 아쉬움
- 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함
- 프로세스 컨텍스트 스위칭(p1→p2로 교체 작업)은 무거운 작업
- 프로세스끼리 데이터 공유가 까다롭다.
- 듀얼 코어가 등장했는데 잘 쓰고 싶음.
스레드(Thread)
멀티태스킹에서 느끼는 단점들을 해결하기 위한 해결책
멀티태스킹의 단점 복습
- 프로세스는 각각의 독립적인 메모리를 할당 받아서 데이터 공유가 까다롭다.
- 프로세스 컨텍스트 스위칭은 무거운 작업이다.
- 하나의 프로세스가 여러가지 작업을 수행하지는 못한다. (CPU에서 작업, IO 작업을 동시에)
스레드의 특징
- 프로세스는 한 개 이상의 스레드를 가질 수 있다.
- CPU에서 실행되는 단위(unit of execution) 예전에는 프로세스가 실행 단위
- 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.
- 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유 (데이터 공유가 쉽다)
메모리 구조 비교(싱글 스레드 vs 멀티 스레드)
싱글 스레드 메모리 구조 = 스레드 개념이 나오기 이전의 프로세스 메모리 구조
싱글 스레드 : Program Counter, Stack, Heap, …. 1개
멀티 스레드 : 스레드 n개 - (Stack n개, ProgramCounter n개) , 나머지 공유 영역 Heap, …. 1개
멀티 스레딩(MultiThreading)
코어가 1개인 경우
코어가 2개인 경우(듀얼 코어)
스레드가 1개의 CPU에서 동시에 병렬 처리 된다.
이런 종류의 시스템을 멀티스레딩(MultiThreading)이라고 한다.
멀티스레딩(MultiThreading)의 목적
→ 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적
확장된 멀티태스킹 개념
- 이전 개념: 프로세스 사이의 아주 짧은 cpu 점유 시간을 통한 컨테스트 스위칭
- 현재 개념: 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것
멀티스레딩 VS 멀티프로세싱
멀티프로세싱과 멀티스레딩은 둘 다 동시에 여러 작업을 수행하기 위한 기술이지만, 그 구현 방식과 사용 목적에 차이가 있다.
멀티프로세싱 (Multiprocessing)
멀티프로세싱은 여러 개의 프로세스를 사용하는 방식. 프로세스는 운영 체제에서 실행 중인 하나의 독립된 프로그램을 의미한다.
- 독립된 메모리 공간: 각 프로세스는 자신만의 메모리 공간을 가지므로, 프로세스 간에 메모리를 공유하지 않는다. 이는 프로세스 간의 충돌을 방지하고 안정성을 높이지만, 메모리 사용량이 증가할 수 있다.
- 병렬성: 멀티코어 시스템에서는 각 프로세스가 별도의 CPU 코어에서 병렬로 실행될 수 있어 실제 병렬 처리가 가능하다.
- 비용: 프로세스를 생성하고 관리하는 데 비교적 큰 비용이 든다.(메모리 및 CPU 자원).
멀티스레딩 (Multithreading)
멀티스레딩은 하나의 프로세스 내에서 여러 스레드를 사용하는 방식이다. 스레드는 프로세스 내에서 실행되는 작은 단위의 작업이다.
- 공유 메모리: 스레드들은 동일한 메모리 공간을 공유한다. 따라서, 스레드 간 통신이 빠르고 효율적이다. 하지만, 이를 잘못 관리하면 동기화 문제나 데이터 충돌이 발생할 수 있다.
- 병렬성 제한: 많은 언어에서는 GIL(Global Interpreter Lock) 같은 제한이 있어 실제로 동시에 여러 스레드가 실행되지 않는다. 그러나 I/O 바운드 작업에서는 멀티스레딩이 효과적일 수 있다.
- 비용: 스레드를 생성하고 관리하는 데 드는 비용이 상대적으로 적다.
주요 차이점
메모리 사용
- 멀티프로세싱 : 각 프로세스가 독립된 메모리 공간 사용
- 멀티스레딩 : 모든 스레드가 동일한 메모리 공간을 공유
병렬성
- 멀티프로세싱 : 멀티코어 CPU에서 실제 병렬 실행 가능
- 멀티스레딩 : 멀티코어 CPU에서 실제 병렬 실행 가능
오버헤드
- 멀티프로세싱 : 프로세스 생성 및 관리에 높은 오버헤드
- 멀티스레딩 : 스레드 생성 및 관리에 낮은 오버헤드
안정성
- 멀티프로세싱 : 프로세스가 독립적이어서 하나의 프로세스에 문제가 생겨도 다른 프로세스에 문제 영향을 미치지 않는다.
- 멀티스레딩 : 하나의 스레드에 문제가 생기면 프로세스 전체에 영향을 미칠 수 있다.
참고 자료
'Computer Sience > Operating System' 카테고리의 다른 글
컴퓨터 구조를 알아야 하는 이유 (1) | 2024.09.12 |
---|---|
스레드 컨텍스트 스위칭 vs 프로세스 컨텍스트 스위칭 (0) | 2024.05.18 |