본문 바로가기

프로세스와 스레드

프로세스 개념

프로세스란? 컴퓨터에서 실행되고 있는 프로그램. 혹은 작업이라고 부른다.

 

프로그램 ≠ 프로세스

프로그램은 하드디스크 등의 저장공간에 저장되어 있는 파일과 같은 수동적인 Entity 이다. 이와 반대로, 프로세스는 능동적인 Entity이다. 즉, 프로그램 실행파일이 메모리에 적재되면 프로그램은 프로세스가 된다.

 


프로세스 구조

프로세스는 일반적으로 다음과 같은 독립된 메모리를 할당받는다.

Operating System Concepts, 10th Edition

  • Text : 컴파일 된 프로세스의 실행 코드가 저장되어 있다. (고정 크기)
  • Data: 전역변수들이 저장된 메모리 (고정 크기)
  • Heap : 동적으로 할당되는 메모리. (동적 크기)
  • Stack : 함수 호출 시 임시 데이터 저장 메모리. 매개변수, 지역변수 등이 저장된다.  (동적 크기)

* 동적크기는 제한이 있다. Heap과 Stack의 메모리가 겹치지 않도록 주의해야 한다.

* JVM과의 비교 : JVM은 그 자체로 하나의 프로세스이다. 즉, JVM은 프로세스처럼 메모리가 할당되고, 그 안에서 JVM의 메모리 구조를 가진다/


PCB

프로세스를 표현하는 Block이다. 프로세스의 정보(상태)를 저장하는 메모리 라고 표현할 수 있다. PCB에 저장되는 정보는 다음과 같다.

  • Process State : new, ready, running 등 프로세스의 상태
  • Process Counter: 다음 instruction의 주소. 인터럽트 발생시 반드시 저장되어야 한다.
  • CPU Register: 누산기, 상태코드 등. 인터럽트 발생시 반드시 저장되어야 한다.
  • CPU 스케줄링 정보 : 프로세스 우선순위, 스케줄 큐 포인터 등
  • 메모리 관리 정보 : 페이지 테이블 정보 등
  • Accounting 정보 : CPU 사용시간, 프로세스 번호 등에 해당된다.
  • I/O States : 프로세스에 할당된 I/O장치 목록

스레드 개념

스레드(Thread)는 프로세스 내 작업의 단위이다. 혹은 CPU이용의 기본단위라고 살수도 있다.

  • 하나의 프로세스에서 동시에 여러가지 일을 하기 위해서는 하나의 프로세스에서 여러개의 스레드를 가질 수 있어야 한다.
  • 스레드는 병렬로 실행될 수 있다.
  • 하나의 프로그램에 대해 여러개의 프로세스가 실행 될 수 있다.

* 병렬로 처리하기 위해 여러개의 프로세스를 사용하지 않는 이유? 오버헤드가 크다. 스레드가 효율적이기 때문이다. 그리고 프로세스간 메모리 공유가 불가능하다.


스레드 구조

왼쪽 그림은 단일 스레드 프로세스이고 우측은 다중 스레드 프로세스이다.

다중 스레드 프로세스의 경우, 스레드들은 다른 스레드와 코드, 데이터, OS자원 등을 공유한다.

 

스레드는 독립적으로 레지스터, Stack, Program Counter 를 가진다. 

  • Stack에 저장되는 데이터는 프로세스의 Stack과 같다. 여러개의 스레드는 각각 다른 작업을 수행 할 수 있으므로 다른 함수를 호출 할 수 있다. 그러므로 독립된 Stack을 가져야 한다.
  • 스레드는 스케줄러에 의해 관리되기 때문에 어느 부분까지 수행했는지를 기억하기 위해 PC에 저장한다. 그러므로 PC도 독립적이어야 한다.

 

참고

Operating System Concepts, 10th Edition (Abraham Silberschatz 외 2명 )
https://velog.io/@gndan4/OS-프로세스-구조