Open ybjeon01 opened 3 years ago
안녕하세요 @ybjeon01 님, 제보 주셔서 감사합니다.
상황을 보아하니, 예전 QEMU에서는 기본적으로 메모리가 0으로 초기화되어서 시작되던 부분이 버전이 바뀌면서 메모리가 초기화 되지 않고 더미값으로 남아 았는 상황이 아닌가 싶네요.
이런 상황이라면 앞으로도 많이 나올 것 같은데... 쿨럭..;;; 앞으로도 잘 부탁드립니다. ^^;;;
그럼 즐거운 OS 프로그래밍하세요 ^^)-b
다행스럽게 QEMU에서 위와 같은 문제가 발생하지 않습니다. 최신버전에서도 메모리는 0으로 초기화 되어있거든요. 지금까지 제가 쓴 이슈들 대부분은 실제 PC상에서 발생하는 문제들입니다.
제가 오히려 배우면서 버그찾고 기여하는게 더 의미있고 재미있는 것 같아요. 저도 앞으로 잘 부탁드립니다
앗! 실제 PC에서 시험 중이시군요! 굉장히 번거로우실텐데... 열정이 대단하시군요!
안녕하세요. 챕터 22를 공부하다가 발견한 문제입니다. 지난번에 올린 이슈와 비슷한 양상을 보이는 문제로 kernel process의
bFPUUsed
field를 초기화하면 해결이 됩니다.문제를 좀 더 설명하자면,
bFPUUsed
변수가 0이 아닌 임의의 숫자가 들어있을 경우 생기는데요. Task가 FPU instruction를 처음 실행하더라도 bFPUUsed변수가 0이 아니라서 FPU 초기화를 하지 않습니다.fxrstor
명령어를 통해 아직 제대로된 데이터가 들어있지 않는 TCB FPU context를 FPU에 넣어버리더라고요. 이 과정에 건드리면 안되는 register를 건드리면서 GP exception이 발생하는 걸 확인했습니다.링크에 따르면
fxrstor
명령어가 FPU register인 MXCSR에 예약된 bits를 설정하면 GP exception이 발생한다고 명시되어있습니다.Original Code
Suggested Code