Process & Thread

신명철·2022년 2월 3일
0

OS

목록 보기
2/27

Process

  • Process 구성 요소

    • Code : 프로그램 명령이 위치한 곳
    • Data : 전역 변수나, static 변수의 할당을 위해 존재하는 공간
    • Stack : 지역 변수 할당, 함수 호출 시 전달되는 인자 값들을 저장하기 위한 공간
    • Heap : JAVA의 new를 통한 동적 할당을 위해 존재하는 공간
  • 실행중인 프로그램의 단위로, 디스크로부터 메모리로 적재되어 CPU의 할당을 받을 수 있다.

  • 프로세스 별로 각각 독립적인 메모리를 할당 받는다.

  • 프로세스가 오류로 중지되어도 다른 프로세스에게 영향을 주지 않는다.

  • 프로세스끼리 통신하기 위해서는 IPC, Socket, File Descripter 과 같은 방법을 사용한다.

프로세스 생명주기

  • 생성 (New) : 프로세스 생성
  • 준비 (Ready) : 프로세스가 프로세스를 사용하지 않고 있지만 언제든지 사용할 수 있는 상태로 CPU가 할당되기를 기다리는 중
  • 실행 (Running) : 프로세스가 프로세서를 차지해 명령어들을 실행
  • 대기 (Waiting) : 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태
  • 종료 (Terminated) : 프로세스 종료

프로세스 제어 블록 (PCB, Process Control Block)

  • 특정 프로세스에 대한 중요한 정보를 저장하고 있는 커널 내의 자료구조
  • OS는 프로세스의 생성과 동시에 고유한 PCB를 생성한다.
  • 프로세스는 CPU를 할당 받아서 사용하다가 프로세스 전환 시 작업 진행 상황을 PCB에 저장하고 CPU를 재할당 받으면 이를 불러와 다시 작업을 수행한다.
  • PCB에 저장되는 정보
    • 프로세스 식별자 (Process ID, PID) : 프로세스 식별 번호
    • 프로세스 상태 : new, running, waiting, ready, terminated 등의 상태 저장
    • 프로그램 카운터 (Program Counter, PC) : 프로세스가 다음에 실행할 명령어의 주소
    • CPU 레지스터
    • CPU 스케줄링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
    • 메모리 관리 정보 : 페이지 테이블 or 세그먼트 테이블 등과 같은 정보
    • 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
    • 어카운팅 정보 : 사용된 CPU 시간, 시간 제한, 계정 번호 등

Thread

  • 프로세스 내의 실행 단위로, 한 프로세스 내의 스레드는 프로세스의 주소 공간이나 자원을 공유할 수 있다.
  • 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고, Stack 영역은 독립적으로 할당받는다.
  • 매개변수와 지역변수의 바인딩, 함수 종료시 복귀할 주소 정보와 주소 공간 등을 저장하기 위해 사용하는데 이는 스레드가 프로세스 내에서 독립적인 실행 흐름을 가져가기 위함이다. 즉, 독립적인 함수 호출이 가능하다는 뜻을 의미한다.
  • 스레드끼리의 통신에는 Heap 영역이나 Data 영역을 사용하거나 시그널을 통해 제어한다.

Multi Process

하나의 프로그램을 여러 개의 프로세스로 구성해 각 프로세스가 하나의 작업을 처리하도록 하는 것

장점

  1. 여러 개의 프로세스 중 하나에 문제가 발생해도 서로 영향을 미치지 않는다. (안정성)

단점

  1. 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 사용한다.
  2. 공유하는 메모리가 없고 각각 독립적인 메모리 공간을 할당 받기 때문에, Context Switching 시 캐시 메모리를 초기화 하는 등 많은 시간이 소모되는 작업이 수반되며 오버헤드가 발생할 문제가 있다.
  3. 프로세스 간 변수나 자료구조를 공유하기 위해서는 복잡한 통신 기법이 필요하다.

Multi Thread

하나의 프로그램을 여러 개의 스레드로 구성해 하나의 작업을 처리하도록 하는 것

장점

  1. 메모리 공간과 시스템 자원 소모가 줄어든다.
  2. Heap, Data 영역을 공유해 데이터를 주고 받기 때문에 스레드 간의 통신 방법이 간단하다.
  3. Context Switching 시, 캐시 메모리를 비울 필요가 없기 때문에 비용이 적고 빠르다.
  4. 처리량이 향상되고 자원 소모가 줄어들고 응답 시간이 단축된다.

단점

  1. 서로 다른 스레드가 Code,Data,Heap 영역을 공유하기 때문에 다른 스레드가 사용중인 변수나 자료구조에 접근하면 잘못된 값을 읽어오거나 수정할 수 있다. 자원 공유의 문제가 발생한다. (동기화 필요)
  2. 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.
profile
내 머릿속 지우개

0개의 댓글