본문 바로가기
Computer Science

[OS] Thread? Process?

by Limm_jk 2020. 6. 23.

운영체제에 대하여 공부하다 보면 뭔가 헷갈리는 용어들이 많습니다.

용어 정리를 제대로 하지 않고 넘어가면 OS의 흐름을 타고 나갈 때 '그래서 스레드랑 프로세스가 다른 게 뭔데..?'라는 생각을 하기 쉬운 것 같아요. 이번 기회에 한번 함께 정리해봅시다!


1. 프로세스 - Process

프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말해요. 운영체제로부터 주소 공간, 파일, 메모리 등을 할당받는 것들을 총칭하여 프로세스라고 합니다.

 

너무 어려운데 간단히 생각하면 우리가 일반적으로 프로그램이라고 칭하는 친구들이 실행되어있으면 그게 프로세스에요. 즉, 프로세스를 간단히 표현하면 프로세스 = 실행 중인 프로그램이라고 할 수 있겠네요! 프로그램이 실행되면 프로세스가 생성되는 것이죠.

 

구체적으로 살펴보면 프로세스는 함수의 매개변수, 복귀 주소와 로컬 변수와 같은 임시 자료를 갖는 프로세스 스택과 전역 변수들을 수록하는 데이터 섹션을 모두 포함합니다. 또한 프로세스는 프로세스 실행 중에 동적으로 할당되는 메모리인 힙 또한 포함해요.

프로세스 제어 블록(Process Control Block == PCB)
PCB는 프로세스의 많은 정보를 저장하는 자료구조예요. 거의 프로세스 그 자체라고 볼 수 있죠.
OS는 프로세스를 관리하기 위하여 프로세스를 생성함과 동시에 PCB를 만들어요. 그리고 메인 메모리에 유지하며 프로세스 그 자체를 정의하는 역할을 하죠. 프로세스의 종료와 함께 사라지고요.

PCB의 진가는 아래와 같은 상황에서 보여집니다.
한 프로세스가 CPU를 할당받아서 작업을 처리하다가도, 하나의 프로세스만 진행할 수 없으므로 다른 프로세스로의 전환이 일어날 수 있습니다. 이때, 그냥 전환을 해버리면 다시 실행하던 위치로 돌아올 수 없겠죠?? 그래서 프로세스의 전환이 일어날 때, PCB에 진행 중인 정보들을 모두 저장하고 다른 프로세스로 전환합니다. 그리고 이후, 다시 CPU가 할당될 때 PCB에 있는 정보를 꺼내와서 진행 중이던 위치부터 계속 진행하게 됩니다! 

+@ PCB에 저장되는 정보

  • 프로세스 식별자(Process ID, PID) : 프로세스 식별번호
  • 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
  • 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소
  • CPU 레지스터
  • CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
  • 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
  • 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
  • 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정번호 등

 

2. 프로그램 - Program 

흔히 프로그램이라는 말을 많이 써서 위의 프로세스랑 많이 헷갈리는데, 프로그램은 그저 실행을 위한 파일들을 뜻해요.

간단히 정리하고 넘어가자면, 프로그램은 일반적으로 보조기억장치(하드 디스크, SSD)에 저장되어 있는 실행코드(명령어)와 정적인 데이터를 의미한다고 볼 수 있겠네요!

 

3. 프로세서 - Processor

프로세서 프로세스 Process Processor... OR이니 프로세스를 실행하게 해주는 친구인가...?

 

음.. 틀린 말은 아니네요! 하지만 좀 더 확실히 알 필요가 있는 내용이에요. 프로세서는 소프트웨어적 측면과 하드웨어적 측면으로 나뉘어요. 확실한 차이가 있으니 나누어서 볼게요.

 

> 하드웨어적 측면

  • 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛 / 논리회로
  • 흔히 CPU를 의미함.
  • 노트북 등에 들어가는 범용 프로세서 이외에도 굉장히 많은 종류의 프로세서가 있음.

> 소프트웨어적 측면

  • 데이터의 포맷을 변경하는 역할을 수행하는 데이터 프로세싱 시스템을 의미함.
  • 간단한 예시를 들어보면, 우리가 많이 사용하는 워드 프로세서가 여기에 해당됨.

OS를 공부하면서 보는 프로세서는 하드웨어적인 측면의 프로세서, 컴퓨터 구조적인 논리회로네요. 프로그램과 프로세스를 이어주는 역할을 한다 보이니, 앞에 말했던 'ㅓ.... 프로세스를 실행하게 해주는 친구인가..?'라는 말이 틀리진 않았음을 아시겠죠..?!

 

 

4. 스레드 - Thread

앞에서 만났던 세 친구들은 정의만 좀 알면 확실히 다른 친구들인데, 이 친구는 알아도 좀 헷갈려요..! ㅠㅠ 정의부터 잘 알아보고 쉽게 한번 정리해서 이해해보는 시간이 필요하겠어요.

 

스레드는 프로세스의 실행 단위라고 할 수 있습니다. 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유할 수 있습니다. -> 아하! 프로세스의 세부 개념이구나!
스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 그리고 스택으로 구성됩니다. 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 그리고 열린 파일이나 신호와 같은 운영체제 자원들을 공유합니다. 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상하는 것을 멀티스레딩이라고 합니다.

많은 스레드가 있으며, 위의 Code / Data / Heap을 공유하고 있다.

'어.. 스레드는 프로세스를 나눈 개념이고... 프로세스의 자원을 공유해서 실행되는구나..!' 에 도달하셨다면 성공입니다! 저희의 이번 게시글의 목표는 끝났어요!

하지만, 보면서 궁금한 것이 하나 생기네요. 자원을 공유할 수 있다면, 왜 굳이 레지스터와 스택은 공유하지 않는 것일까요?? 그 이유는 위에 프로세스에서 설명한 것과 비슷하다고 볼 수 있겠네요.

스레드 또한 하나의 스레드씩 진행하는 것이 아닌 전환하면서 실행되기 때문이에요. 그렇기에 레지스터와 스택이 위에 설명했던 돌아오기 위한 PCB의 역할을 하는 것이죠.


마무리

정리하면 

우리 컴퓨터에서 실행되어 돌아가는 것 -> 프로세스
우리 컴퓨터에 설치되어 있는 것 -> 프로그램
CPU / 컴퓨터 구조에서 배운 친구들 -> 프로세서
프로세스의 세부 단위 -> 스레드

겠네요! 앞으로 안 틀리겠어요. 

 

이것이 OS의 제일 기초인 것 같아요. 앞으로 알아야 할 용어도 많고, 개념도 많지만, 이런 기초가 없이는 아무것도 이해할 수 없다고 생각해요.

 

하반기에는 OS지식을 여기서 다 찾아볼 수 있도록 여름 내에 OS시리즈 다 쓰는 것이 목표에요!

 

혹시 틀린 내용이 있다면 과감히 지적해주시면 감사하겠습니다!

댓글