티스토리 뷰

KOCW 이화여대 반효경 교수님의 2014년 운영체제 강의를 듣고 정리한 내용입니다.

프로세스 3

Thread

  • 프로세스 내부의 CPU 수행 단위 
  • 같은 일을 하는 process를 여러개 띄워놓고 싶다 → process 여러개 실행시 메모리 낭비 (독자적인 주소공간 = Code + Data + Stack)​ (즉, 프로세스 하나에 CPU 수행 단위만 여러개 두고 있게함 → Thread의 개념)
  • ❗️메모리 공간 하나만 띄우고 (프로세스 하나만 띄우고), 각 Program Counter가 code의 다른 부분 실행하게 함
  •  각 CPU 수행단위마다 `현재 register에 어떤 값을 넣고`, `P.C가 Code 어느 부분을 가르키며 실행하고 있는가` 를 별도로 유지함
  •  Thread 하나가 Code 어느 부분을 실행하다가 함수 호출을 하면 함수 호출/리턴 관련 정보를 Stack에 저장

Thread의 구성

각 Thread들이 독립적으로 가짐

  1. Program Counter
  2. Register set
  3. Stack space

Thread가 동료 Thread와 공유하는 부분

task라고 부름

  1. Code section
  2. Data section
  3. OS resources
Program counter + registers 👉🏻 Thread마다 별도로 갖게 됨

 

Thread의 장점

  1. Responsiveness (응답성)
    • 사용자 입장에서 빠른 것
    • 하나의 서버 스레드가 blocked (waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행 (running) 되어 빠른 처리를 할 수 있음
    • ex. 스레드가 여러개인 웹 브라우저
      • 웹 브라우저가 처음에 HTML 문서 로딩 → HTML에 포함된 이미지 다시 불러옴
      • 이미지 파일 불러오는 동안에 process를 block 시키는게 아니고
      • 이미지 파일을 불러오기 전에 process가 CPU를 얻어서 화면에 text만 먼저 display해줌
      • 비동기식
  2. Resource Sharing (자원 공유)
    • 똑같은 일을 하는 program이 여러개 있을 때 별도의 process로 사용하는 것 보다
    • 하나의 process를 만들고 그 안에 CPU 수행단위만 여러개를 두게 되면
    • Code/Data/각종 자원을 Thread들이 공유하게 됨
    • 자원을 효율적으로 쓸 수 있음
  3. Economy
    • Creating
      • 새로운 process 만드는 것보다 process 안에 thread 추가하는게 오버헤드가 적음
    • Context-Switching
      • 프로세스 사이에서 문맥 교환 일어나는 것은 오버헤드가 큼 (CPU 관련 정보 저장, cache memory flush)
      • 프로세스 내부에서 thread 간 문맥교환은 간단함 (동일한 주소공간을 쓰고 있기 때문. 대부분의 문맥은 그대로 사용할 수 있음)
  4. Utilization of MP Architectures (MP: Multi Processor)
    • 각각의 thread가 서로 다른 CPU에서 병렬적으로 일할 수 있음 (결과를 빨리 얻을 수 있음)
  5. CPU가 여러개 있는 환경에서 thread를 사용했을 때 장점
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크