질문 정리
Q. C언어 기본 라이브러리에서 기본적으로 부동 소수점 방식을 사용하도록 지원하는것으로 알고 있는데 왜 소수점 계산 로직을 직접 구현하여 사용해야 할까?
A. 원래는 기본 라이브러리에서 계산하도록 지원하지만, PintOS는 학생 교육을 목적으로 해당 기능을 직접 구현하도록 막아두었다
- 최상위 디렉토리에 Make.config 파일에서 확인가능하다
- Make.config에서 CFLAGS = -g -msoft-float -O0 -fno-omit-frame-pointer -mno-red-zone 명령에 -msoft-float 옵션 사용
- -msoft-float 옵션은 하드웨어 부동 소수점 연산을 사용하지 말고 소프트웨어적으로 소수점 연산을 처리하라는 지시
- 해당 옵션을 사용하면 컴파일러가 부동 소수점 연산을 위한 하드웨어 레지스터(FPU 레지스터)를 사용하지 않음 → 현재 시스템에서는 실수형 연산이 불가능, 정수형 연산만 가능함
- FPU 레지스터는 부동 소수점 연산을 효율적으로 수행하도록 설계된 전용 하드웨어
- 정수 기반 연산으로 소수점 계산 로직을 구현해야함
기존 Priority scheduling과 MLFQS(4BSD) 성능 비교
- MLFQS에서 wait_list와 Lock을 사용하지 않는 이유?
- Priority 스케줄링에서는 Lock을 사용하는 이유?
MLFQS 사용 변수 정리
nice
- 해당 스레드가 다른 스레드에게 얼마나 “친절한지”를 나타내는 척도
- CPU를 양보하는 척도
- 친절할수록 CPU를 많이 양보하려 할 것이며 불친절할수록 CPU를 양보하지 않으려 할 것이다 → nice 값이 클수록 CPU를 많이 양보하려 할 것이고, 작을수록 CPU 사용을 양보하지 않으려 할 것이다
- PintOS 슬라이드를 살펴보면 기본값이 0이며, 최솟값이 -20, 최댓값이 20임을 알 수 있다