프로그램 동시 실행
JeongSeulho
2023년 02월 01일
준비중...
클립보드로 복사
사전 지식 및 용어 정리
프로세스
- 컴퓨터에서 실행 중인 프로그램
- 각 프로세스는 독립된 메모리 공간을 할당 받음
- 메모리 공간에 명령어와 데이터를 가짐
CPU
- 명령어를 실행하는 장치
메인 메모리
- 프로세스가 CPU에서 실행되기 위해 대기하는 곳
I/O
- 파일을 읽고 쓰는 것
- 네트워크로 어딘가와 데이터를 통신하는 것
- 키보드, 마우스 등 입출력 장치와 통신하는 것
단일 프로세스 시스템
- 한번에 하나의 프로세스만 실행
- 프로세스가 있으면 끝나야 다음 프로세스가 실행
- 문제 : 만약 프로세스가
I/O
작업을 한다면 CPU는 아무것도 안하고 대기 => CPU 사용률이 나쁨
멀티 프로그래밍
- 여러 프로그램이 동시에 실행
- CPU 사용률 극대화가 목적, 단일 프로세스의 CPU 사용률을 높이기 위해 고안
- 문제 해결 : 여러 프로그램을 메모리에 올리고 한 프로세스에서 CPU를 사용하다가
I/O
작업을 하면 다른 프로세스가 CPU를 사용할 수 있도록 함 - 문제 : 만약 한 프로세스의 CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기함 => 응답 시간이 길어짐
멀티 태스킹
- 멀티 프로그래밍에 더하여 CPU 사용 시간(
CPU Time
)을 아주 짧게 분할 - 프로세스의 응답 시간 최소화가 목적, 유저는 어떤 프로세스에 대해서도 즉각적인 응답을 받을 수 있도록 함
- 문제 해결 : 프로세스는 한번 CPU를 사용할 때, 아주 짧은 시간만 사용하도록하며 프로세스들이 번갈아가며 CPU를 사용하도록 함 => 응답 시간이 줄어듦
위 방식들의 한계점
- 하나의 프로세스가 여러 작업을 수행하지는 못함(프로세스를 여러개 띄우면 여러 작업할 수 있지만 단점이 많음음)
- 프로세스를 여러개 띄워서 작업하는 것의 단점
- 컨텍스트 스위칭 비용
- 프로세스간 데이터 공유가 어려움
- 듀얼 코어 이상의 CPU가 나오면서 여러 코어를 더 잘쓸 수 있도록 하는 방식이 필요
스레드
- 한 프로세스에서 여러 작업을 동시에 실행하기 위해 사용 => 각 작업을 담당하기 위한 스레드 등장
- 같은 프로세스에서 스레드 간의 컨텍스트 스위칭은 가볍다
- 같은 프로세스의 스레드 간의 메모리 영역을 공유 => 데이터 공유가 쉬움
- 각 프로세스는 최소 1개 이상의 스레드 보유
- CPU에서 실행되는 단위는 프로세스에서 스레드로 변경
싱글 스레드와 멀티 스레드 메모리 구조
- 멀티 스레드는 프로세스에 할당된 메모리 영역 공유
- 하지만 각 스레드들 만의 고유한 부분도 있음(각 스레드의 스택 영역, 각 스레드의 프로그램 카운터)
멀티 스레딩
- 하나의 프로세스가 여러 작업(스레드)을 실행하기 위해 사용
확장된 멀티 태스킹
- 여러 프로세스와 더불어 여러 스레드가 아주 짧게
CPU Time
을 나눠가짐
멀티 프로세싱
- 2개 이상의 코어나 프로세서(
CPU
)를 활용하는 시스템