[운영체제] 3. Process(2),(3) - Thread

somi·2023년 6월 2일

[CS] 운영체제

목록 보기
4/15

복습)

  • 프로세스: 실행 중인 프로그램!
  • 프로세스의 문맥(context): 프로세스의 수행 정보 
  • PCB(Process Control Block): 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보를 담고 있는 데이터 구조
    - 프로세스의 상태 : Running, ready, blocked, suspended ...
    - 스케줄링 정보, 우선순위 등등 필요한 정보를 저장
    프로세스
    운영체제로부터 메모리 등 자원을 할당 받고 
    그 자원을 제어하여 작업을 수행하는데
    여기서 자원을 제어하고 작업을 수행하는게 스레드! 
    예) 크롬 브라우저(=프로세스)에서 네이버 검색하기(=스레드1) & 스포티파이 음악 듣기(=스레드2)

Thread?

  • 프로세스의 실행 단위, CPU의 수행단위
  • lightweight process(경량 프로세스)
    • 스레드는 각각의 제어 정보가 있고 각각의 작업을 수행하지만
    • 프로세스의 주소 공간(메모리)을 일부 공유한다. 
    • 프로세스가 여러개면 address space는 하나만 만들고 여러개의 스레드를 만들어서 메모리 낭비를 줄일 수 있다. 
    • 스레드 개념이 없던 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.
  • Thread의 구성
    각각의 스레드가 다른 스레드와 독립적을 실행되어야 하기 때문에 별도의 PC, register set, stack space를 사용한다. 
    • program counter(PC) - 현재 실행 중인 명령어의 주소
    • register set 
      레지스터: cpu에 위치한 고속 메모리, 명령어/연산에 필요한 데이터 임시 저장
    • stack space
  • Thread가 동료 thread와 공유하는 부분(=task)
    • code section 
    • data section
    • OS resource

:스레드끼리는 주소 공간의 data, code 영역을 공유 => 효율성
그러나 stack은 별도로 할당 받는다.  
스택 - 스레드의 지역변수, 함수 호출 등에 필요한 데이터 저장.
각 스레드는 자신만의 스택을 가지고 있어야 독립적으로 실행.

PCB에서 PC와 register를 제외한 나머지 프로세스 정보를 공유


Thread의 장점/단점

  • Responsiveness - 사용자 입장에서 빠른 응답!
    다중 스레드의 경우 하나의 스레드가 block된 상태여도 다른 스레드가 실행될 수 있다. 예시) 화면에 그림 기다릴 때 글자라도 먼저!
  • Resouce Sharing
    하나의 프로세스 안에 여러개의 스레드를 두면
    코드, 데이터 자원 효율적으로 활용 가능!
  • Economy 
    새로운 프로세스 하나 만드는 것보다 기존 프로세스에 스레드를 추가하는 것이 더 overhead(추가적 비용)가 적다. 문맥 교환할 때도 마찬가지.
  • Utilization of Multi Processor Architecutre
    만약 cpu가 여러개라면, 서로 다른 cpu 안에서 각각의 스레드가 작업해서 훨씬 효율적이다. 병렬적으로 일할 수 있음!

참고) 찾아본 스레드의 단점
자원의 공유로 인한 동기화 문제가 발생할 수 있다.
여러 스레드가 하나의 주소 공간과 자원을 공유하다보니
여러 스레드가 동시 수행하면,  디버깅 과정이 까다로울 수 있다.


싱글 스레드 vs 멀티 스레드

  • 싱글 스레드
    한 번에 하나의 작업만 처리 가능
    실행 순서와 우선순위 컨트롤 하기 쉽지만
    하나의 작업 끝나기 전까지는 다른 작업 수행 못함
  • 멀티 스레드
    각각의 스레드가 독립적으로 작업 수행 
    동시에 여러 작업 처리 가능 - 응답성 향상

참고) 
자바스크립트는 기본적으로 싱글스레드로 동작. 
단일 스레드로 코드를 실행하고 비동기 처리를 위해 콜백, promise, async/await 같은 매커니즘을 사용하는 것


Thread의 구현 방식

  • Kernel Thread
    • 운영체제가 스레드가 여러 개인 것을 알고 있다.
    • 스레드간의 CPU 교환을 ‘커널이’ CPU 스케줄링을 하듯이 관리
    • 커널 스레딩은 멀티 스레딩을 지원 - 여러개가 동시 실행 가능
    • 시스템 레벨의 작업 수행하고 운영체제 자체의 동작 제어하는데 사용
  • User Thread
    • 운영체제는 스레드가 여러 개인 것을 모르는 상태
    • 사용자 프로그램이 라이브러리의 지원을 받아 스스로 여러 개의 스레드들을 관리
    • 커널이 스레드의 존재를 모르기 때문에 구현에 제약이 있을 수 있다.
    • 운영체제는 사용자 스레드를 하나의 프로세스로 인식하고 context switching을 통해 스레드를 실행한다.
  • Real Time Thread?
    • 실시간 스레드는 실시간 시스템에서 사용되는 스레드
    • 시간 제약에 따라 특정한 시간 요구에 응답해야 함
    • 정확한 작업 완료 시간이 중요한 응용 프로그램에 사용
    • 높은 우선순위를 가지고 있으며, 운영체제는 이러한 스레드에 대한 스케줄링을 특별히 관리하여 실시간 요구에 최적화
profile
📝 It's been waiting for you

0개의 댓글