💎 스케쥴링
-
커널에서 유저모드에 있는 것들을 어떤걸 실행 할 것인를 정하는 것이다.
-
커널은 유저모드에 있는 프로그램들에게 시간권을 준다. 해당 프로그램은 커널로부터 받은 시간권(타입슬랩) 동안에는 실행을 보장 받습니다.
-
그래서 이 보장받은 시간을 쓰거나 포기하거나 하는건 프로그램의 몫입니다.
cf) 커널에서 스레드를 옮길 때 벌어지는 일
1)쓰레드
2)시스템콜
3)blocked(커널로돌아감)
4)스케줄러동작(커널)
5)UpCall
6)스레드관리자
7)다른쓰레드로 시간권이 넘어감
💎 Sleep 방법 코드화
- this_thread :: sleep_for(std::chrono::miliseconds(100));
기존의 SpinLock을 돌리던 while문 안에 위의 코드를 넣어주면 100밀리세컨즈 동안은 해당 스레드는 스케줄러가 잡지 않는다.
- 같은방법 : this_thread::sleep_for(100ms)
- 시간권(타임슬랩)을 포기하는 명령어
this_thread::yield(); == this_thread::sleep_for(0ms) 시스템콜을 바로 부른다.