본문 바로가기

CS(Computer Science)

CS Study : 9주차 - 프로세스와 스레드

프로세스(Process)

  • 프로세스는 실행중에 있는 프로그램
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
  • 스케줄링의 대상이 되는 작업과 같은 의미로 쓰인다.
  • 프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있는데, 실제로는 스레드 단위로 스케줄링을 한다.
  • 하드디스크에 있는 프로그램을 실행하면, 실행을 위해서 메모리 할당이 이루어지고, 할당된 메모리 공간으로
    바이너리 코드가 올라가게 된다. 이 순간부터 프로세스라 불린다.

프로세스의 문맥(context)

  • CPU 수행 상태를 나타내는 하드웨어 문맥
  • 프로세스의 메모리 영역
    • Code 영역 - 실행할 프로그램의 코드나 명령어들이 기계어 형태로 저장된 영역, CPU는 코드영역에 저장된
                          명령어들을 하나씩 처리한다.
    • Data 영역 - 코드에서 선언한 전역 변수와 정적 변수가 저장되는 영역, 프로그램이 실행되면서 할당되고
                         종료되면서 소멸한다.
    • Stack 영역 - 함수 안에서 선언된 지역변수, 매개변수, 리턴값 등이 저장된다.
                          호출시 기록되고 종료되면 제거된다.
    • Heap 영역 - 관리가 가능한 데이터 이외의 다른 형태의 데이터를 관리하기 위한 자유공간

 

프로세스의 상태(State)

  • 프로세스는 상태(state)가 변경되며 수행된다.
    • Runnig - CPU를 답고 명령을 수행중인 상태
    • Ready - CPU를 기다리는 상태
    • Blocked(waiting, sleep) - CPU를 주어도 당장 명령을 수행할 수 없는 상태
                                              프로세스 자신이 요청한 요청이 즉시 만족되지 않아서 이를 기다리는 상태
    • New - 디스크에서 메모리로 프로그램이 올라와 실행준비를 하는 상태
    • Terminated - 수행이 끝난 상태

문맥 교환(Context Switch)

  • 하나의 프로세스가 이미 CPU를 사용중인 상태에서 다른 프로세스가 CPU를 사용하기 위해 이전 프로세스의 상태를
    저장하고 새로운 프로세스의 상태를 적재하는 것
  • CPU가 재빠르게 여러 프로세스를 번갈아가며 실행하고 관리할 때 번갈아가며 처리하는 것을 문맥교환이라 한다.

 

스레드(Thread)

  • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이다.
  • 운영체제의 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 명령어의 가장 작은 시쿼스이다.
  • 하나의 프로세스는 하나 이상의 스레드를 갖고 있다.
  • 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.

 

  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당 받고, Code, Data, Heap 영역은 공유한다.
  • 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
  • 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.

 

 


참고 블로그

프로세스와 스레드

프로세스 vs 쓰레드 차이 정리