Free Lines Arrow
본문 바로가기
Development/OS

[OS] 프로세스와 쓰레드 그리고 차이점

by skahn1215 2021. 8. 18.
728x90
반응형

프로세스

프로그램의 실행 단위를 말한다.

프로그램의 인스턴스 라고 해도 된다.

 

 

프로세스의 구조

 

  • Code: 코드 및 상수가 기계어로 저장되는 영역이다.
  • Data: 전역변수, Static 변수가 저장 되는 영역이다.
  • Stack: 지역변수, 매개변수, 리턴값, 함수호출을 기록하는 영역이다.
  • Heap: 동적메모리 할당 공간이다.

 

장점

메모리 침범문제를 OS 에서 해결한다.

하나의 프로세스가 이상이 생겨도 다른 프로세스에 영향이 없다.

 

단점

독립된 메모리 공간을 가지기 떄문에 작업량이 많을 경우 오버헤드가 발생한다.

IPC 복잡한 통신이 필요하다.

 

 

Context Switching

  • 위 프로세스의 구조를 보면 2개의 프로세스가 있다. 
  • CPU 는 한번에 하나의 명령밖에 실행 못한다.
  • 이런 이유때문에 빠르게 Process 를 번갈아 가면 수행한다.
  • 번갈아가며 수행하는 것을 Context Switching이라고 부른다.

 

 

CPU Scheduler

그렇다면 어떻게 Context Switching 이 발생할까?

CPU Scheduler 로 작업 스케쥴을 만드는데 이를 작업스케쥴링이라고 한다.

우선순위 기반으로 프로세스들에게 CPU 를 할당받게 해준다.

 

스케쥴링을 정하는 알고리즘

  • FCFS: FirstCome FirstSeve
    먼저 들어온 것을 먼저 처리한다.
  • SJF: Shorted Job First
    최단 작업을 우선으로 처리한다.
  • Priotiry Scheduling: 
    미리 주어진 프로세스의 우선순위를 따른다.
  • RR: Round Robin
    정해진 시간에 주어진 만큼 프로세스를 실행한뒤 다음 프로세스를 실행한다.
    계속해서 위의 방식을 반복한다.
  • Multilevel-Queue:
    레디큐를 여러개의 큐로 분류하여 각 큐가 각각 다른 스케쥴링 방식을 가진다.
  • Multi Level Feedback Queue:
    준비 큐를 여러 개의 큐로 분리하여 큐 사이에도 우선순위를 부여하는 스케줄링 알고리즘이다. 

 

 

 

 

PCB

  • PCB 란 Process Control Block 이다.
  • 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다.
  • PCB가 필요한 이유는 Context Switching이 수행될때 Process의 상태나 정보를 저장하기 위해서이다.

 

 

 

PCB 의 구조

 

  • Pointer:
    - 부모프로세스, 자식프로세스에 대한 포인터
    - 프로세스의 메모리 주소 포인터
    - 할당된 자원의 포인터 등이다.

  • Process State: C2RWT
    - 프로세스의 상태
    - 생성(Create)
    - 준비(Ready)
    - 실행(Running)
    - 대기(Wating)
    - 완료(Terminated)
  • PID:
    - 프로세스를 식별하는 ID 이다.

  • PC(Program Counter):
    - 프로세스가 다음에 실행할 명령어의 주소를 가지고 있다.

  • Register:
    CPU 의 레지스터 또는 일반 레지스터이다.

  • List of open files:
    프로세스를 위해 열린 파일 목록이 포함된다.

 

 

 

프로세스의 상태도

 

  • New: 프로세스가 생성되는 상태
  • Ready: 프로세스가 CPU에 할당, 대기 상태
  • Running: 명령어들이 실행되는 상태
  • Wating: 이벤트 발생으로 프로세스가 대기하는 상채
  • Terminated: 프로세스가 종료되는 상태

 

 

 

정리

  • 프로세스는 프로그램 실행 단위이다.
  • 여러개가 동시에 수행 될수 없고 번갈아 가며 수행된다(context switching).
  • 번갈아 수행될때 스케쥴 알고리즘을 사용한다.
  • PCB 를 통해서 프로세스의 상태를 기록한다.

 

 

 

쓰레드

  • 하나의 프로세스 안에서  실행되는 흐름을 말한다.
    - CPU 입장에서의 최소 작업단위 이다.

  • 하나의 프로세스는 반드시 하나의 쓰레드를 갖는다.
  • 쓰레드는 프로세스의 Code Data Heap 을 공유자원으로 사용한다.
  • 스택영역만 별도로 할당 받는다.

 

 

 

쓰레드 구조

 

 

 

쓰레드의 상태도

 

 

 

장점

  • 공유 자원으로 효율성증가
  • Data Heap 영역으로 데이터를 통신하여 통신이 간단하다.
  • Context switching 비용이 적다.

 

단점

  • 자원공유로 동기화 문제가 발생 한다.
  • 하나의 스레드에 문제가 생기면 전체에 영향이간다.
  • 디버깅이 힘들다.

 

 

 

멀티프로세스와 멀티쓰레드

 

멀티프로세스

  • 하나의 프로그램을 여러개의 프로세스로 구성
    - 병렬 적으로 작업을 수행한다.

  • 부모자식 관계를 가진다.
  • 각각 메모리영역을 가진다.
  • 변수와, 프로세스 테이블을 상속 할뿐 독립적이다.
  • fork 로 복제한다.

 

 

구조

 

 

 

멀티쓰레드

  • 하나의 프로세스가 다수의 쓰레드를 가진다.
  • 쓰레드는 공유메모리를 가진다.

 

 

 

 

 

차이점

  • 프로세스는 여러개의 프로세스를 만들어서 실행한다.
  • 멀티 쓰레드 일경우 하나의 프로세스 안에 여러개의 쓰레드를 가진다.
  • 프로세스 독립적으로 공유자원이 없다.
  • 쓰레드 공유자원을 가진다.
  • 프로세스의 경우 내부에러로 종료시 다른 프로세스에게 영향이없다.
  • 쓰레드의 경우 내부에러 발생시 모든 쓰레드가 종료된다.

 

 

728x90
반응형

댓글