[운영체제] #14강

Junyoung Park·2022년 8월 3일
0

운영체제

목록 보기
14/25
post-thumbnail

스레드

  • 프로세스: CPU가 프로그램을 실행하는 추상화. 실행 상태, protection domain → 한 개의 실행 흐름을 가진 프로세스 = 여러 개의 실행 흐름을 가진 스레드
  • 스레드: 프로세스 내 실행 흐름, PC, 레지스터, 스택으로 구성 → 스레드는 속한 프로세스의 데이터, 코드를 다른 스레드와 공유하기 때문에 TBL, cache flush를 하지 않아도 되므로 컨텍스트 스위칭 비용보다 더 적게 지불, 효율적. 멀티 스레드가 동일한 태스크를 수행 시 작업 상황에 따라 의존적일 수도 있음

멀티 스레드

  • 어플리케이션: 기능 별 스레드화(UI 업데이트, 데이터 패치 등)
  • 프로세스 생성보다 스레드 생성이 보다 경량화 → 낮은 비용 소모
  • 커널 - 멀티 스레드로 구성

  • 웹 서버: 클라이언트 요청 → 새로운 스레드 생성
  • 프로세스: protection domain, IPC를 통해 통신, heavy weight(컨텍스트 스위칭으로 PCB에 저장해야 하기 때문에 오버헤드 높음)
  • 스레드: 코드, 데이터 섹션이 스레드 간에 공유, light weight(주소 공간 공유하므로 TLB, cache flush 불필요)

스레드의 장점

  1. 응답성: 특정 스레드에 인터럽트가 올 때에도 다른 스레드가 곧바로 응답 가능
  2. 자원 공유: 멀티 스레드가 주소 공간을 공유하기 때문
  3. 퍼포먼스: 프로세스 생성보다 비용이 적고 메모리 공간을 새롭게 할당받지 않아도 되기 때문에 퍼포먼스 높음
  4. 확장성: 멀티 프로세서 구조 이점

멀티코어 프로그래밍

  • 멀티코어/멀티 프로세서 시스템은 프로그래밍 중 고려할 사항이 많음
  • Parallelism: 특정 작업을 여러 프로세서가 동시에 진행. (1). 데이터 병렬화(데이터를 여러 개로 분리) (2). 태스크 병렬화(작업을 여러 명령어로 분리, 동시 진행)
  • Concurrency: 여러 작업을 한 프로세서가 동시에 진행

  • HW 스레드: 하나의 코어에서 여러 개의 스레드를 동시에 실행할 수 있도록 HW 지원
  • 멀티 스레드 → 멀티 코어에서 매유 효율적. OS에서 코어를 하나의 프로세서로 인식하고 스케줄링, 스레드를 코어에 할당, 캐시를 공유하기 때문에 멀티 스레딩 환경에 효율적
  • 스레드와 처리량(throughput) 정비례하지만 임계점 존재 → 스레드 스위칭 비용으로 인해 스레드 개수가 늘어난다 하더라도 성능에 한계 존재 → 암달의 법칙을 통한 병렬/순차 퍼센티지에 따른 개선 성능 파악 가능
  • 멀티 코어 환경 → 로드 밸런싱 매우 중요(여러 스레드가 공평한 작업을 할당받을 수 있도록)

유저 레벨 스레드

  • 유저 레벨 라이브러리가 관리
  • POSIX, Windows, Java 스레드
  • 고성능 - 유저 모드 컨텍스트만 유지하면 된다.
  • 스레드가 시스템 콜을 호출할 때 전체 스레드가 커널에 의해 막힌다. → 멀티 스레드는 곧 하나의 프로세스이기 때문에, 커널이 하나의 스레드를 '멈추려면' 스레드가 속한 그 프로세스 하나가 멈춘다.

커널 레벨 스레드

  • 커널이 스레드를 관리하는 구조
  • 일반 OS 모두 커널 레벨 스레드 사용(Wndows, Linux 등)
  • 고도의 병렬화 기법 사용
  • 각 스레드는 시스템 콜을 배타적으로 사용 → 다른 스레드의 시스템 콜에 의해 막히지 않음
  • 스레드 생성 및 관리 비용이 큼 → 커널 레벨 컨텍스트 및 메타데이터 포함하기 때문에 스레드 PCB 크기를 키워야 함

유저 - 커널 멀티스레딩 모델

Many-to-One

  • 다대일
  • 유저 레벨 스레드 N개 : 커널 레벨 스레드 1개
  • 스레드 하나가 블락될 때 모든 스레드가 블락(많은 스레드는 멀티 코어 시스템 상에서 병렬적으로 실행되지 않을 것. 한 번에 커널에서 하나만 작동하기 때문)
  • 다대일 모델을 사용하는 경우가 많지 않음
profile
JUST DO IT

0개의 댓글