article thumbnail image
Published 2020. 4. 21. 12:48

 

  1. Thread
    1. 하나의 프로세스에는 하나의 control만 존재하기 때문에 프로세스는 한번에 하나의 일만 처리할 수 있다.
    2. 그러나 쓰레드를 사용함으로써 Parallelism하게 사용할 수 있다.
    3. 프로세스와 마친가지로 스케줄링 단위(Excution Unit)이다. 프로세스보다 더 작은 단위이다.
    4. 프로세스로부터 Excution state를 뽑아내서 만든다.
    5. 프로세스의 Code 영역, Data 영역, Heap 영역은 thread 간에 공유된다.
    6. 하지만 Stack은 쓰레드 각자 따로 있다. 상대 Stack을 읽을 순 있다.
    7. 쓰레드끼리는 IPC없이 통신할 수 있다. 같은 Address space를 공유한다.
    8. 쓰레드끼리는 같은 메모리를 사용하므로 switch 비용이 적다.
    9. Process들은 각자 자기의 Thread를 가지고 있다. 여러개의 Thread를 가질 수 있다. 다른 Process로 옮겨가진 않는다.
    10. 스케줄러는 Thread 단위로 Excution state가 있고, Thread 단위로 Processor에 넣어서 스케줄링한다.
  2. Thread의 종류
    1. Single-threaded process : main 함수가 한개 있는 것
    2. Multi-threaded process : 여러개의 실이 main 함수를 돌고있음
  3. Concurrency : 여러개를 돌아가면서 조금씩 하는 것
  4. Parallelism : 동시에 하는 것
    1. Data Parallelism : 하나의 데이터를 여러개로 쪼갠 후, 같은 Operation을 Parrallel하게 처리하는 것
    2. Task Parallelism : 하나의 데이터를 다른 Operation으로 처리하는 것
  5. Amdahl's Law : Maximum speed 구하는 공식

 

 


하나의 프로세스는 여러개의 멀티코어를 사용할 수 없다는 단점이 있다.

하나의 프로세스가 하나의 코어로 연결이 되기 때문이다.

다른 프로세스랑 얘기하는게 쉬운게 아니다.

프로세스가 서로 다르면 걔내끼리 address space가 다르다.

 

프로세스A           프로세스B

프로세스A에 만든 트리를 프로세스B에 전송하고 싶은데

 

하나의 프로세스를 여러개의 프로세서로 돌리는 방법이 없을까?

concurrency : 동시다발적으로 발생

 


PCB (process control block) : 프로세스에 관한 모든 정보가 있는 곳

Thread : 프로세스로부터 실행 상태(execution state)를 뽑아내서 만든 것


int ...

for ...

 

같은 명령문을 실처럼 꿰어가면서 코드를 실행하는 것이 스레드이다.


 

스레드는 두종류가 있다.

Single-threaded process : 우리가 지금까지 만들어본 main함수 한 개가 있는 것 

Multi-threaded process : 꿰는 애가 한 프로세스에 여러개가 만들어 지는 것

여러개의 실이 main함수를 돌고 있음


 

하나의 프로세스 안에 여러개의 실행이 동시다발적으로 이루어진다.

Thread들은 같은 Process 안에서 돌고 있다.

서로 다른 Thread는 같은 하나의 address space를 공유한다.

 

그런데 스택은 공유하지 않는다.

Code, Data, Heap 은 공유한다.

하지만 Stack은 각자 가지고 있다. 자기 Stack은 다 따로 있다.


 

Process들은 각자 자기의 Thread를 가지고 있다.

상대 스택을 읽을 순 있다. 접근할 수는 있다.

데이터는 공유한다.


 

다 공유되는 자원 : Code, Data, Heap

같은 동영상을 병렬적으로 보고 있다. 서로서로의 진도 : Excution state는 다를 수 있다.

 

프로세스에는 address space가 공유되고 있고, address space에는 Code, Data, Heap이 있고

하나의 프로세스 안에는 여러개의 스레드를 가지고 있고,

스레드는 자신만의 excution state를 가지고 있고,

excution state는 스택과 프로그램 카운터를 얘기할 수 있는데, 그것을 스레드마다 따로따로 하나씩 가지고 있다.


 

main함수부터 실행하는 Thread가 들어올텐데

들어와서 Thread를 새로 만드는 함수를 부르게 되면

Thread를 하나 만들고 원래의 Thread는 그대로 진행된다. 


하나의 Process 안에는 여러개Thread가 존재할 수 있다.

 

그리고 어떤 Thread가 어떤 Process에 있으면 그 Process고정된다. 다른 Process로 옮겨가진 않는다.

ProcessThread가 돌아가는 그릇이라고 보면 된다. 

그릇 안에서 PID, address space 등을 공유한다.

 

하나의 Process인데 여러개의 Processor로 매핑이 된다.

각 Thread마다 Process에 있는 여러개의 Thread를 각각 서로다른 프로세서에 매핑을 해서 돌린다.

이게 된다 이제부터는.

 

운영체제에 있는 스케줄러는 Thread 단위로 실행 상태가 있고, Thread 단위Processor에 넣어서 스케줄링 해서 돌리게 된다.

 


 

이렇게 Thread를 만듦으로써 concurrency를 굉장히 쉽게 만들 수 있다.

원래는 address space를 통째로 완전히 새로 만들어서 실행했어야 했는데,

Thread가 생기면 그럴 필요 없다.

 


Concurrency : 4개를 돌아가면서 조금씩 하는 것, 운체 객프 과제 조금씩 하기

Parallelism : 동시에 하는 것, 운체 객프 과제 양손으로 하기(인간은 불가능)

 


 

Data parallelism : 하나의 데이터를 여러개로 쪼갠 다음에 같은 operation을 parallel 하게 처리하는 것

하나의 데이터를 두고 평균을 계산하는데 각가 다른 부분의 데이터의 평균을 구하는 것

Task parallelism : 하나의 데이터를 서로다른 코어가 다른 opration을 같은 데이터에다 대고 처리하는 것

하나의 데이터를 두고 평균을 계산하거나 표준편차를 구하는 것


 Amdahl's Law 

Serial 한 부분, Parallel 한 부분을 처리하자.

Parallel한 부분의 성능을 개선했을 때 얼마의 시간이 걸리는가.

S부분은 절대 안바뀐다.

N = 코어를 몇개 쓸것인가.

S = serial portion

S + (1-S)/N = 실행시간

1/실행시간 = 스피드업

그래서 maximum 스피드업은 1/S가 된다.

 

 

 

'🚦 Server > Operating System' 카테고리의 다른 글

PA1: My Simple Shell  (0) 2020.04.27
08. Threads (2)  (0) 2020.04.23
06. Inter-Process Communication  (0) 2020.04.14
05. Processes  (0) 2020.04.06
04. Operating System Structures (2)  (0) 2020.03.30
복사했습니다!