프로그램, 스레드, 멀티 프로세싱, 멀티 프로그래밍

정민교·2023년 7월 27일
0

OS

목록 보기
1/1

프로그램

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

프로세스

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

CPU

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

I/O

파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받는 작업, 입출력 장치와 데이터를 주고 받는 작업을 I/O라고 한다.

단일 프로세스 시스템

한 번에 하나의 프로그램만 실행할 수 있음. 다른 프로그램을 실행하고 싶으면 현재 실행중인 프로그램을 종료하고 실행할 수 있음.

I/O 작업이 발생하면 CPU는 일을 하지 않고 있다가 I/O 작업이 끝나면 다시 일을 시작함.

그래서 CPU 사용률이 좋지 않음.

해결책

여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시킨다. I/O 작업이 발생하면 다른 프로세스가 CPU에서 실행될 수 있게 한다.

위와 같은 종류의 시스템을 멀티 프로그래밍이라고 함.

단점

하나의 프로세스가 CPU를 사용하는 시간이 길어지면 다른 프로세스는 계속 기다려야 함.

해결책

프로세스가 CPU를 사용할 때 아주 짧은 시간(quantum) 동안만 CPU에서 실행할 수 있도록 하자. 그러면 여러 프로세스가 CPU를 사용할 수 있을 것이다.

멀티 태스킹

그렇게 등장하게 된 것이 멀티 태스킹이다.

이 퀀텀 시간 동안만 CPU를 사용할 수 있도록 하는 시스템이 멀티 태스킹 시스템이다.

멀티 태스킹의 목적은 프로세스의 응답 시간을 최소화 시키는 것이 목적이다. 일반 사용자로 하여금, 여러 프로세스가 진짜로 동시에 실행되고 있는 것처럼 느낄 수 있도록 하는 것을 말한다.

실제로는 여러 프로세스가 번갈아가며 CPU를 사용하는 것일 뿐이지만

아쉬운 점

  1. 하나의 여러 프로세스가 동시에 실행되는 것을 시스템이 지원하게 됐지만, 하나의 프로세스가 여러 작업을 동시에 수행하는 것은 하지 못한다는 점

  2. 프로세스 컨텍스트 스위칭 작업이 무겁다는 점

  3. 프로세스끼리 데이터 공유가 까다로운 점. 프로세스 별로 독립된 메모리 공간을 할당받기 때문임. 따라서 서로 다른 프로세스가 가진 메모리 공간은 별개의 공간임.

  4. CPU의 코어 수가 증가해왔고, 이러한 CPU 코어를 잘 쓸 수 있는 시스템을 사용하고 싶다는 점
    하나의 CPU의 성능을 계속 발전시켰는데, 이로 인해서 발열 등의 이슈가 생겨서 개발이 쉽지 않음. 그래서 하나의 CPU 안에 여러 코어를 둠으로써 전체적인 성능을 발전시키는 방향으로 나아가게 됨.

스레드

그 해결책이 스레드다.

특징

  1. 프로세스는 한 개 이상의 스레드를 가질 수 있다.
    스레드의 등장 배경이 하나의 프로세스 안에서 여러 작업을 동시에 실행하기 위해 나온 것이기 때문에 이 점은 당연한 것이다.

  2. 스레드는 CPU에서 실행되는 단위(unit of execution)
    옛날에는 프로세스가 CPU에서 실행되는 단위었으나 프로세스 대신 스레드가 CPU에서 실행되는 단위가 되었다.

  3. 같은 프로세스의 스레드들끼리의 컨텍스트 스위칭은 가볍다.
    컨텍스트 스위칭은 CPU가 하나의 프로세스를 실행하다 실행할 프로세스를 교체하는 작업임.

  4. 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유함
    따라서 같은 프로세스 안의 스레드들끼리는 데이터 공유가 쉬움

프로세스가 가지는 메모리 영역 구조

싱글 스레드, 멀티 스레드

싱글 스레드
code(text segment, program counter) - initialized vars(data segment) - uninitialized vars(BSS segment) - heap - stack(stack pointer)

멀티스레드
code(text segment, PC for thread1, 0, 2) - initialized vard(data segment) - uninitialized vars(BSS segment) - heap - stack for thread 2(stack pointer for thread2) - stack for thread 1(stack pointer for thread1) - stack for thread 0(stack pointer for thread0)

멀티스레드에서 각 스레드는 heap 영역의 데이터를 공유, 각 스레드에 해당하는 스택 영역은 스레드 고유의 영역임.

program counter 다음번에 실행해야 할 명령어가 있는 메모리 주소를 가리키는 포인터

예시

두 개의 코어를 가지는 CPU가 있고, 두 개의 스레드를 가지는 프로세스가 존재함
그러면 각 스레드를 각 CPU 코어가 실행함. 진정한 병렬 실행임.

멀티스레딩은 하나의 프로세스가 동시에 여러 작업을 실행하는 것이 목적이다.

스레드의 등장으로 멀티 태스킹의 개념도 확장이 되었음.

기존에는 아주 짧은 실행 시간을 갖는 프로세스끼리의 스위칭이었다면, 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 CPU time을 나눠 갖는 것이다.

멀티 프로세싱

두 개 이상의 프로세서나 코어를 호라용하는 시스템을 멀티 프로세싱이라고 함.

profile
백엔드 개발자

0개의 댓글