[OS]프로세스와 쓰레드(feat.주유소와 주유총)

Hyenna·2023년 4월 29일
0

OS

목록 보기
1/9
post-thumbnail

🧐내가 생각한 프로세스와 쓰레드의 관계

기름을 넣는 프로그램을 실행한다 치자

  • 기름을 넣게 해주는 것은 "주유소" = "프로세스"
  • 기름이라는 자원을 이용하여 주유소가 운영되게 해주는 것은 "주유총" = "쓰레드"
  • 기름총이 한개라면? 1대 넣는동안 다른 차들이 계속 기다려야함으로 성능이 떨어짐 = "싱글 쓰레드"
  • 기름총이 여러개라면? 기름총 갯수만큼 동시에 주유 가능함으로 성능이 향상됨 = "멀티 쓰레드"

📉프로세스

프로세서에 의해 수행되는 프로그램의 단위로 현재 실행 중이거나 곧 실행 가능한 프로그램

[주소공간]

  • 텍스트 영역 : 프로세서가 실행하는 코드를 저장
  • 데이터 영역 : 변수들을 저장, 샐행 중에 사용하려고 동적으로 할당 받은 메모리 공간
  • 스택 영역 : 호출된 프로시저용으로 지역 변수와 명령어들을 저장

[스케줄러]

  • 장기 : "작업 스케줄러"라고도 부르며 어떤 프로세스를 준비
    큐에 삽입할지 결정
    하는 역할
  • 중기 : 메모리에 적재된 프로세스의 수를 동적으로 조절
  • 단기 : "CPU스케줄러"라고도 하며 준비 상태의 프로세스 중에서 어떤 프로세스를 다음 번에 실행 상태로 만들 것인지를 결정

[상태]

  • 생성(New) : 작업이 제출되어 Spool 공간에 수록
  • 준비(Ready) : CPU가 사용 가능한 상태
  • 실행(Running) : 프로세스가 CPU를 차지하고 있는 상태, Dispatch를 통해 실행 상태로 전이
  • 대기(Block, Wait) : CPU를 양도하고 I/O 완료 시까지 대기 큐에서 대기하고 있는 상태
  • 종료/완료(Terminated) : CPU 할당 받아 주어진 시간내에 수행을 종료한 상태

📎쓰레드

  • 한 프로세스 안에서 동시에 여러 작업들을 수행할 수 있게 해주는 프로세스 안의 작은 프로세스
  • 실행에 필요한 최소한의 정보만을 가지고 프로그램 수행 시 자신이 속해
    있는 프로세스의 실행환경을 공유

[장점]

1) 사용자 응답성 : 일부 스레드 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능
2) 자원 공유 : 효율성 증가, 커널의 개입을 피할 수 있음
3) 경제성 : 프로세스의 생성, context switch에 비해 효율적
4) 멀티 프로세서 활용 : 병렬처리를 통해 성능 향상

[쓰레드의 구현에 따른 종류]

  • 사용자 쓰레드
    • 사용자 수준에서 지원하는 스레드
    • 커널 위에서 지원되고 커널의 지원 없이 관리
  • 커널 쓰레드
    • 커널 수준에서 제공되는 스레드
    • 운영체제에 의해 직접 지원되고 관리
    • 거의 모든 현대 운영체제들은 커널 스레드를 지원

🖇멀티쓰레드 모델

여러개의 쓰레드자원을 공유하며 하나의 수행 업무를 동시에 처리하는 기능

[Many-to-One Model]

  • 하나의 커널 스레드에 여러 유저 스레드를 연결하는 모델
  • 사용자 공간의 쓰레드 라이브러리를 통해서 쓰레드가 관리되므로 효율적
  • 한번에 한 유저 스레드만 커널에 접근할 수 있기 때문에 멀티 프로세서 시스템에서 병렬적인 수행을 할 수 없어 요즘에는 잘 사용되지 않는 방식
  • 한 유저 스레드의 시스템 콜로 인해 block 되면 프로세스 전체가 block

[One-to-One Model]

  • 하나의 커널 스레드에 하나의 유저 스레드가 대응하는 모델
  • 동시성(Concurrency)을 높여주고, 멀티 프로세서 시스템에서 동시에 여러 스레드를 수행할 수 있도록 해줌
  • 유저 스레드를 늘리면 커널 스레드도 똑같이 늘어나는데, 커널 스레드의 생성은 오버헤드가 크기 때문에 성능 저하가 발생

[Many-to-Many Model]

  • 여러 유저 스레드에 더 적거나 같은 수의 커널 스레드가 대응하는 모델
  • 커널 스레드의 구체적인 개수는 프로그램이나 작동 기기에 따라 다르다.
  • 멀티 프로세서 시스템에서는 싱글 프로세서 시스템보다 더 많은 커널 스레드가 만들어진다.
  • One-to-One 보다는 낮지만 Many-to-one Model에 비해 더 높은 동시성을 갖는다.
  • One-to-One Model보다 커널 스레드 생성의 오버헤드가 작다.

0개의 댓글