pintos 내에서는 부동소수점 사용이 금지되어 있습니다. 이유는 부동소수점의 컨텍스트 스위칭 비용이 너무 크기 때문인데요 저희가 배웠던 CSAPP 3장 기계수준 코드에서 부동 소수점을 저장하는 레지스터들이 나온 적이 있습니다. 해당 레지스터들은 일반 레지스터의 최대 8배, 512bit까지 저장하는 레지스터들이 있고, 갯수도 16개에서 32개까지 존재합니다

해당 레지스터들의 총 크기는 일반 레지스터들의 크기에 비해 적게는 약 2배, 많게는 10배에서 13배까지 큽니다.

커널 내에서는 초당 수천~수만 번은 컨텍스트 스위칭이 일어납니다. 만약 부동소수점레지스터까지 스위칭한다면 오버헤드가 자연스럽게 커질 것이고 전체 시스템 성능에 눈에 띄는 영향을 줄 수 있기 때문에 부동소수점 사용이 금지되어 있습니다.

하지만 pintos에서 mlfqs를 사용하려면 소수가 필요하긴 합니다. 따라서 저희가 직접 고정소수점을 구현할 필요가 있는 것입니다.

32비트에서 1비트는 사인비트로, 하위 14비트는 소수점으로 사용합니다. 따라서 1.0 은 고정소수점으로 나타내면 2^14이 된다는 소리입니다.


< 슬라이드 이동 >

구현된 함수는 다음과 같습니다. 과제 설명에서 구현해야할 함수를 충실히 구현해두었죠. 정수와 고정소수점 사이의 연산, 정수와 정수, 고정소수점과 고정소수점 사이의 연산을 구현해두고 사용해야 합니다

mlfqs 안에서는 0~63 까지의 우선순위 범위만 나타내야 합니다. 따라서 고정소수점 연산을 사용해서 이 범위를 벗어나는 오버플로우를 감지하고 수정해주는 로직도 필요합니다