📕 Project 1: Threads
👉 Time-sharing system
시분할 시스템: 프로세서가 각 작업에 일정량의 시간을 배정하여 CPU의 시간 자원을 나누어 쓰는 것, 이를 통해 마치 여러 개의 작업들이 동시에 처리되는 것처럼 보이게 된다.
👉 Context Switching
프로세서에서 다른 프로세서로의 전환. 이를 위해 cpu의 레지스터값을 커널 스택에 저장해놓고 다른 레지스터로의 교체가 일어난다.
👉 Scheduler
멀티 프로세서 시스템에서 프로세스의 실행 순서를 관리하는 것
- Round Robin (RR)
일정한 sampling time마다 프로세스 공평하게 프로세스 변경이 일어남
- Priority
프로세스마다 우선 순위를 부여해 우선적으로 실행될 수 있도록 한다.
- Priority donation
synchronize를 위한 lock, semaphore에 의해 더 높은 우선 순위를 가진 프로세스가 실행되지 않는 priority inversion을 방지하기 위해, 낮은 우선 순위의 프로세스에게 우선 순위를 빌려주는 것
- Multi-Level Feedback Queue Scheduler (MLFQS)
낮은 프로세스가 실행되지 못하는 starvation을 해결하기 위해, 여러 큐와 일정 sampling time마다 priority를 계산하는 스케쥴러. 이때 해당 쓰레드의 특성(자주 다른 작업에 양보를 한다, 긴 시간 점유) 등을 파악해 피드백한다. 만약 가장 높은 큐가 여러개의 thread를 담고 있다면 RR방식으로 진행한다.
MLFQ 관련 정리
- 4BSD
스케쥴링 방식 중 하나로, 대기 thread의 갯수, 실행 시간 등으로 overhead는 있지만 복잡한 스케쥴링을 효과적으로 처리한다.
BSD 관련 정리
- nice
스케쥴링에 들어가는 parameter. nice가 높을 수록 점유시간이 지나면 priority가 낮아져서 다른 thread에 양보한다.
👉 Thread
프로그램이 각각의 사용과 관련하여 가지고 있는 정보(레지스터 등).
- Thread control block (TCB)
스레드 제어 블록: OS 커널이 쓰레들 관리하기 위해 필요한 정보를 담는 구조체
👉 Timer Interrupt
시스템 내부에서 특정한 시간마다(sampling time) 발생하는 interrupt
👉 Timer sleep
일정한 타이머 시간동안 thread가 실행되지 않도록 정지
👉 Synchronization
특정 작업이 혹은 critical area가 interrupt에 방해받지 않도록 consistency를 보장한다. 이를 동기화라고 하고 다양한 기법들이 있다.
OS 동기화
- Semaphore
양수의 정수를 사용해서 관리 (다수의 프로세스 접근)
- lock
boolean을 사용해서 관리 (한 개의 프로세스 접근)
- condvar
condition 변수를 추가하여 동시 접근과 동기화 문제를 해결 (한 개의 프로세스 접근)