[운영체제]프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍 차이!

박두팔이·2024년 7월 18일
0

CS컴퓨터과학

목록 보기
14/14

배경 용어정리

순번용어정의
1program컴퓨터가 실행할 수 있는 명령들의 집합
2process- 컴퓨터에서 실행 중인 프로그램
- 각각의 프로세스는 독립된 메모리 공간을 할당 받음
- 명령어들과 데이터를 가짐
3CPU명령어를 실행하는 연산 장치
4main memory프로세스가 cpu에서 실행되기 위해 대기하는 곳
5IO(input/output)- 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받는 것
- 입출력 장치와 데이터를 주거나 받는 것

단일 프로세스 시스템

특징

한 번에 하나의 프로그램만 사용

단점

CPU 사용률이 좋지 않음

예시

  • 프로세스가 돌아가는 동안 I/O를 만나게 되면 CPU는 아무 일도 하지 못함 따라서 프로그램 종료 시간이 늘어남.

해결책

  • 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키자!
  • I/O작업이 발생하면 다른 프로세스가 CPU에서 실행됨
  • 이런 프로그래밍 방식을 멀티프로그래밍이라고 한다.

멀티 프로그래밍

특징

여러개의 프로그램이 동시에 실행

단점

CPU사용 시간이 길어지면 다른 프로세스는 계속 대기

예시

  • p1(process)이 CPU에서 돌아가고 있다. p1과 p2가 동시에 진행된다면 p1이 끝나기 전까지 p2는 아무것도 할 수 없이 기다려야한다.

해결책

  • 프로세스는 한번 CPU를 사용할 때 아주 짦은 시간(=quantum)만 CPU에서 실행되도록 하자!

멀티 태스킹 (multitasking)

특징

  • 동시에 여러 프로그램을 실행시킨 다는 것은 멀티 프로그래밍과 유사하나, CPU타임 안에서 프로세스를 짧게 쪼개 번갈아 가면서 실행한다는데 차이가 있다.
  • 프로세스의 응답 시간을 최소화 시키는데 목적이 있다. (즉각적 응답 가능)

단점

  • 하나의 프로세스가 동시에 여러작업을 수행하지는 못함
  • 프로세스의 컨텍스트 스위칭(하나의 cpu에서 여러 프로세스을 실행하기위해서 짧은 작업을 마치고 다른 프로세스로 교체하는 작업)은 무거운 작업임
  • 프로세스끼리 데이터 공유가 까다로움
  • 하나의 CPU성능을 계속 발전시키는 것이 발열등의 이슈로 어려워짐. 한 CPU안에 두개의 코어를 두어 전체적인 성능을 향상시키는 발전을 하게 됨 그것이 듀얼 코어다.

해결책

  • 듀얼코어를 잘 사용하고 싶어서 등장한 것이 스레드다.

스레드(thread)

특징

프로세스는 한 개 이상의 스레드 가질 수 있다.

  • 한 프로세스 안에서 여러 개의 작업을 하기 위해 등장 했기 때문에 여러 개를 하나 하나 맡아서 작업해줄 스레드가 필요하다.
  • cpu에서 실행되는 단위다. (unit of execution)
  • 예전에는 프로세스가 cpu에서 실행되는 단위었다면 지금은 스레드로 바뀌었다.
    • 때문에, 기본적으로 프로세스는 하나의 스레드를 가지고 있다.
  • 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.
  • 스레드들은 자신들의 속한 프로세스의 메모리 영역을 공유한다. 따라서, 컨텍스트 스위칭이 가볍고 데이터공유가 쉽다.

아래는 메모리 구조를 나타내는 그림이다.

[왼쪽 그림] : 싱글 스레드, 스레드 나오기 전에 프로세스만의 메모리 구조

  • stack, heap, stack pointer, program counter 주목

[오른쪽 그림]: 스레드가 등장한 이후의 메모리 구조

  • heap영역은 공유하지만 stack은 스레드마다 자신마다 고유한 영역을 가지고 있다.
  • 또한 각각의 stack을 가리키는 pointer들이 각각 존재한다.
  • program counter들도 각각 따로 존재한다. program counter란, 이 다음번에 실행되어야 할 명령어가 있는 메모리 주소를 가리킨다.

예시

  • 하나의 CPU가 하나 있고, 2개의 스레드를 갖는 하나의 프로세스가 있다고 하자. 이때는 멀티태스킹 방식으로 일을 한다.
  • 만일 CPU 하나에 코어가 2개가 있다면 어떻게 될까? -> 그것이 바로 뒤에 나올 멀티 스레드이다.

참고

  • 소프트웨어 개발자들이 아는 java등 에서 사용하는 스레드와는 다른 개념이다.
  • 여기서 말하는 스레드는 CPU제조사의 기술을 의미한다.

멀티 스레드(thread)

특징

  • 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적
  • 코어가 두 개 이상으로, 하나의 코어가 여러개의 스레드를 가지고 병렬적으로 처리
  • 확장된 멀티태스킹 개념:
    - 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것

멀티프로세싱(multi processing)

특징

두 개 이상의 프로세서나 코어를 활용하는 시스템


Process와 thread의 차이

process

  • process는 '관리 단위'라고 할 수 있다.
  • 관리의 주체는 OS가 한다.
  • 연산해야하는 list를 가지고 있고, 연속적이다. 이는 하나의 흐름을 만든다. 그 '흐름'을 thread라고 한다.

thread

  • 프로세스가 존재한다면 거기엔 기본적으로 스레드가 반드시 한 개가 존재한다.
  • thread는 작업list를 가지고 있는 '흐름'이라고 이해하면 된다.
  • 각각 동작하고 개별적이다.

process를 여러번 실행시키는 것이 좋지 않을까?

만일 해야할 일의 양이 100이라고 가정할 때 3명이 하나의 팀으로써 리소스를 공유하는 것(=thread단위)이 좋을까? 아니면 각자 따로 버츄얼메모리를 가지고 각자의 stack, heap을 가지고 작업을 하는 것(=process단위)이 좋을까?

정답은 없다.
둘 중 무엇이 효율적이냐의 문제가 있다. 운영체제의 설계철학이 여기서 드러남

thread - 윈도우
process - 리눅스(도커가 적합)

profile
기억을 위한 기록 :>

0개의 댓글