[OS] 프로세스와 쓰레드

2022. 1. 4. 14:39

프로그램이란

  • (실행되기 전)명령어, 코드 및 정적인 데이터의 묶음

프로세스란

  • 실행 중인 프로그램
  • 하드 디스크에 있는 프로그램이 프로세스가 되면서 메모리에 적재 된다.
  • 운영체제로부터 시스템 자원을 할당 받는 작업의 단위
  • 스레드 단위 작업을 지원하기 위한 자원 할당의 단위 → 프로세스가 동작 중이라는 것은 한 프로세스에 있는 스레드가 실행 중이라는 것
  • 프로세스 생성 시 PCB블록이 생성되어 프로세스가 관리된다.

 


 

프로세스  메모리 영역

Stack - 매개변수, 지역 변수 등 임시적인 자료

Heap - 동적으로 할당되는 메모리

Data - 전역 변수

code - 프로그램의 코드

 


PCB

  • 각 프로세스는 운영체제에서 PCB(Process Control Block)으로 표현됨
  • 프로세스를 제어하기 위한 정보를 모아둠.
  • 포인터 : 준비상태나 대기상태의 큐를 구현하기 위해 필요한 포인터
  • PID : 프로세스 식별자
  • 프로세스 상태 : new, ready, running, wating, halted 등
  • 프로그램 카운터 : 다음 실행할 명령어의 주소
  • 스케줄링 정보 : 우선순위 등

 


스레드란

  • 프로세스 내에서 나뉘어진 하나의 실행 단위 (여러 개가 있을 수 있음)
  • CPU 이용의 기본 단위
  • Text, data, heap 영역을 공유
  • 각 Thread는 별도의 stack 영역을 가진다

*자원은 Process 단위로 받고 작업/스케줄링은 Thread단위로 진행한다!

 


 

한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식이 있다.


멀티 스레드 (하나의 어플리케이션을 여러 개의 스레드가 실행)

  • 한 프로세스 안에 스레드가 2개 이상일 때
  • 프로세스의 자원을 공유 ( heap, data, text)
  • ex) Internet explore

(장점)

  • 향상된 응답성 (자원을 공유하기 때문에)
  • context switching 비용이 적음 ( 자원을 공유하기 때문에 )
  • 캐싱 적중률이 높음

(단점)

  • 서로 다른 쓰레드가 데이터 영역과 힙 영역을 공유하기 때문에 어떤 쓰레드가 다른 쓰레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 그렇기 때문에 멀티 쓰레딩 환경에서는 동기화 작업이 필요하다.
  • 긴밀하게 연결되어 있어 한 스레드에 문제가 생기면 다른 쓰레드에도 영향을 미친다.

 


 

멀티 프로세스 (하나의 어플리케이션을 여러 개의 프로세스가 실행)

  • pork를 통해 자식 프로세스 생성
  • 하나의 작업을 여러 개의 프로세스가 처리
  • ex) Google Chrome

(장점)

  • 동기화 작업이 필요하지 않음
  • 자식 프로세스 중 하나가 문제가 생겨도 다른 프로세스에 영향이 없음

(단점)

  • 독립적이기 때문에 IPC를 통해서 통신해야됨
  • 자원을 공유하지 못함

 


Context switching이란?

  • 프로세스 혹은 쓰레드의 할당시간이 끝나고 새로운 프로세스나 쓰레드를 CPU에 할당시킬 때 기존 실행단위를 대기상태로 만들고 새로운 실행단위를 실행상태로 바꾸는 모든 일련의 과정
  • 멀티 쓰레드는 공유된 자원 이외에 heap영역만 변경하면 되기 때문에 context switching비용이 적게 든다.
  • 멀티 프로세스는 모든 자원이 독립되어 있기 때문에 context switching 비용이 비교적 많이 든다.

'CS > OS' 카테고리의 다른 글

[OS] 멀티프로세스의 pork를 통한 자식 생성과 copy on write  (0) 2022.01.04

BELATED ARTICLES

more