multi tasking은 컴퓨터 시스템 내에 여러 가지 일들을 동시에 실행시키는 기법입니다. 예시로 컴퓨터로 음악을 들으며 자료조사를 하고 발표자료를 만들 수 있는 것처럼 한 번에 3가지 일을 동시에 처리 가능한 이유도 현대 컴퓨터가 multi tasking을 지원하기 때문입니다.
초기의 multi tasking은 process를 사용하여 구현하였습니다. 하지만 process는 fork()를 이용하여 자식을 생성하기 때문에 한번 process를 만드는 것은 컴퓨터에게 많은 시간과 메모리를 필요로 했습니다. 다음은 process로 multi tasking 구현 시 발생하는 문제점입니다.
- 프로세스 생성 큰 오버헤드: fork()를 실행할 때에 메모리 공간 할당, 부모 프로세스의 메모리를 복제, PCB를 생성 등 프로세스를 초기화하는 데 시간이 많이 걸린다.
- context switching의 큰 오버헤드: 현재 process의 PCB를 저장하고, 실행될 process의 PCB를 불러오는데 시간이 오래 걸린다.
- 프로세스 간의 통신 어려움: 독립된 메모리를 사용하므로 process 간 통신에 어려움이 있다.
위와 같은 이유로 조금 더 작고 데이터 교환이 쉬운 새로운 실행 단위가 필요하게 되었는데 이때, 제안된 개념이 바로 thread입니다. 다음은 thread의 등장으로 해결한 문제들입니다.
- process보다 작은 실행 단위
- 생성과 소멸에 따른 오버헤드 감소
- 빠른 context switching
- 보다 쉬운 실행 단위 간 통신
Thread는 실행 단위이며 스케줄링 단위이다.
thread는 응용프로그램에서 프로그래머가 만든 작업 단위이며, 운영체제에게는 스케줄링 단위입니다. thread는 process와 마찬가지로 코드, 데이터, 힙, 스택 영역을 가집니다. 운영체제에게 thread가 스케줄링 단위라는 것은 thread도 process의 PCB와 같이 TCB(Thread Control Block) 구조체를 가지고 관리가 된다는 뜻입니다. 즉, 현대의 컴퓨터에서 multi tasking을 구현하고 싶다면 각 작업들을 process로 구현하는 대신 thread를 사용하면 됩니다.
Process는 Thread들의 컨테이너이다.
thread의 등장으로 process의 개념이 완전히 사라진 것은 아닙니다. 현대의 컴퓨터에서 process는 thread들을 담아두는 컨테이너로 작용합니다. 이 말은 thread는 독립적으로 존재할 수 없고 process 안에 존재하도록 강제됩니다. 다음은 현대 컴퓨터의 process를 시각화한 것입니다.
Process는 Thread들의 공유 메모리 제공한다.
process는 단순히 thread들을 담아두는 것을 넘어 생성된 thread 간에 공유할 수 있는 공간을 제공합니다. 해당 공간은 기존의 process가 사용하는 코드, 데이터, 힙, 스택 영역을 활용합니다. 따라서 thread는 process에 정의되어 있는 함수와 전역 변수에 모두 접근할 수 있습니다. 또한 thread는 process의 힙을 공유하기 때문에 임의의 thread가 할당받은 공간은 다른 thread들이 접근할 수 있습니다.
따라서 thread를 이용하면 기존의 process가 가지고 있던 독립된 메모리로 인한 통신 어려움을 완벽하게 해결할 수 있습니다. 다음은 하나의 process에서 3개의 thread가 메모리를 공유하는 것을 시각화한 것입니다.
Thread가 실행할 작업은 함수로 정의된다.
전역 변수를 공유하는 것, 같은 메모리를 공유하는 것이 가능한 이유는 process처럼 같은 코드를 복사한 다른 process를 생성하여 코드를 실행하는 방식이 아니라 함수로 thread들을 정의하기 때문입니다. 그렇다고 모든 함수가 thread가 되지는 않습니다. 개발자는 thread를 함수로 정의하고, 운영체제에게 해당 함수를 thread로 만들어줄 것을 요청해야합니다.
참고문헌 - 명품 운영체제 / 황기태 저 / 2021 / 생능출판사
'취업을 준비하며 정리하는 컴퓨터 지식 > Operating System' 카테고리의 다른 글
[Operating System] 프로세스는 뭐야? (2) | 2022.03.23 |
---|---|
[Operating System] 운영체제 정리 (0) | 2021.12.29 |