티스토리 뷰

운영체제

[PintOS] Project1-1 Thread

bearn_soo 2024. 5. 20. 18:45

Process와 Thread

Process

Process는 실행 중인 프로그램의 인스턴스를 말합니다. 프로세스는 운영체제로부터 시스템 자원을 할당받아 독립적으로 실행되는 단위이며, 각 프로세스는 자신만의 메모리 공간과 시스템 자원을 가진다.

Thread

Thread는 프로세스 내에서 실행되는 작업의 단위로, 경량 프로세스(Lightweight Process)라고도 불린다. 한 프로세스 내에서 여러 개의 Thread가 동시에 실행될 수 있으며, 각 Thread는 독립적인 실행 흐름(Context)을 가진다.

참고

쓰레드와 프로세스

 


Context Switching

Context Switching(문맥 교환)은 CPU가 한 프로세스 또는 스레드의 실행에서 다른 프로세스 또는 스레드의 실행으로 전환하는 과정을 말한다 이 과정에서 현재 실행 중인 프로세스나 스레드의 상태(문맥)를 저장하고, 다음에 실행할 프로세스나 스레드의 상태를 복원한다.

CPU는 컨텍스트 스위칭을 매우 빠르게 진행해 여러 쓰레드를 동시에 처리하는것처럼 보이게하는 동시성을 보인다.


Thread의 5가지 상태

쓰레드는 5가지 상태전이가 일어난다

  • 생성
  • 준비
  • 실행
  • 대기
  • 완료

생성

쓰레드를 생성하는 단계

  • 쓰레드가 생성되면 생성단계에서 준비상태로 전환된다
  • thread_create를 사용하면 쓰레드를 생성할 수 있다

준비

쓰레드를 당장이라도 실행시킬수 있는 상태를 말한다.

  • 실행 상태의 쓰레드가 컨텍스트 스위칭이나 인터럽트에 의해 준비상태로 전환된다.
  • 대기 상태의 쓰레드가 특정 조건이 만족하면 준비상태로 전환 된다
  • 쓰레드가 생성되면 준비상태로 전환된다
  • PintOS에서는 ready_list에서 준비상태의 쓰레드가 관리된다
  • thread_yield를 사용하면 실행상태의 쓰레드가 준비상태로 전환된다

실행

현재 CPU자원을 사용하고있는 실행중인 상태를 말한다

  • 준비상태의 쓰레드들은 스케쥴러에 의해 선택되어 실행상태로 전환된다
  • PintOS는 라운드로빈 스케쥴링 방식을 사용하는데 실행중인 쓰레드가 특정시간(time slice)실행되면 컨텍스트 스위칭으로 준비상태로 전환된다

대기

실행을 하면 안되는 쓰레들을 잠시 대기시킨 상태를 말한다

  • 대기 상태의 쓰레드들은 준비상태의 쓰레드를 관리하는 ready_list에서 관리하지 않고 별도의 wait리스트를 만들어서 관리한다
  • 예를 들어 쓰레들을 일정 시간(tick)동안 대기상태로 만들어야한다면 별도의 sleep_list에서 관리해아한다
  • 세마포어 같은경우에도 해당 세마포어별로 waiters 리스트를 가지고 있다
  • 준비 상태의 쓰레드가 대기상태로 전환 되었다가 준비상태로 전환될 수 있다
  • 실행 상태의 쓰레드가 대기상태로 전환 되었다가 실행상태로 전환을 할 없고 준비상태로 전환되어서 스케쥴러의 선택을 받을때까지 준비한다.
  • PintOS에선 thread_block을 사용해 대기상태로 전환되고 thread_unblock을 사용해 대기상태에서 준비상태로 전환한다

완료

실행 상태의 쓰레드가 실행을 완료한 상태를 말한다

  • 실행 상태의 쓰레드가 실행을 마쳤으면 완료상태로 전환된다.
  • 완료상태의 쓰레드를 저장하는 별도의 리스트가 존재하고 주기적으로 해당 쓰레드의 페이지를 할당해지한다.

쓰레드 상태변화

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함