mini_me
우당탕탕 코드 프로젝트
mini_me
전체 방문자
오늘
어제
  • 분류 전체보기 (30)
    • 알고리즘 (4)
    • 자료구조 (5)
    • 운영체제 ( OS ) (7)
    • JSP (6)
    • 스프링 (5)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • mst
  • #연결리스트 #자료구조 #연결 리스트 #전공 공부
  • 백엔드
  • Database 생성 및 권한
  • K6
  • smoke test
  • spanning tree
  • load teet
  • ci/cd
  • dockerhub
  • 부하테스트
  • SQLD
  • leetcode
  • Greedy Algorithm
  • Oracle Cloud
  • docker
  • 자바스크립트
  • trie
  • graph algorithm
  • 자동화
  • grafana
  • 그래프 알고리즘
  • influxdb
  • jenkins
  • 디렉티브 태그
  • 연결리스트 # 열혈 자료구조 #자료구조
  • 알고리즘
  • 그리디 알고리즘
  • Clone Graph
  • 데이터 모델링

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
mini_me

우당탕탕 코드 프로젝트

[운영체제] Thread 정리본
운영체제 ( OS )

[운영체제] Thread 정리본

2021. 4. 26. 14:04

4장

쓰레드

l  Thread : 프로세서보다 더 작은  단위의 CPU활용단위이다.

l

-       같은 프로세서안에 존재하는 쓰레드들은 프로그램 코드, 데이터 등

운영체제가 제공해주는 소스들을 공유하는 특징을 가지고 있다.

-       멀티 쓰레드 : 장점 ) 모듈러하게 소프트웨어 만들 수 있다.

   

 특징 )

①    각각의 프로세서들이 독립적으로 실행되어야 하기 때문에 레지스터, 스텍들이 각각 따로 존재한다.

②    레지스터, 스택들 제외 하고 나머지 (코드, 데이터, 파일)들을 공유하기 때문에 메모리 사이즈가 작아지고, 데이터 공유가 더 쉽다.

③    여러가지 Task들을 운영가능 / 빠르게 문제 해결가능

④    소스 공유측면에서도 뛰어나다.

멀티 프로세서의 경우 별도의 메모리 공간을 가지고 Message Passing의 매커니즘을 이용해 데이터를 주고받지만

멀티 쓰레드는 같은 프로세서 내의 쓰레드들은 자원 공유하기 때문이다.

⑤    멀티 프로세서보다 경제적인 측면에서 유리하다.

또한 프로세서를 생성하는 것보다 간편, 경제적,

 쓰레드 생성이 더 빠르게 이뤄진다.

⑥    멀티 프로세서의 경우, 각 프로세서별로 메모리를 할당해야 하지만 멀티 쓰레드는 프로세서내에 쓰레드가 만들어지기 때문에

별도로 메모리 할당할 필요없다.

 

l  Multicore Programming

여러 개의 프로세서가 프로그래밍 할 수 있도록 지원한다.

-       Parallelism

병렬화는 시스템이 동시에 둘 이상의 작업을 수행할 수 있음을 의미한다.

 

①    Data parallelism : 데이터를 나눠서 각각의 데이터를 동시에 처리,

데이터들이 서로 다른 코어에서 실행된다.

②    Task parallelism : 테스크가 하는 역할이 다 똑같아 .

 데이터를 가져와 동일한 테스크가 동시에 도는 것

-       single-core system: 물리적으로 실행할 수 있는 코아 하나뿐,

임의의 한 시간에서 실행할 수 있는 쓰레드는 하나뿐,

-       multi-core system : 각 코아별로 쓰레드들 실행 가능

 어느 한시점에서 실행되는 쓰레드 여러 개 존재 가능

 

l  Multithreading Models

-       유저 쓰레드 : 유저 스페이스에서 동작하는 쓰레드

-       커널 쓰레드 : 커널 스페이스에서 동작하는 쓰레드

쓰레드간의 맵핑이 필요해진다.

-       Many-to-One Model (맵핑 모델)

여러 개의 유저 쓰레드가 하나의 커널 쓰레드로

ü  문제점 : 예를 들어 한 쓰레드가 시스템 콜 통해 블락킹하는 시스템 콜 요청 -> 커널 쓰레드는 이를 위한 작업해, 그러면 다른 쓰레드는 요청 할 수 없게되고, 블락킹할 수밖에 없게됨

(Blocking : 데이터를 보내면 받아야 되는 놈이 받을 때까지 기다리는 것

             데이터가 받는 놈한테 전달될때까지 계속 기다리고 있다)

è  원투원 쓰레드쓰면된다

-       One-to-One Model

유저쓰레드 수 만큼 커널 쓰레드 수 생성 ,

블락킹되는 스레드 존재 불가

Examples

 Windows

 Linux

 Solaris 9 and later

è  두가지 방법을 혼합시킨거

-       Many-to-Many Model

유저 쓰레드 – n개, 커널 쓰레드 – m개

운영체제가 충분한 수의 커널 스레드를 생성할 수 있도록 허용

Windows with the ThreadFiber package

-       Two-level

사용자 스레드가 커널 스레드에 바인딩될 수 있다는 점을 제외하면 많은 모델과 유사합니다.

 

l  Signal Handling

기본적으로 유닉스에서는 프로세서에게 운영체제가 어떠한 알람을 던져줄 때 시그널을 사용

프로그램실행시 컨트롤 c를 호출하게 되면 운영체제가 kill이라는 시그널을 프로세서에게 전달해준다. 컨트롤 c라는 이벤트에서 kill이라는 시그널이 발생하게 되면 그킬이라는 시그널이 프로세서에게 전달된다.

프로세서는 deflaut, user – defined signal handler을 가지고 있다,

Default signal handler : 프로세서를 죽이는 것, 시그널을 무시한다.

user – defined signal handler : 사용자가 특정 시그널에 대해서 어떻게 처리하겠다하고 정의해두는 것

 

l  Thread Cancellation

한 쓰레드가 다른 쓰레드를 kill하는 것

l  Thread Local storage

전역 변수를 선언하게 되면 모든 쓰레드들이 이를 공유하게 된다.

단점은 각 쓰레드별로 전역변수를 가질 수 없는 단점이 멀티쓰레드의 단점

그래서 각 쓰레드들 별로 각 쓰레들이 가질수 있는 독자적인 static data를 만들어주자

l  유저 쓰레드와 커널 쓰레드간의 커뮤니케이션 어떻게 할것인가

유저쓰레드 레벨에서는 유저쓰레드를 스케줄링 할 때 LWp 대상으로 한다.

LWP와 커널 스레드는 1대1

Upcall : 이를 수행하게 되면 LWP의 upcall handler가 호출되게 되어 유저쓰레드 레벨로 커널쓰레드로부터 전달받은 내용을 유저쓰레드에게 전달

반응형

'운영체제 ( OS )' 카테고리의 다른 글

[운영체제 ] 6주차 정리본  (0) 2021.04.26
[운영체제 ] 5주차 정리본  (0) 2021.04.26
[운영체제 ] 3장 정리본  (0) 2021.04.26
[운영체제] [ 1주차 내용 정리 전 필기본]  (0) 2021.03.25
[운영체제] [ Thread ]  (0) 2021.03.25
    '운영체제 ( OS )' 카테고리의 다른 글
    • [운영체제 ] 5주차 정리본
    • [운영체제 ] 3장 정리본
    • [운영체제] [ 1주차 내용 정리 전 필기본]
    • [운영체제] [ Thread ]
    mini_me
    mini_me

    티스토리툴바