운영체제(OS)

[OS] Concurrency

서노리 2022. 10. 27. 03:01
반응형

프로세스의 특성

OS에서 프로세스의 역할 중 첫 번째는 자원 소유의 단위이다. 자원이라는 것은 메모리, I/O device, 파일 시스템 등을 의미하며 프로세스마다 메모리에 서로 다른 공간을 할당하는 것이 그 예이다. 두 번째는 스케줄링의 단위이다. 문맥 교환은 프로세스 사이에 발생하면서 다음 실행될 프로세스를 선택한다. 하지만 이러한 프로세스의 두 가지 역할은 서로 독립적이다. 따라서 OS는 쓰레드라는 단위를 만들어 원래 프로세스가 하던 두 번째 역할인 스케줄링의 단위를 맡도록 정의하였다.

 

Multi-thread

OS가 하나의 프로세스 내에 여러 쓰레드를 지원하는 것을 다중 쓰레딩 (kernel-level multi thread) 이라고 한다. 

Window, Mac OS 등등 최신 운영체제는 모두 4사분면과 같은 다중 사용자 프로세스, 다중 쓰레드를 지원하는 방식을 채택하고 있다. 

  • 다중 쓰레드 환경에서 프로세스는 보호의 단위와 자원할당의 단위로 정의
    - 프로세스 별로 자원을 할당하고 다른 프로세스가 자신의 자원에 접근하지 못하도록 보호

  • 프로세스는 하나 이상의 쓰레드를 가지며 각 쓰레드는 다음 사항들을 포함
    - 쓰레드 수행 상태 (수행, 준비 등)
    - 독립된 program counter과 stack 영역
    - stack 영역을 제외한 나머지 메모리 영역은 같은 프로세스 내의 다른 쓰레드들과 공유

※ 프로세스와 쓰레드의 유사점

  • 문맥 교환의 단위
  • program counter를 보유

 

※ 프로세스와 쓰레드의 차이점

  • 프로세스는 PCB로 관리하지만 쓰레드는 TCB(thread control block)로 관리
  • 프로세스는 다른 프로세스의 자원에 접근할 수 없지만 쓰레드는 다른 쓰레드의 자원에 접근 가능
  • 프로세스 단위의 문맥 교환 후에는 메모리 주소 공간이 달라지지만, 쓰레드 단위의 문맥 교환 후에는 메모리 주소 공간의 변화가 없음

※ 성능면에서 쓰레드의 장점

  • 새로운 프로세스를 생성하는 시간보다 새로운 쓰레드를 생성하는 시간이 더 짧음
  • 프로세스 종료시간보다 쓰레드 종료시간이 더 짧음
  • 프로세스 단위 문맥 교환보다 쓰레드 단위 문맥 교환이 더 효율적임
  • 서로 다른 수행 프로그램 간 통신에서도 효율적임

 

※ 다중 쓰레딩의 장점

  • 다중 CPU 구조에서는 각각의 쓰레드가 각각의 CPU에서 병렬로 수행될 수 있음
  • I/O와 다른 연산을 동시에 할 수 있음

쓰레드의 상태

쓰레드의 상태는 프로세스의 상태와는 별개이다. 쓰레드의 상태에서는 suspend가 존재하지 않는데 suspend라는 것 자체가 프로세스 전체가 swap 영역으로 옮겨지는 것이기 때문에 쓰레드 단위의 작업이 아니다. 즉, 프로세스가 swap out 된다면 해당 프로세스에 속한 모든 쓰레드가 함께 swap out 되는 것이다. 쓰레드의 주요 상태에는 수행, 준비, 블록이 있다. 

 

※ 쓰레드 관련 연산

  1. 생성(spawn)

  2. 블록(block)
    - 쓰레드가 어떠한 사건을 기다리는 상태이며 자신의 레지스터, pc, 스택 포인터를 저장
    - 처리기는 같은 프로세스나 다른 프로세스 내의 다른 쓰레드를 수행
  3. 비블록(unblock)
    - 쓰레드를 종료시킨 사건이 발생되었을때 쓰레드가 준비 queue로 push되는 상태

  4. 종료(finish)

사용자 수준 쓰레드(ULT)와 커널 수준 쓰레드(KLT)

사용자는 KLT를 직접 제어할 수 없다. 단일 쓰레드 운영체제인 경우 KLT가 구현되어 있지 않다. 사용자는 현재 환경이 KLT가 구현되어 있는지도 알지 못하고, KLT를 제어할 수도 없기 때문에 ULT를 사용하게 되는데 보통 pthread와 같은 라이브러리를 활용한다. pthread는 운영체제가 단일 쓰레드인 경우 여러 ULT를 하나의 프로세스로 보내게되고, 멀티 쓰레드인 경우 알맞게 KLT와 맵핑시켜 여러 프로세스로 보내게 된다.    

 

※ ULT의 장점 ( = KLT의 단점)

  • 한 프로세스 내의 쓰레드 사이 dispatch를 수행할 때 ULT는 각 쓰레드가 모두 사용자 주소 공간에 위치하기 때문에 커널 모드로 변경될 필요 없이 유저 모드에서 수행 가능
  • ULT는 운영체제에 종속적이지 않음

 

※ ULT의 단점 ( = KLT의 장점)

  • ULT는 하나의 쓰레드에서 시스템 콜을 호출할 경우 같은 프로세스 내의 모든 쓰레드들이 함께 블록됨
    - KLT는 한 쓰레드가 블록되더라도 다른 쓰레드들은 자유로움 -> 여러 쓰레드 동시에 스케줄링 가능

 

반응형

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

[OS] Semaphore  (0) 2022.12.04
[OS] Lock  (0) 2022.10.27
[OS] Page Placement Policy (페이지 배치 전략)  (0) 2022.10.26
[OS] 페이징(Paging) 기법  (0) 2022.10.26
[OS] 가상 메모리(Virtual Memory)  (0) 2022.10.18