[컴퓨터 기초] thread, process, context switching 스레드(Thread)란 컨텍스트 스위칭(Context Switching)

먼저 컴퓨터에서 프로그램을 실행시키는 작업을 상상해볼께요.
배틀그라운드를 한다고 할때 프로그램을 실행시키죠?
배틀그라운드 프로그램을 실행하는겁니다.
프로그램은 즉, 어떠한 작업을 위해 실행할 수 있는 파일을 말합니다.

그 프로그램이 실행되고 있는 상태를 프로세스(Process)라고 합니다.
즉, 프로세스는 메모리에 올라와 CPU를 할당받고 프로그램이 실행되고 있는 상태 또는 프로세스는 운영제체로 부터 자원을 할당받는 작업의 단위, 컴퓨터에서 실행중인 컴퓨터 프로그램을 의미합니다.


스레드(Thread)란

스레드란 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다. 즉, 프로세스 내에서 동작되는 여러 실행의 흐름입니다. 기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 같이 생성되는데 이를 메인스레드라고 부릅니다. 스레드를 추가로 생성하지 않는한 모든 프로그램 코드는 메인스레드에서 실행됩니다.

스레드의 특징과 멀티스레딩의 장단점

Imgur

스레드는 프로세스 내에서 각각 Stack만 따로 할당을 받고 Code, Data, Heap 영역을 공유합니다. 이러한 특징은 여러가지 장점을 가지게 됩니다. 먼저 메모리를 공유하다보니 독립적인 프로세스와는 달리 스레드간 데이터를 주고 받는게 간단해지고 시스템 자원 소모가 줄어들게 되고 응답시간 또한 단축됩니다. 멀티프로세싱의 단점인 Context Switching의 오버헤드에 대한 부분을 해결해 줍니다.

프로세스와는 달리 Code, Data, Heap 영역을 공유하므로 Stack 영역만 처리를 하면 되고 그 결과 처리 비용이 감소하게 됩니다. 하지만 여러 스레드가 동시에 작업을 하다보면 공유된 데이터를 서로 사용하다가 충돌이 일어날 가능성이 크다는 단점이 있습니다.


컨텍스트 스위칭(Context Switching)

예를 들어 Running상태인 A프로세스Ready 상태인 B프로세스있다고 가정합니다. 이 둘의 프로세스는 인터럽트 요청에 의해 서로 상태가 전이된다고 가정합니다. A프로세스가 Ready, B프로세스는 Running 상태가 된다는 겁니다.
먼저 실행중인 A프세스에 대한 데이터는 PCB(Process Control Block)에 저장되어있을 겁니다. 하지만 이제 B프로세스가 실행되어야 하기 때문에 A는 레지스터를 B에 양보해주어야 합니다. 이때 A프로세스의 데이터를 생각해봐야합니다. A의 프로세스 데이터는 B가 실행을 마친 후에 A가 실행될 수 있으므로 계속 가지고 있어야합니다.
즉, 현재 레지스터에 존재하는 A에 대한 데이터는 메모리에 저장되어야 합니다.
Imgur

위의 내용을 요약해보면 프로세스를 이것저것 우선순위에 따라 변경하기 위해서는 프로세스 데이터를 레지스터와 메모리 사이를 왔다갔다 하며 복사해야 하는데 이런 일련의 과정Context Switching(컨텍스트 스위칭)이라고 합니다. Context Switching은 사실 프로세스가 가지고 있는 스레드를 처리하는 과정입니다.

그런데 이 컨텍스트 스위칭이 일어나는 동안 CPU는 아무런 일을 하지 못하며, 컨텍스트 스위칭은 CPU에 많은 부하를 가져다 줍니다. 이는 멀티 프로세싱의 단점이며 이러한 컨텍스트 스위칭의 시간은 레지스터의 수나 메모리의 속도 등에 좌우됩니다.