CS
프로세스부터 멀티 스레드까지
YunH2
2023. 7. 6. 02:23
프로그램
- 컴퓨터가 실행할 수 있는 명령어들의 집합
프로세스
- 컴퓨터에서 실행 중인프로그램
- 각각의 프로세스는 독립된 메모리 공강을 할당 받음
CPU(central processing unit)
- 명령어를 실행하는 연산장치
메인 메모리
- 프로세스가 CPU에서 실행되기 위해 대기하는 곳
단일 프로세스 시스템
- 한 번에 하나의 프로그램만 실행
- CPU사용률이 좋지 않음
- ex) P1이라는 프로세스가 실행 중일때 P1이 I/O 작업을 하는 동안은 CPU가 놀게된다
해결책! -> 멀티 프로그래밍이 탄생
멀티 프로그래밍
- CPU 사용률을 극대화 시키는 것이 목적
- 여러 개의 프로그램을 동시에 실행
- 실행중인 프로세스에서 I/O작업이 발생하면 다른 프로세스가 CPU에서 실행 반복
- 단점 : CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기하게 된다
해결책! -> 멀티 태스킹이 탄생!
멀티 태스킹
- 프로세스의 응답 시간을 최소화 시키는 것이 목적 (마치 여러 프로그램이 동시에 실행되는 것 처럼)
- 프로세스가 한번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 실행되고 다른 프로세스 실행 반복
스레드가 등장 하면서 개념이 확장
- 여러 프로세스와 여러 스레드가 아주 짧게 쪼게진 cpu time을 나눠 갖는 것
아쉬움
1. 하나의 프로세스가 동시에 여러 작업을 수행 하지는 못함
2. 프로세스의 컨텍스트 스위칭은 무거운 작업
3. 프로세스끼리 데이터 공유가 까다로움
해결책! -> 스레드
스레드
- 프로세스는 한 개 이상의 스레드를 가질 수 있다
- CPU에서 실행되는 단위 ( 프로세스는 기본적으로 하나의 스레드를 가짐 )
- 같은 프로세스의 스레드들끼리는 컨텍스트 스위칭이 가볍다
- 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유한다 (데이터 공유가 쉽다!)
멀티 스레딩
- 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적
- Heap영역 공유
- Stack영역은 각각의 영역
- Program counter : 다음번에 실행 되어야될 명령어가 있는 메모리 주소
듀얼 코어 이상을 가진 CPU일 경우 스레드는 각각의 코어에서 동시 실행이 된다!
멀티 프로세싱
- 두 개 이상의 프로세스나 코어를 활용하는 시스템
참고 : 쉬운코드 https://www.youtube.com/watch?v=QmtYKZC0lMU