쓰레드란 무엇인가?

운영체제

2020. 5. 5. 20:39

1. Thread란?

  • Thread(쓰레드)란 프로그램 내부의 흐름, 맥 과 같음
  • 일반적으로 하나의 프로그램은 하나의 쓰레드가 있음

 

2. Multi Thread (다중 쓰레드)

  • 하나의 프로그램에 2개 이상의 맥이 있는 경우를 말함
  • 맥이 빠른 시간 간격으로 스위칭 된다 => 여러 맥이 동시에 실행되는 것처럼 보인다
  • 시공유 시스템이 프로세스를 빠르게 스위칭해서 동시에 실행하는 것 처럼 보이게 하는 것과 비슷하게
  • 여러 쓰레드를 빠른 시간에 스위칭하여 마치 동시에 두개의 맥이 흐르는 것 처럼 보이게 만든다.
  • 실제로는 한 순간에는 하나만 실행되지만, 매우 빠르게 전환되어 마치 동시에 실행되는 것 처럼 보인다.
  • Concurrent (동시성, 그러나 어느 한순간에는 하나만, O) vs Simultaneous (동시성, 진짜 동시에 두개, X)

 

3. Time Sharing System?

[그림] 지금까지 배웠던 Time sharing system

  • 우리가 배웠던 Time Sharing System은 다음과 같다. (Round Robin Scheduling based)
  • 메모리의 왼쪽에서 오른쪽으로 시간이 흐른다고 생각하면 된다. (사각형이 메모리이다...)
  • 프로세스 P1이 실행되고나면 p2가 실행되고 그 뒤로 p3, p4가 실행되고 다시 p1, p2, p3, p4순으로 실핸된다
  • 그러나 이 것은 싱글 쓰레드 프로그램을 돌리던, 옛날 운영체제이고 요즘은 아래와 같이 실행 된다.

 

[그림] 멀티쓰레드 TIme shaing System

  • 요즘엔 거의 모든 프로그램이 멀티쓰레드로 돌기 떄문에 위와 같이 실행된다.
  • P1, 2, 3에서 줄이 왔다갔다 하는데, 이 부분들이 매우 빨리 전환되면서 두개의 라인이
  • 동시에 실행되는 것 처럼 보이게 하는 멀티 쓰레드 부분이다.
  • 즉, 멀티쓰레드 환경에선 Context Switching의 단위가 프로세스가 아니라 쓰레드이다.

 

4. Thread의 구조

  • 기본적으로 하나의 프로세스는 하나의 쓰레드를 보유하고 있음
  • 그러나 멀티쓰레드 프로세스는 하나의 프로세스가 다수의 쓰레드를 보유하고 있음
  • 쓰레드 간에 code, data 영역과 OS의 자원(file, I/O)등은 함께 공유하지만
  • pc, sp, stack, register 등 실행에 직접적인 영향을 미치는 여러 포인터/레지스터는 공유하지 않음
  • 스택도 아예 따로 씀. 스택을 같이 쓰면 진짜 대환장 파티가 날것임. 아예 다른 곳에서 스택 fp를 잡음
  • pc나 sp가 다르게 설정되어있기 때문에 거의 동시에 여러 곳의 코드를 호출하는 것임

 

5. Reference

 

운영체제

운영체제의 정의 및 역할 등에 대해 알아보고, 운영체제의 주요 요소들, 즉 프로세스 관리, 주기억장치 관리, 파일 시스템 등에 대해 공부한다.

www.kocw.net