Process & Thread

shin·2021년 8월 4일
0

CS

목록 보기
1/4

Process

  • 컴퓨터에서 연속적으로 실행되고 있는 프로그램
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위
    • 할당받는 시스템 자원
      • CPU시간
      • 운영되기 위해 필요한 주소 공간
      • Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역

구조

Stack

  • 지역변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역

Heap

  • 동적 데이터 영역
  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역

Data

  • 전역변수와 정적변수가 저장된다.
  • 이 변수들은 프로그램이 시작될 때 할당되어 프로그램이 종료될 때 소멸된다.

Code(Text)

  • 실행할 프로그램의 코드가 저정된다.
  • CPU는 이곳에서 명령어를 하나씩 가져와 처리하게 된다

특징

  • 각각 독립된 메모리 영역을 할당 받는다.( Code, Data, Stack, Heap )
  • 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있다.
  • 각각의 프로세스는 별도의 주소 공간에서 실행되고, 프로세스간의 변수나 자료 구조에 접근할 수 없다. 만약 프로세스 간의 접근을 하려면 IPC(통신)을 사용해야 한다
    Ex) 파이프, 파일, 소켓......통신방법

상태

프로세스에는 상태(state)라는 것을 가지고 있다

new, ready, running, waiting, terminated, suspended

  • new : 프로세스가 만들어지는 과정의 상태로 PCB도 같이 생성된다.

  • ready : 프로세스가 CPU를 기다리는 상태이다. 프로세스가 필요한 자원을 모두 얻어 메모리에 적재된 상태이다. CPU를 할당 받으면 바로 실행 가능한 상태이다. ready 상태를 가지는 여러 프로세스가 존재할 수 있다.

  • running : 프로세스가 CPU를 할당받아서 명령어를 수행중인 상태이다. 프로세스가 여러개여도 일반적으로 CPU는 하나이기 때문에 매 시점 실행중인 프로세스는 1개이다.

  • terminated : 프로세스가 다 수행되어서 종료할 때 생기는 상태이다. 종료될 때 CPU는 반납하고, PCB는 남아있다.

  • blocked : 프로세스가 I/O작업 등을 처리중이기 때무에 CPU를 할당 받아도 당장 실행할 수 없는 상태이다.

  • suspended : 프로세스 중지 상태로 특정한 이유로 프로세스 메모리가 강제로 빼앗겨 수행이 중지된 상태이다. 외부에서 다시 재개시키지 않는 이상 다시 활성화 할 수 없다.

blocked / suspended 차이
blocked : 잠시 중지 되었다 끝나면 다시 ready상태로 돌아옴
suspended : 잠시 중지 되었다 재개 할려면 외부에서 재개 시켜줘야 ready로 돌아온다.

스케줄링 큐

  • 여러 개의 프로세스를 사용하기 위해 이것을 관리하기 위한 자료구조가 필요하다. CPU를 할당 받기 전에 여러개의 프로세스들을 저장하고 관리를 해야하는데, 이러한 자료구조를 작업큐, 준비큐, 장치큐 라고 한다
  • 작업큐 (Job Queue)
    시스템의 모든 프로세스를 관리하기 위한 큐이다. 프로세스 상태와ㅏ 무관하게 현재 시스템 내에 있는 모든 프로세스를 관리한다.

  • 준비큐 (Ready Queue)
    CPU를 할당 받기 위해 대기하고 있는 프로세스를 관리한다. 준비큐에 있는 프로세스들은 ready 상태에 있게 된다.

  • 장치큐 (Device Queue)
    각 장치마다 서비스를 기다리며 줄 서 있는 프로세스를 관리한다. 여기에 속한 프로세스들은 blocked 된다.

상태 사이클

  • new -> ready
    os에서 승인을 받아 프로세스가 생성되면 준비큐에 올라온다.

  • ready -> running
    준비큐에 있는 프로세스 중에 스케줄링 알고리즘에 의해 선택받은 프로세스가 CPU를 할당 받는다.

  • running -> ready
    CPU를 할당받고 작업을 하다 특정 이유로 다른 프로세스에게 CPU를 주고 다시 CPU를 기다린다.

  • running -> blocked
    수행중인 프로세스가 I/O 작업을 해야할 경우 CPU를 반납하고 장치큐에 들어가게 된다.

  • blocked -> ready
    장치큐에 있던 프로세스가 일을 하고 한 일을 메모리에 올려놓고 프로세스는 다시 준비큐에 들어간다.

  • running -> terminated
    프로세스 실행이 완료되어 반납 상태

  • blocked, ready -> suspended blocked, suspended ready
    blocked, ready 상태에 있 프로세스들이 어떤 이유로 인해 suspended 상태로 바뀐다. suspended blocked 상태인 프로세스 blocked 조건들을 만족하게 되면 suspended ready로 바뀌게 된다.

PCB (Process Control Block)

  • os가 프로세스를 제어하기 위해 정보를 저장해 놓는곳, 프로세스 상태 정보를 저장한다.
  • 프로세스 상태 관리와 문맥교환을 위해 필요하다
  • 프로세스 생성 시에 만들어지고 주기억장치에 저장된다.

예시

  • CPU에 어떤 긴급한 프로세스를 처리해달라고 요청이 오면 기존에 작업하던 프로세스를 어딘가에 임시로 저장한 다음에 급한 작업을 완료하고 기존 프로세스를 불러와야한다. 이 때 필요한 저장소가 PCB다.

문맥교환 (Context Switch)

  • 기존 프로세스가 실행되는 중에 멈추고 다른 프로세스의 실행을 완료하고 기존 프로세스를 실행하는 과정이다.

  • P0가 실행되던 중에 interrupt 걸려서 실행을 멈추고 PCB0에 저장된다.
    interrupt 되면 P0가 running -> ready 과정으로, 다른 프로세스(P1)에게 CPU를 준다는 의미이다
  • 그리고 PCB1에 저장되어있던 P1을 불러와 실행한다.
  • P1이 종료되면 interrupt 되고 p1은 다시 PCB1에 저장된다.
  • 멈췄던 P0를 다시 불러와 나머지 과정을 수행한다.


Thread

  • 프로세스가 할당 받은 자원을 이용하는 실행 흐름의 단위
  • 프로세스의 특정한 수행 경로
  • 프로세스가 할당받은 자원을 이용하는 실행 단위
  • 하나의 프로세스에 1개 이상의 스레드가 존재하고 2개 이상가지고 있을 경우 멀티스레드 라고 한다.

특징

  • 스레드는 프로세스 내에 stack만 할당 받고 code, data, heap은 공유한다

장점

  • 프로세스 자원을 공유해서 프로세스간의 통신보다 간단하다
  • 시스템 자원 소모가 줄어듬
  • 프로그램 응답 시간이 줄어듬
  • 스레드간 전환시간이 짧다

단점

  • 여러 개의 스레드를 사용할 경우 오류나기 쉽다
  • 디버깅 어려움
  • 단일 프로세스 시스템에서는 효과 미비하다

Process & Thread 차이점

Process

  • 무거운 연산
  • 각각 고유의 메모리 공간을 가진다
  • IPC 통신을 통해 프로세스 간의 통신을 한다
  • 문맥 교환 오버헤드가 크다
  • 메모리 공유를 하지 않는다

Thread

  • 가벼운 연산
  • 자신이 속한 프로세스 자원을 공유한다
  • 프로세스 메모리를 공유하기 때문에 IPC통신보다 속도가 빠르다
  • 프로세스 내의 쓰레드간 교체는 오버헤드가 덜하다
  • 같은 프로세스에 있는한 쓰레드는 서로 메모리를 공유한다

0개의 댓글