본문 바로가기
정글

(Pintos 1주차) Priority scheduling

by 진득한진드기 2023. 5. 31.

중요 키워드

1. priority scheduling

 

우선순위 스케줄링은 프로세스에게 우선순위를 할당하여 스케줄링하는 방식이다.

 

pintos에서는 우선순위를 정수값으로 할당하였다.

 

우선순위를 기반으로 CPU할당을 결정하므로, 우선순위가 높은 프로세스가 CPU를 더많이 사용한다.

 

선점형과 비선점 형이 있는데 우리는 선점형으로 구현을 하였다.

 

실행을 기다리는 ready_list에서 thread의 우선순위를 기준으로 나열하고 실행한다. 우선순위는 동적으로 변하기 때문에 CPU에 할당할 때 정렬을 한다.

 

2. timer_interrupt

 

이 함수를 알기는 매우 어려웠지만 책에 나온 내용대로 보면 interrupt를 비동기적으로 일으키기 때문에

 

intr_disable()을 하게 되면 하나의 독립적인 Thread로 행동한다고 생각한다.

 

 

3. sema_phore,lock

 

같은 공유자원을 점유하려고 하다보면 데이터에 일관성이 유지되기 힘들기 때문에 동기화를 잘 해주어야한다.

 

우리의 pintos에서는 lock을 사용한 방식과 sema를 사용하였다.

 

한 자원에는 한 프로세스만 접근하게 해주어야한다.

 

 

위의 코드에서 intr을 사용해 인터럽트를 비활성화해서 크리티컬 섹션에 진입하기 전에 인터럽트가 발생하지 않도록 한다.

 

sema value를 낮춰서 0 인 동안에는 대기 상태로만든다.

 

block() 상태로 만들어서 다른 쓰레드가 실행되게 하고

 

sema value의 값을 1 감소시켜, 다른 스레드가 자원을 사용하는 것 을 허용하게 세마포어 값을 감소시키고 다시 인터럽트 활성화한다.

 

인터럽트를 사용해 sema에 water_list에 넣어주고 해당 자원을 점유하면 ready_list로 들어가게 된다.

 

 

4. donation

 

donation은 특정 자원을 기다리는 동안 해당 자원을 소유하고 있는 다른 프로세스의 우선순위를 일시적으로 상승시키는 방식이다.

 

donation은 우선순위의 역전 문제를 해결하기 위해 도입되었다.

 

우선순위 역전은 고우선순위 프로세스가 낮은 우선순위 프로세스가 소유한 자원을 기다리는 동안 블록되는 상황을 말하는데,

 

낮은 우선순위 프로세스가 높은 우선순위 프로세스의 작업을 방해하고 성능 저하를 초래할 수 있다.

 

pintos에서는 이런 donation 방법중 multiple donation과 nested donation을 사용하였는데, 여러 공유자원의 대한 lock과 그것 여러 lock을 점유하려는 Thread에 대해 우선순위 문제를 해결해가는 방법을 배운다.

 

5. condition variable

 

 

가장 느낀점

 

함수를 너무 추상화해서 이해를 하지 않고 어떠한 함수에 대해서는 신경을 아예 안쓴것에 대한 끔직한 고통을 맛보았다.

 

lock을 요청하는 함수에서 lock을 요청해서 맘대로 가져가는 함수인지 알고 그렇게 로직을 짰다가 알고보니 요청하고 

 

waiter list에 줄을 스는것을 알게되어 머리가 띵해졌던 기억이....ㅋㅋ

 

 

'정글' 카테고리의 다른 글

Pintos(2주차) system call 후기 회고  (0) 2023.06.12
Pintos Thread (WIL) 깊게 생각해볼 Keyword  (0) 2023.06.02
Pintos(1일차 후기) 쓰레드  (0) 2023.05.28
WIL(7주차) Proxy 구현  (0) 2023.05.25
TIL(27일차) 네트워크  (0) 2023.05.23