cs
[혼공운영체제] 스레드
이쟝
2023. 5. 5. 16:37
인프런의 개발자를 위한 컴퓨터 공학1 : 혼자 공부하는 컴퓨터 구조 + 운영체제 강의를 듣고, 학습 및 요약
스레드
- 프로세스를 구성하는 실행 흐름의 단위
- 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다.
- 한 프로세스를 여러 개의 스레드로 동시에 실행할 수 있다.
프로세스와 스레드
- 단일 스레드 프로세스 : 실행 흐름이 하나인 프로세스
- 멀티 스레드 프로세스 : 실행 흐름이 여러 개인 프로세스(프로세스를 이루는 여러 명령어 동시 실행 가능)
스레드의 구성 요소
- 스레드 ID, 프로그램 카운터를 비롯한 레지스터 값, 스택 등 실행에 필요한 최소한의 정보
- .실제로는 CPU한테 처리해야 할 작업을 전달할 때 CPU를 할당받아서 실행되는 단위는 프로세스 단위가 아니라 각각의 스레드인 경우가 많다.(최근에는)
멀티 프로세스와 멀티 스레드
동일한 작업을 수행하는 단일 스레드 프로세스 여러 개 실행 vs 하나의 프로세스를 여러 스레드로 실행할 때 어떤 차이가 있을까?
- 프로세스끼리는 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유하면서 실행된다.
- 프로세스를 fork 하면 코드/데이터/힙 영역 등 모든 자원이 복제되어 저장된다.
- 저장된 메모리 주소를 제외하면 모든 것이 동일한 프로세스 두 개가 통째로 메모리에 적재된다.
- fork를 세 번 네 번 하면 같은 프로세스가 통째로 세 개 네 개 적재 된다.
- 스레드들은 각기 다른 스레드 ID, (별도의 실행을 위해 꼭 필요한) 프로그램 카운터 값을 포함한 레지스터 값, 스택을 가질 뿐 프로세스가 가지는 자원을 공유한다.
- 프로세스끼리는 자원을 공유하지 않는다. => 남남처럼 독립적으로 실행된다.
- 프로세스 간에도 자원을 주고받을 수 있다. : 프로세스 간 통신(IPC)
- 파일을 통한 프로세스 간 통신, 공유 메모리를 통한 프로세스 간 통신
- 스레드는 프로세스의 자원을 공유한다. => 때로는 문제가 될 수도
일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행하게 됩니다.
하지만 멀티 스레드(multi thread)란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미합니다.
또한, 멀티 프로세스(multi process)는 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미합니다.