OS

Thread(스레드)

쭈녁 2023. 12. 9. 00:36

Thread 스레드

  • 컴퓨터의 기본 작업 실행 단위. 하나의 스레드는 하나의 작업이다.
  • 스레드는 크게 물리 스레드(Physical thread)와 논리 스레드(Logical thread) 로 나뉘어진다
    • 물리 스레드: CPU 코어에서 동시에 실행할 수 작업의 개수를 뜻함
    • 논리 스레드: OS에서 다루는 작업들이다. 논리 스레드가 실제로 실행이 되려면 물리 스레드에 작업이 인계(스케줄링)가 되어야 한다. 때문에 OS는 현재 실행 예정인 논리 스레드를 스케줄링 전략(process scheduling)에 따라 물리 스레드에 넘겨줘서 작업을 실행시킨다. 
  • 하나의 프로세스는 기본 1개 이상의 논리 스레드로 실행이 된다. OS는 프로세스의 스레드들을 스케줄링 전략에 따라 CPU의 물리 스레드에게 넘겨줌으로써 멀티태스킹을 실현한다.
  • 논리 스레드는 크게 커널 스레드(kernel threads)와 유저 스레드(user threads)로 나뉜다.
    • 커널 스레드  : OS의 커널이 CPU의 스레드에게 작업을 넘기기 위해 사용하는 스레드를 라고 하며
    • 유저 스레드 :  커널 밖의 영역(프로세스 등)에서 생성하는 스레드들

스레드 모델

M:1, M:N의 경우 스레드 전환 시에 발생하는 *컨텍스트 스위칭(context switch)이 일어난다

 

 * 컨텍스트 스위칭: 물리 스레드가 작업(논리 스레드)을 수행하다가 필요에 의해 다른 작업(논리 스레드)을 수행하게 되는 경우 현재 작업 정보를 저장하고 다른 작업으로 넘어가는 것을 의미함. 작업 정보를 저장하고 복구하는 과정이 필요하기 때문에 고비용 작업

 

 

경쟁상태와 교착상태

경쟁상태

프로그램은 효율을 향상시키기 위해 적절한 스케줄링과 작업 병렬화가 필요하다

병렬 작업에서 여러 스레드가 하나의 리소스를 가지고 경쟁하는 상태가 있는데 이를 경쟁상태라 부른다.

 

임계영역

여러 작업자(스레드)가 공유하는 자원 중 경쟁이 발생할 수 있는 코드를 경쟁이 일어나지 않게 한 스레드 씩 실행할 수 있도록 보호해주면 해당 영역을 임계영역이라고 한다. (동기화 메커니즘, 락)

user1 user2 잔고
    1000
잔고 확인   1000
  잔고확인 1000
1000 입금(1000+1000=2000)   1000
  1000출금(1000-1000=0) 1000
1000 입금 확인   2000 (경쟁상태에서 일어난 문제)
  1000출금 확인 0 (경쟁상태에서 일어난 문제)
잔고 확인   0
500 입금   0
500 입금 확인   500

 

위와 같은 경우 user 한명이 작업할 때 lock을 걸어 동시성 문제를 해결해야 한다 (임계영역을 만들어야함) 

 

교착상태

경쟁상태에서 발생할 수 있는 문제로는 교착상태가 있다 이는 둘 이상의 스레드가 서로 점유하고 있는 리소스를 점유 하고 서로의 작업이 끝나기를 기다리며 작업이 진행되지 않는 상황을 의미한다.

 

교착상태 발생 조건

 

상호 배제: 리소스는 한번에 한 프로세스만 접근 할 수 있다.

점유 대기: 하나의 리소스를 점유하고 있으면서 다른 프로세스에 할당되어 있는 리소스를 추가 점유하기 위해 대기

비선점: 다른 프로세스에 할당된 리소스를 강제로 뺏어올 수 없음

순환 대기: 프로세스들이 순환 형태로 리소스를 대기하고 있어야 함

 

Java에서의 스레드

  • Thread 클래스 상속 run() 메서드 오버라이딩
  • Runnable 인터페이스 구현 -> 간단한 작업을 스레드로 실행시킬 때

 

 

'OS' 카테고리의 다른 글

리눅스의 역사  (0) 2024.03.23
운영체제의 종류와 리눅스의 계열  (1) 2024.03.23
OS의 정의와 발전 과정  (0) 2024.03.21
정규표현식 과 리눅스 명령어  (1) 2023.12.08