[CS]운영체체 - 프로세스&스레드

juyeong-s·2022년 6월 9일
0

CS 개념

목록 보기
1/1

운영체제

  • 프로세스: 메모리 상에 실행중인 프로그램 -> 프로그램 자체가 프로세스가 아니라 실행 중인 프로그램임.
  • 스레드: 프로세스 안에서 실행되는 작업의 흐름

기본적으로 프로세스마다 최소 1개의 스레드를 소유한다.

프로세스는 각각 별도의 주소공간을 할당받는다. (독립적임)

  • code: 코드 자체를 구성하는 메모리 영역 (소스코드)
  • data: 전역 변수, 정적 변수, 배열 등 (초기화된 변수 or 공유변수 저장)
  • heap: 동적할당 시 사용 (new, malloc 등)
  • stack: 스레드마다 할당됨. 지역변수, 매개변수, 리턴값, 메소드 콜스택 등이 쌓이는 영역

프로세스자신만의 고유 공간과 자원을 할당받아 사용한다.
스레드다른 스레드와 공간, 자원을 공유하면서 사용한다.

멀티 프로세스

하나의 컴퓨터에 여러 CPU를 장착하는 것 -> 다수의 프로세서가 서로 협력적으로 일을 동시에 처리하는 것을 의미 (병렬)

장점

  • 독립된 구조로 안전성이 높다.
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 프로그램이 정지되거나 하는 문제가 발생하지 않는다.
  • 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용한다. 이 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하기 때문에, 저렴한 비용

단점

  • 독립된 메모리 영역이기 때문에 작업량이 많을수록(Context Switching이 자주 일어나서 주소 공간의 공유가 잦음) 오버헤드가 발생하여 성능 저하가 발생할 수 있다.
  • Context Switching 과정에서 캐시 메모리 초기화와 같은 무거운 작업이 진행되고, 시간이 소모되는 등 오버헤드가 발생한다.

추후 멀티 프로그래밍&멀티 테스킹에 대해서도 알아보자.

Context Switching 이란?

CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 Context Switching이라고 한다.

  • CPU는 한 번에 하나의 프로세스만 실행 가능하다.
  • 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

멀티 스레드(Muti Thread)

하나의 프로세스여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것을 의미한다.

장점

  • 시스템 자원 소모 감소
  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들기 때문에 효율적인 자원 관리가 가능하다.
  • 스레드 간 데이터를 주고받는 것이 간단해진다. -> 시스템 자원 소모 ⬇️
  • 스레드 사이 작업량이 적어 Context Switching이 빨라진다. -> 캐시 메모리를 비울 필요가 없다.
  • 스레드는 힙 영역을 공유하므로 데이터를 주고받을 수 있다.

단점

  • 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다. -> 병목 현상, 데드락 등
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
  • 단일 프로세스 시스템의 경우, 멀티 스레드의 장점을 활용하지 못한다.

멀티 프로세스 vs 멀티 스레드

  • 멀티 스레드멀티 프로세스보다 작은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험을 갖고 있다.
  • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지하는 단점이 있어요.
  • 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있음으로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용하는 것이 좋다.

레퍼런스

[[OS]멀티 프로세스와 멀티 스레드의 차이는 무엇일까?](https://livenow14.tistory.com/67)
[면접 대비] 운영체제
[OS] 멀티프로세싱, 멀티프로그래밍, 멀티태스킹, 멀티스레딩

profile
frontend developer

0개의 댓글