multiprocess and multiThread

Multi Process(멀티 프로세스)

멀티 프로세스란?

  • 다수의 프로세스로 하나의 Task를 처리하는것
  • 프로세스간 메모리 구분이나 독립된 공간이 필요할때 사용

    특징

  • 독립된 구조로 다른프로세스에게 서로 영향을 주지않아서 문제가 발생해도 해당 프로세스 이외에는 영향이 없다. -> 안정적이다.

    단점

  • 서로 독립된 영역에서 작업을 진행하기 때문에 작업량이 많아질수록 Context Switching에 의한 오버헤드가 발생하여 성능의 저하가 일어날 수 있다
  • 서로 독립되어있기 때문에 통신을 위해 별도의 통신설비를 이용해야함(IPC, Inter Process Communication)
  • 프로세스간 변수등의 자료 교환을 할 수 없다.



Multi Thread(멀티 스레드)

멀티 스레드란?

  • 하나의 프로세스에 여러개의 스레드로 자원을 공유하여 다수의 작업을 동시에 처리하는것

    특징

  • 프로세스 안에서 공유 메모리를 가지고 있기때문에 시간, 자원의 손실이 프로세스대비 적다
  • 스레드간 자료, 변수의 공유가 가능하다.

    단점

  • 공유메모리를 가지기 때문에 공유메모리의 공간의 손상이 발생하면 다른 스레드또한 작업이 불가능한 상태가 되어버린다.
  • 위의 문제를 가지기 때문에 주의깊은 설계가 필요하다. -> Critical Section


    # Context Switching
  • 하나의 프로세스나 쓰레드가 CPU를 사용중인 상태에서 다른 프로세스나 쓰레드가 CPU를 사용하기위해 현재 프로세스의 상태정보를 저장하고 다른 프로세스의 상태값을 불러오는 과정 -> PCB에 저장
  • 상태값을 저장하고 불러오는 동안에는 작업을 수행할 수 없다 -> 오버헤드

프로세스와 쓰레드

프로세스와 스레드

Process(프로세스)

프로세스란?

  • 컴퓨터에서 연속적으로 실행되는 컴퓨터 프로그램
  • 프로그램을 구동하여 메모리상에서 실행되는 작업단위
  • OS로 부터 독립된 메모리 영역을 할당받는다.

프로세스의 구조

프로세스는 아래와 같은 구조를 가진다.

  • Code : 코드 자체를 구성하는 메모리 영역
  • Data : 전역변수, 정적변수, 배열등을 저장
  • Heap : 동적 할당시 사용(new(), malloc() 등)
  • Stack : 지역변수, 매개변수, 리턴값 등을 임시적으로 저장하는 영역

왜 이렇게 나눈걸까?

1
2
공유 할 수 있는 데이터는 공유하여 메모리의 사용량을 줄이기 위해서
Stack과 Data를 나눈 이유는 스택의 특성과 전역변수를 활용하기 위해서

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

특정 프로세스에 대한 정보(Process MetaData)를 저장하고 있는 자료구조(Linked List)
아래와 같은 데이터가 저장되어 있다.

  • Process MetaData
    • Process ID : 프로세스의 식별번호
    • Process State : 프로세스의 상태(new, ready, running, waiting, terminated)
    • Program Counter : 이 프로세스 다음에 실행할 명령어의 주소
    • CPU Registers
    • CPU 스케줄링 정보: 우선 순위, 최종 실행시각, CPU 점유시간 등
    • 메모리 관리 정보: 해당 프로세스의 주소 공간 등
    • 프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
    • 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

PBC는 CPU에서 프로세스의 상태에 따라 교체작업(Context Switching)이 이루어질때 PBC에서 저장되어있는 내용들을 불러와 이전 종료시점부터 다시 작업을 재실행한다.

Thread(스레드)

Thread란?

  • 프로세스 내부에 존재하는 실행 단위
  • 하나의 프로세스가 생성될때 내부에 적어도 하나의 스레드가 같이 생성된다.
  • 스레드는 Stack만 따로 할당받고, 나머지 Code, Data, Heap은 공유

image

프로세스와 스레드의 차이

  • 프로세스는 고유한 공간과 자원을 할당받아서 사용하지만(프로세스간 공유하지 않음) 스레드는 고유한 메모리(Stack)를 프로세스로 부터 할당받긴 하지만, 서로 공유하는 메모리(Code, Data, Heap)가 존재함

Stack를 스레드마다 독립적으로 할당 받는 이유

  • 독립적인 실행 단위로써 스레드를 사용하기 위해서는 독립적인 메모리 공간이 필요하고, 이를 만족시키는 최소조건이 Stack을 제공하는것 이기 때문이다.