https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-

 

영상에서 얻고자하는것

어떻게 여러 프로그램이 컴퓨터 상에서 동시에 실행되는 원리를 알 수 있다.

 

사전배경지식 (프로세스의 의미)

프로그램(Program)이란 컴퓨터가 실행할 수 있는 명령어들의 집합이다.

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

CPU(Central Processing Unit) : 명령어를 실행하는 연산장치

메인 메모리(main memory) : 프로세스가 CPU에서 실행되기 위해 대기하는곳이다.

IO(input/output) : 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고받는것이다. 입출력 장치와 데이터를 주거나 받는 것이다.

 

단일 프로세스 시스템의 뜻과 단점

초창기의 시스템은 단일 프로세스 시스템으로 한번에 하나의 프로그램만 실행된다.

다른 프로그램을 실행하려면 먼저 실행하던 프로그램을 종료하고 실행해야한다.

단일프로세스 시스템의 단점은 CPU 사용률이 좋지않다.

 

프로그램 P1이 있다고 가정하자.

P1에서는 CPU 작업과 I/O 작업 둘다 한다.

CPU 작업을 하다가, I/O 작업을 하다가, CPU 작업을 하다가. ... 반복한다.

실행중인 프로그램이 I/O 작업을 하면, CPU는 아무것도 못한다.

 

이러한 해결책을 위해 멀티프로그래밍의 개념이 등장한다.

멀티프로그래밍의 등장과 특징

해결책은,

여러개의 프로그램을 메모리에 올려놓고 동시에 실행시키자! IO 작업이 발생하면 다른 프로세스가 CPU에서 실행된다.

 

예제를 보자.

P1과 P2가 존재한다.

하나의 CPU가 존재한다. 시간에 흐름에 따라 CPU에서 P1, P2가 실행될것이다.

 

P1 ->  P2   ->           대기                -> P1          -> P2

   P1 I/O   P2 I/O   P!I/O 종료                      ->P2 I/O 종료...

위와 같이 작동한다.

 

멀티 프로그래밍은 CPU 사용률을 극대화시키기 위한 목적이다.

멀티프로그래밍의 단점

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

P1이 CPU에서 엄창 많은 시간을 잡아먹는다면, P2는 P1 CPU 작업이 끝날떄까지 계속 대기해야한다.

 

이를 극복하고자프로세스는 아래의 멀티태스킹의 개념이 나온다.

 

멀티태스킹의 동작과 특징

이를 극복하고자프로세스는 한번 CPU를 사용할때 아주 작은시간만 CPU에서 실행되도록 한다.,

 

이에 대한 예시이다.

Process 1, Process 2가 존재한다고 가정한다.

CPU P1 -> P2 -> P1 -> P2 ....

계속 번갈아가면서 작업하는데 이떄 이 짧은 시간은 milli second라 할 수 있다.

아주 짧은시간동안 각 프로세스들이 작업한다.

이 멀티태스킹은 멀티프로그래밍과 유사하다.

동시에 여러 프로그램을 실행시키는 점과 유사하고, 거기에 더해 CPU Time을 아주 짧게 쪼개서 서로 번갈아가도록 실행할 수 있도록 한것이다.

 

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

사실상 교대로 실행되지만, 즉각적인 응답을 통해 여러 프로그램이 동시에 실행되는것처럼 느껴지게한다.

 

멀티태스킹의 아쉬움

1. 하나의 프로세스가 동시에 여러 작업을 수행하지는 못한다.

2. 프로세스의 컨텍스트 스위칭은 무거운 작업이다.

CPU에서 실행되기 위해서 Process A에서 Process B로 교체되는것은 무거운 작업이다.

3. 프로세스끼리 데이터 공유가 까다롭다.

프로세스는 독립적인 메모리 공간을 가지기에 두개의 프로그램을 실행시킨다고 하면, 

4. 듀얼코어가 등장했는데 잘쓰고싶다.

하나의 CPU 성능 개선이 어려워 한 CPU안에 두개의 코어를 두어서 전체적인 성능을 향상시키는 방향으로 전환한다.

 

이러한 위의 단점들에 대한 해결책으로 스레드의 개념이 나온다.

스레드(Thread)의 개념과 특징, 멀티스레딩의 등장

스레드의 특징이다.

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

한 프로세스 안에서 여러개의 작업을 동시에 하고 싶다.

 

2. CPU에서 실행되는 단위이다.(Unit of Execution)

이전에는 프로세스가 CPU에서 실행되는 단위였다면, 이제 프로세스 대신 쓰레드가 CPU에서 실행되는 단위가 되었다.

프로세스는 기본적으로 하나의  스레드를 가지게 되엇다.

 

3.  같은 프로세스의 스레드들끼리의 컨텍스트 스위칭이 가볍다.

스레드들은 자신들이 속한 프로세스의 메모리영역을 공유하기 떄문에 그렇다.

메모리영역을 공유하기에 같은 프로세스 안에서 스레드들끼리는 데이터 공유가 쉽다.

 

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

싱글 스레드 VS 멀티 스레드

 

4-1. Heap 메모리 영역을 공유한다.

4-2. 자신만의 고유한 영역을 가지는경우는 Stack 이다. Stack for Thread 0, 1, 2.

4-3. 각각의 쓰레드들을 가리키는 포인터 또한 따로 존재한다. Stack Pointer for Thread 0 , 1, 2

4-4. 이후에 다음에 실행될 명령어의 메모리 위치를 나타내는 Program Counter for Thread 0, 1, 2

 

핵심은, 같은 프로세스에 속한 쓰레드들은 그 프로세스의 메모리 영역을 공유한다.

그렇더라도, 스레드들만의 고유한 영역도 존재한다.

 

예제를 가져봅니다.

CPU가 1개 존재한다.

Process, 2개의Thread를 가지는.

 

CPU Single Core : 멀티 태스킹 방식으로 동작하기에 시간을 짧게 쪼개서 서로 나눠서 실행한다.

만약 CPU인데 코어가 2개인 CPU일경우 : Process가 병렬적으로 각 쓰레드가 1개씩 코어를 나눠서 실행한다.

하나의 프로세스가 동시에 여러 작업을 실행하는데 목적이다. 이 여러 작업은 Thread를 통해 실행한다.

스레드 등장으로 확장된 멀티태스킹의 개념

스레드가 등장하며 멀티태스킹 개념이 확장되었다.

기존에는 프로세스끼리의 아주 짧은 시간안의 time Swithcing이라면,

이제는 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 CPU time을 사용아는것이다.

 

멀티프로세싱 개념

두개 이상의 프로세서나 코어를 활용하는 시스템을 멀티프로세싱(Multi Processing)이라 한다.

 

예제로 살펴보는 개념들

싱글코어 CPU에 싱글-스레드 프로세스 두개가 있다고 가정한다.

CPU, Process A, Process B.

 

하나의 CPU를 가지고 나눠서 사용하기에 멀티 태스킹이 존재한다. ( O )

멀티스레딩은 아니다. (현재 싱글 스레드 프로세스이다.)

멀티프로세싱도 아니다. ( CPU가 1개이기에 아니다. 멀티프로세싱은 두개이상의 Process와 듀얼의 Core가 존재해야한다. )

 

싱글 코어 CPU에 듀얼-스레드 프로세스 한개가 존재한다.

멀티태스킹 ( O ) CPU 한개가지고 경함해야하기에 멀티태스킹이 맞다.

멀티스레딩( O ) 스레드가 두개이기에 맞다.

멀티프로세싱 ( X ) CPU가 1개이기에 Multi PRocessing은 아니다.

 

듀얼코어 CPU에 싱글 스레드 프로세스 두개이다.

멀티태스킹 ( X ) 코어 2개이기에 싱글 스레드가 각각 맡아서 진행되기에 멀티태스킹 아니다.

멀티스레딩 ( X ) 싱글스레드이다.

멀티 프로세싱 ( O ) CPU 코어가 2개이다.

 

듀얼코어 CPU에 듀얼 스레드 프로세스 한개이다.

멀티태스킹 ( X )

멀티스레딩 ( O )

멀티 프로세싱 ( O )

 

듀얼코어 CPU에 듀얼 스레드 프로세스 두개이다.

여러가지 경우의 수가 존재한다. 한 CPU내의 코어에 경합하는 PRocess의 Thread마다 다르다.

멀티태스킹 ( O ) 코어 하나당 2개의 스레드가 경합한다.

멀티스레딩 ( O ) 듀얼 스레드이기에 멀티스레딩. 한개의 프로세스가 각각 두개의 스레드로 동작한다.

멀티 프로세싱 ( O ) 

 

위의 예제가 가장 현대컴퓨터에서 가장 많이 사용되는 구조일 것 이다.

 

마무리

Thread는 OS level에서의 Thread이다.

User level에서의 Thread는 다루지 않았다.

+ Recent posts