Computer Sience/Operating System

OS level에서 어떻게 여러 프로그램이 동시에 실행될까?

제우제우 2024. 5. 17. 22:34
 

목차

  • 목표
  • 용어 정리
  • 단일 프로세스 시스템
  • 멀티 프로그래밍
  • 멀티 태스킹
  • 스레드
  • 멀티 스레딩
  • 멀티 스레딩 VS 멀티 프로세싱
  • 참고 자료

목표

어떻게 여러 프로그램이 동시에 실행되는지 원리를 이해

 


용어 정리

프로그램(Program)

  • 컴퓨터가 실행할 수 있는 명령어들의 집합

프로세스(Process)

  • 컴퓨터에서 실행 중인 프로그램
  • 각각의 프로세스는 독립된 메모리 공간을 할당 받는다
  • 명령어들과 데이터를 가진다.

CPU(Central Processing Unit)

  • 명령어를 실행하는 연산 장치

메인 메모리(Main Memory)

  • 프로세스가 CPU에서 실행되기 위해 대기하는 곳

IO(Input/Output)

  • 파일을 읽고 쓰기
  • 네트워크의 어딘가와 데이터를 주고 받는 것
  • 입출력 장치와 데이터를 주거나 받는 것

단일 프로세스 시스템

한 번에 하나의 프로그램만 실행됨

→ 원래 실행되던 프로그램을 종료하고 새로운 프로그램을 실행

 

단일 프로세스 시스템 단점

→ CPU 사용률이 좋지 않음

 

EX)

p1 : CPU에서 작업, IO 작업

단일 프로세스 시스템에서는 p1이 IO 작업을 하면 CPU에서 실행하던 p1을 종료하고 IO 작업을 한다.

이때 CPU는 아무 일도 하지 않고 쉬게 된다. → 사용률이 안 좋다.


멀티 프로그래밍(MultiProgramming)

단일 프로세스 시스템의 해결책

여러 개의 프로그램(프로세스)을 메모리에 올려놓고 동시에 실행시키자!

IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨

멀티프로그래밍의 목적

→ CPU 사용률을 극대화

 

멀티프로그래밍의 단점

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


멀티태스킹(MultiTasking)

멀티프로그래밍의 단점의 해결책

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

멀티태스킹의 목적

→ 멀티프로그래밍과 마찬가지로 CPU 사용률을 극대화 하는데 CPU 점유 시간을 아주 짧게 만든다.

→ 프로세스의 응답 시간을 최소화 시키는데 목적이 있다.

→ 일반 사용자가 느끼는 체감은 여러 프로그램을 동시에 실행하는 느낌이다. 실제 동작은 1개의 프로세스만 CPU에서 동작하고 있지만

 

남아있는 아쉬움

  • 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함
  • 프로세스 컨텍스트 스위칭(p1→p2로 교체 작업)은 무거운 작업
  • 프로세스끼리 데이터 공유가 까다롭다.
  • 듀얼 코어가 등장했는데 잘 쓰고 싶음.

스레드(Thread)

멀티태스킹에서 느끼는 단점들을 해결하기 위한 해결책

 

멀티태스킹의 단점 복습

  • 프로세스는 각각의 독립적인 메모리를 할당 받아서 데이터 공유가 까다롭다.
  • 프로세스 컨텍스트 스위칭은 무거운 작업이다.
  • 하나의 프로세스가 여러가지 작업을 수행하지는 못한다. (CPU에서 작업, IO 작업을 동시에)

스레드의 특징

  • 프로세스는 한 개 이상의 스레드를 가질 수 있다.
  • CPU에서 실행되는 단위(unit of execution) 예전에는 프로세스가 실행 단위
  • 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.
  • 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유 (데이터 공유가 쉽다)

메모리 구조 비교(싱글 스레드 vs 멀티 스레드)

 

싱글 스레드 메모리 구조 = 스레드 개념이 나오기 이전의 프로세스 메모리 구조

 

싱글 스레드 : Program Counter, Stack, Heap, …. 1개

멀티 스레드 : 스레드 n개 - (Stack n개, ProgramCounter n개) , 나머지 공유 영역 Heap, …. 1개


멀티 스레딩(MultiThreading)

코어가 1개인 경우

코어가 2개인 경우(듀얼 코어)

스레드가 1개의 CPU에서 동시에 병렬 처리 된다.

이런 종류의 시스템을 멀티스레딩(MultiThreading)이라고 한다.

 

멀티스레딩(MultiThreading)의 목적

→ 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적

 

확장된 멀티태스킹 개념

  • 이전 개념: 프로세스 사이의 아주 짧은 cpu 점유 시간을 통한 컨테스트 스위칭
  • 현재 개념: 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것

멀티스레딩 VS 멀티프로세싱

멀티프로세싱과 멀티스레딩은 둘 다 동시에 여러 작업을 수행하기 위한 기술이지만, 그 구현 방식과 사용 목적에 차이가 있다.

멀티프로세싱 (Multiprocessing)

멀티프로세싱은 여러 개의 프로세스를 사용하는 방식. 프로세스는 운영 체제에서 실행 중인 하나의 독립된 프로그램을 의미한다.

  • 독립된 메모리 공간: 각 프로세스는 자신만의 메모리 공간을 가지므로, 프로세스 간에 메모리를 공유하지 않는다. 이는 프로세스 간의 충돌을 방지하고 안정성을 높이지만, 메모리 사용량이 증가할 수 있다.
  • 병렬성: 멀티코어 시스템에서는 각 프로세스가 별도의 CPU 코어에서 병렬로 실행될 수 있어 실제 병렬 처리가 가능하다.
  • 비용: 프로세스를 생성하고 관리하는 데 비교적 큰 비용이 든다.(메모리 및 CPU 자원).

멀티스레딩 (Multithreading)

멀티스레딩은 하나의 프로세스 내에서 여러 스레드를 사용하는 방식이다. 스레드는 프로세스 내에서 실행되는 작은 단위의 작업이다.

  • 공유 메모리: 스레드들은 동일한 메모리 공간을 공유한다. 따라서, 스레드 간 통신이 빠르고 효율적이다. 하지만, 이를 잘못 관리하면 동기화 문제나 데이터 충돌이 발생할 수 있다.
  • 병렬성 제한: 많은 언어에서는 GIL(Global Interpreter Lock) 같은 제한이 있어 실제로 동시에 여러 스레드가 실행되지 않는다. 그러나 I/O 바운드 작업에서는 멀티스레딩이 효과적일 수 있다.
  • 비용: 스레드를 생성하고 관리하는 데 드는 비용이 상대적으로 적다.

주요 차이점

메모리 사용

  • 멀티프로세싱 : 각 프로세스가 독립된 메모리 공간 사용 
  • 멀티스레딩 : 모든 스레드가 동일한 메모리 공간을 공유 

병렬성

  • 멀티프로세싱 : 멀티코어 CPU에서 실제 병렬 실행 가능 
  • 멀티스레딩 : 멀티코어 CPU에서 실제 병렬 실행 가능 

오버헤드

  • 멀티프로세싱 : 프로세스 생성 및 관리에 높은 오버헤드 
  • 멀티스레딩 : 스레드 생성 및 관리에 낮은 오버헤드

안정성

  • 멀티프로세싱 : 프로세스가 독립적이어서 하나의 프로세스에 문제가 생겨도 다른 프로세스에 문제 영향을 미치지 않는다.
  • 멀티스레딩 : 하나의 스레드에 문제가 생기면 프로세스 전체에 영향을 미칠 수 있다. 

참고 자료