CS/운영체제

[운영체제] 스레드는 무엇일까?

mhko411 2021. 9. 10. 18:41
728x90

먼저 프로세스에 대해서 공부를 했었다. 프로그램은 파일이 메모리에 올라가 있지 않고 디스크에 저장되어 있는 상태이며 프로그램을 실행시켰을 때 메모리에 올라가서 프로세스가 생성이 된다. 그렇다면 스레드는 무엇이고 어떻게 동작을 하는 것일까?


스레드가 생겨난 이유

스레드라는 개념이 생기기 전에는 프로그램이 시작되고 끝나기 전까지 하나의 프로세스를 사용하였다. 하지만 점점 프로세스가 복잡해졌고 하나의 프로세스로 프로그램을 실행시킬 수 없었다. 

그렇다고 프로세스를 여러 개 사용할 수도 없다. 왜냐하면 운영체제는 안정적인 운영을 위해 프로세스에게 할당한 메모리 내에서만 활동할 수 있도록 하였기 때문이다. 즉 하나의 프로그램에 여러 개의 프로세스를 사용하더라도 프로세스끼리 정보가 공유되지 않기 때문에 오류가 발생한다.

 

따라서 프로세스보다 더 작은 실행 단위인 스레드라는 개념이 나타났다. 스레드는 프로세스와 달리 메모리를 공유하여 프로세스 실행에 도움을 준다.

 

스레드의 동작 방식

프로세스는 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나눌 수 있다. 여러 개의 스레드들은 코드, 데이터, 힙 영역을 공유하며 스레드는 독자적인 스택 영역을 확보하게 된다. 그렇기 때문에 스레드 A에서 오류가 발생한다면 같은 프로세스 내의 스레드 B에도 영향을 끼치게 된다. 이것이 프로세스와 스레드의 큰 차이점 중 하나이다.

 

모든 프로세스에는 하나 이상의 스레드가 존재하며 CPU는 스레드를 최소 작업 단위로 여기며 프로세스를 실행시킨다. 하나의 CPU에서 하나의 스레드를 처리하다가 다른 스레드로 교체를 해야한다. 만약 현재 선점하고 있는 스레드의 작업이 완료되지 않았다면 다음에 선점할 때 어디까지 진행했었는지 기억할 필요가 있다. 스레드는 고유의 레지스터를 갖고 현재 진행된 상황을 레지스터에 기록하게 된다.