본문 바로가기
컴퓨터공학기초 개념/운영체제

24. 스레드란? (thread 개념)

by devraphy 2021. 4. 29.

0. 프로세스 부분을 끝낸 기념으로... 

- 컴퓨터 시스템은 다음과 같이 이루어져 있다. 

- Windows나 Mac과 같은 시스템 SW 또는 OS를 만드는 사람을 시스템 엔지니어라고 부른다. 

- 시스템 엔지니어가 만든 함수(api, library, etc)의 사용법을 익히고 응용하는 것이 응용 프로그래머다.

- 시스템 엔지니어가 만든 함수를 익히는 대표적인 방법 중 하나가 python이나 java같은 언어를 배우는 것이다. 

- 좋은 개발자가 되기 위해서는 응용 프로그램의 영역뿐만 아니라 시스템 영역을 아는 것이 핵심이다. 

- 모든것을 한번에 완벽히 이해하기는 힘들지만, 좋은 개발자가 되기 위한 밑거름을 만들고 있다고 생각하자.  


1. Thread 개념

  • 스레드는 다른 이름으로 Light Weight Process 라고도 한다. 
  • 이 이름처럼, 프로세스지만 기존의 프로세스 보다 가벼운 느낌이라고 이해하면 좋을 것 같다. 
  • 프로세스 내부에 존재하며 프로세스의 작업을 수행하는 역할을 한다.
  • 스레드는 하나의 프로세스 안에 여러개를 생성할 수 있다. 
  • 스레드는 동시에 실행이 가능하며, 하나의 프로세스 안에 있기 때문에 프로세스 내부의 스레드간 데이터 접근이 가능하다.
  • 즉, IPC를 사용할 필요가 없다. 

 

a) Thread의 구조와 동작

  • 그림에는 Stack에 스레드가 위치한 것처럼 보이지만, 사실 스레드는 Heap과 Stack 사이의 공간에 있다.
  • 스레드는 Stack으로 구현되어 있으며, 각 스레드마다 SP와 PC를 갖고있다. 
  • 이해가 쉽도록 돕자면, 간단하게 Stack에 할당되어 있는 함수영역처럼 동작한다고 말할 수 있다.
  • 각 스레드는 할당된 영역을 갖고 있으나, 나머지 메모리(Heap, Data, Code)영역은 공유한다.
  • 스레드는 한 프로세스의 메모리 영역을 공유하기 때문에, IPC 없이 스레드간 데이터 접근이 가능하다.

 

b) 프로세스와 스레드의 구조적 차이

 

 

c) 다중 스레드(Multi Thread)의 구조

 

 

d) 멀티 프로세싱과 스레드

  • 멀티 테스킹(Multi Tasking): 하나의 CPU를 활용하여 여러개의 프로세스를 처리하는 것
  • 멀티 프로세싱(Multi Processing): 여러 CPU를 활용하여 하나 이상의 프로세스를 병렬처리하여 실행 및 처리 속도를 높이는 것

- 멀티 테스킹은 Context Switching 기법을 사용하여 구현할 수 있다. 

- 멀티 프로세싱은 하나의 프로세스를 병렬처리 하는 것인데, 이를 위해서는 프로세스를 여러개로 쪼개야 한다. 

- 여기서 스레드의 역할이 필요한 것이다. 하나의 프로세스에 여러개의 스레드를 생성하면 멀티 프로세싱이 가능하다. 

- 최근 CPU는 멀티코어를 가지고 있다. 스레드는 멀티코어의 활용도를 높이기에 가장 좋은 방법이다. 

 

 

e) 운영체제의 구조에 따른 스레드 활용

- 운영체제를 어떻게 만드냐에 따라 다음과 같은 종류의 처리구조를 갖는다. 

 

- 요즘 운영체제는 멀티 프로세싱을 지원하는 구조를 갖는다. 

댓글