본문 바로가기
Computer Science/Operating System

[운영체제] 프로세스와 스레드

by whatamigonnabe 2023. 2. 10.

프로세스란?

프로세스는 실행 중인 프로그램입니다. 어떠한 프로그램을 실행하게 되면 그것이 하나의 프로세스가 되고, 각 프로세스는 Memory에 독자적인 주소공간을 할당 받습니다. 

 

프로세스 문맥(Context)

각 프로세스들은 시분할 방식으로 CPU를 사용합니다. 즉, 아주 짧은 시간 동안 번갈아가면서 사용합니다. 만약, 한 프로세스가 CPU를 반납했다가 다시 자신의 차례가 왔을 때, 이 프로세스는 지난번 턴에 어디까지 실행시켰는지 어떻게 알 수 있을까요? 이렇게 프로세스가 실행된 마지막 순간을 기록한 것이 문맥(Context)입니다. 

이 문맥에는 PC(Program Counter)와 각족 register, 프로세스의 주소공간(code/data/stack), 그리고 해당 프로세스에 대한 커널 정보(PCB와 커널 스택)을 담고 있습니다.

 

여기서 PCB는 Process Control Block의 약자입니다. 커널 주소공간의 data 영역에는 운영체제가 각 프로세스를 관리하기 위한 정보 즉 위의 문맥 정보를 담고 있습니다. 

문맥 교환

다른 프로세스로 CPU를 넘겨줄 때 문맥 교환이 발생합니다.  기존의 문맥을 PCB에 저장하고, 새로운 프로세스의 문맥을 PCB에서 읽어옵니다. 이 과정에서 캐시 메모리를 전부 제거하는 과정도 들어가기 때문에, 비용이 꽤 큰 작업입니다. 

 

프로세스의 상태

프로세스는 여러 상태를 가지고 있습니다.

  • Running : CPU를 잡고 Instruction을 수행 중인 상태 
  • Ready: CPU를 기다리는 상태
  • Blocked: 지금 당장 CPU를 줘도 이용하지 못하는 상태(I/O를 시킨 후 기다리는 중)
  • Suspended: 외부적인 이유로 수행이 정지된 상태. 프로세는 전무 디스트에 swap out.
    • 이는 또 Suspended Blocked와 Suspended Ready로 나뉜다. Blocked 또는 Suspended상태에서 Suspend당한 것인지를 나타난다.

큐를 통한 프로세스 관리 

프로세스는 놀이공원의 이용객과 비슷합니다. 각 놀이기구(CPU 또는 I/O Device)를 타기 위해 기다립니다. 이 때 큐의 형태로 기다리게됩니다. 큐의 종류는 다음과 같습니다. JobQueue(현재 시스템 내의 모든 프로세스 집합), Ready Queue(CPU를 사용하기 위해 기다리는 queue), Device Queue(디바이스를 사용하기 위해 기다리는 줄).

 

 

스레드란?

스레드는 프로세스 내에서 작업을 수행하는 주체입니다. 이는 한 개 이상의 여러 개가 될 수 있습니다.

스레드를 사용하게 되면 여러 측면에서 경제적입니다. 우선 프로세스와 달리 자원을 공유합니다. 각 프로세스는 배타적인 주소공간을 할당받지만, 스레드는 같은 code section, data section, 그리고 OS resorce를 공유합니다. 그리고 프로세스간의 contextf change는 비용이 높지만, 스레드 끼리는 비용이 낮습니다.