Process 2

뚝딱이·2023년 10월 13일
0

운영체제

목록 보기
6/15
post-thumbnail

Thread

A Thread is a basic unit of CPU utilization

lightweight process라고 부른다. 프로세스를 여러개 두는 것 보다 스레드를 여러개 두는 것이 더 light하다.

프로세스 내부에 CPU 수행단위가 여러개 있는 경우이다.
프로세스가 하나 주어지면 code, data, stack(thread1의 stack, thread2의 stack ...) 같은 일을 하는게 여러개라면 프로세스 하나에 Thread를 여러개 둬 PC를 명시해 실행한다.

cpu 수행 단위가 다르므로 stack은 따로 두지만 공유할 수 있는 건 최대한 공유한다. PCB도 최대한 공유하지만 CPU 수행과 관련된 부분 (PC, register, stack)만 별도로 가진다.

구성

  • program counter
  • register set
  • stack space

Thread가 동료 thread와 공유하는 부분 ( = task)

  • code section
  • data section
  • OS resources

장점

  • 다중 스레드로 구성된 task 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스트 내의 다른 스레드가 실행되어 빠른 처리를 할 수 있다.
    • 사용자의 빠른 응답성을 보일 수 있다.

예) 웹 브라우저에 네이버 -> 네트워크를 통해 웹페이지를 읽어옴 (I/O 작업) -> 웹 페이지를 읽어오는 동안에는 I/O 이므로 느리다. 따라서 사용자 입장에선 답답하다 -> 여러 스레드로 만들어놓으면 하나의 스레드가 네이버의 이미지를 읽어오길 기다리고 다른 스레드가 텍스트라도 먼저 읽어와 보여줌

  • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.
    • 다중 스레드가 아닌 다중 프로세스로 만들어진다면 독자적인 주소 공간이 만들어져야 해 자원을 낭비하게 된다.
    • 웹 브라우저를 여러개 띄우거나 한글을 여러개 띄워놓을 때
    • 하나의 프로세스에 스레드를 여러개 띄워놓으면 자원을 효율적으로 관리하고 성능향상이 될 수 있다.
  • 스레드를 사용하면 병렬성을 높일 수 있다.

다중 스레드의 경우 CPU 관련 정보만 각각 가지고 있는다.

Responsiveness

ex) multi-threaded Web
웹 브라우저를 띄워놓고 포털 사이트의 홈페이지 주소 입력 -> html 문서가 날아옴 -> display 하려고 봤더니 이미지가 필요 -> 이미지 요청 -> 받아서 넣고 웹 페이지 완성

html 문서를 받아온 다음에 이미지 요청 -> 오래 걸리는 요청이므로 보통은 block 시킬 것이다. 그렇다면 block됐으므로 사용자 입장에서는 답답할 것이다. 그래서 다중 스레드를 사용해 display하는 스레드는 계속 실행하고 네트워크에 이미지를 요청하는 스레드만 block하면 사용자 입장에서는 답답하지 않을 것이다.

이미지 파일을 읽어오는 동안 프로세스를 block 시키지 않고 html을 통해 text만 display를 보여준다. -> I/O 와 무관하게 실행하기 때문에 비동기식이라고 할 수 있다.

Resource Sharing

자원을 공유할 수 있다. 만약 똑같은 일을 하는 프로그램이 여러개 있는데 이들을 별도의 프로세스로 만들기 보다는 하나의 프로세스에서 CPU 수행단위만 여러개 두면 code, data, 프로세스의 자원을 공유해 효율적으로 사용할 수 있다.

Economy

프로세스를 하나 만드는 것은 오버헤드가 크지만 프로세스 하나에 스레드를 추가 하는 것은 오버헤드가 그렇게 크지 않다. 프로세스 끼리의 context switch는 오버헤드가 크지만 thread 끼리의 CPU switch는 대부분의 문맥을 그대로 사용할 수 있기 때문에 부담이 적다.

따라서 프로세스 보다 thread를 생성하고 CPU switching하는 것이 더 낫다. Solaris의 경우 overhead가 각각 30배, 5배가 더 든다.

Utilization of MP Architectures

MP : multi processor -> CPU가 여러개인 구조

각 스레드가 다른 CPU에서 병렬적으로 실행될 수 있다.

구현 방법

커널, 라이브러리의 지원을 받는 것을 각각 Kernel Threads, User Thread라 한다.

  • Kernel Threads
    • 스레드가 여러개 있다는 사실을 운영체제 커널이 알고 있다.
    • 하나의 스레드에서 다른 스레드로 CPU가 넘어가는 것도 커널이 CPU 스케줄링을 하듯이 넘겨주게 된다.
  • User Threads
    • 프로세스안에 스레드가 여러개 있다는 것을 운영체제는 모른다.
    • user 프로그램이 스스로 관리한다. 따라서 구현상의 제약점이 있을 수 있다.
    • 사용자 수준에서 스레드를 구현

real time을 지원하는 스레드도 있다.

출처

Operating System Concepts 10th
KOCW 강의 - [운영체제] 이화여자대학교 반효경 교수

profile
백엔드 개발자 지망생

0개의 댓글