오전에 티타임, 채용 설명회를 정리하고,
OS강의 정리하면서 전혀... 기억이 안 난다는 점을 깨달았음
(하도 와이파이가 끊겼어서 잘 안 들렸기도 했고
옆 팀원이 계속 끊기는 것도 신경 쓰였고)
그래서 올려주신 녹화 영상 보면서 필기
하는데 또 후반부가 로딩이 안 끝남
새로고침해도 안됨
...
나중에 보기로 하고
2시 팀 코어가 잡혀서 이번 내용 개괄 하고
발표는 어떻게 할지 정하고
와서 코드 한참 만지고
(수식이 쭉 있어서 그거 좀 작성하는 것도
이전 케이스 예외처리하는 것도 좀 걸렸음)
돌려보고
load 조차 돌아가지않고
...
계속 0이하가 나오다가
좀 고치니 273나오고 (이상하게도 size, ready thread 갯수는 분명 정수일텐데 실수처럼 계산해야 음수가 안됨. 이외에도 CONVERT N X (N->X)를 붙이느냐 아니느냐에 따라 음수가 되었다가 양수가 되고 그러함. 왜일까?)
거기서 좀 더 고치니 1.07 나오고 (이건 실수 계산을 하고 나서 다시 int로 캐스팅하니까 그렇게 되었음. 대충 알거같은데 정확히 왜인지 좀 알아봐야겠다..)
이젠 고칠게없는데... 해서
다른 사람 코드 참고하고
갑자기 됨
근데 나랑 코드 진짜 거의 똑같은데
나도 모르겠음
(굳이 따지자면 그 사람은 곱하기를 전부 한 뒤 나중에 나누기를 해서 오버헤드를 최소한으로 한 거같긴함. 그렇게 납득했는데, 나와 똑같이 그냥 계수 따로 계산하고 나누기 두개 먼저하고 곱하기 처리한 팀원은 됨. 진짜뭐야?)
아무튼 load-1은 통과했으나
load-60에서 60초까지 출력되지 않다가
60초 후 한꺼번에 출력되어 load_avg가 60초까지
전부 38.75가 출력되는 오류가 있음.
아무래도 set_nice로 set 과정에서 스레드간 yield 오류라 생각했는데
그런걸 전혀 세팅하지 않은, load만 설정한 다른 팀은 그런 오류가 안나옴.
화딱지남. 나랑 비슷한 에러가 뜬 다른 팀이 해결했다는데 왜 해결된지 모름.
막막함. 그래서 여러가지를 고쳤는데 아직도 안되지만
고친 게 뭐냐면
recent_cpu에서 정수를 모두 실수로 변환한 후 계산한 것을 그냥 정수일때는 정수, 실수 계산으로 바꾸었음. priority도 그러한 방식으로 함.
blocked 된 스레드를 포함하기 위해 all list를 만들어서 all elem으로 create 할때마다 추가함. prority, recent_cpu 갱신 리스트를 all list로 바꿈.
calculating시 계산을 해서 priority나 recent_cpu값을 넘기는 함수에서 그냥 거기서 알아서 갱신하는 함수로 바꿈.
(큰 상관은 없을거같긴 한데.)
1 tick마다 recent_cpu를 올릴 때, 그냥 곱하지 않고 실수와 정수 곱셈 처리함.
get nice, get load_avg, get recent_cpu를 얻어올때마다 인터럽트를 껐다 킴.
(근데 역시 리스트를 바꾸는게 아니라서 내 생각엔 크게 상관없음.)
set nice에서 thread_yield로 했다가 안되길래 priority를 계산해서 63이상이면 63, 0이하면 0으로 설정하는 오버헤드 방지 시키고 그대로 set_prority로 넘김.
(set_prority와 yield의 차이점은 있어도 63, 0은 그냥 오버헤드 방지용이라 큰 의미 없을 듯.)
set_priority등 mlfqs 케이스가 아니면 바로 리턴하도록 처리함.
(하지만 어차피 예외처리했었음.)
근데 안 됨
......
왜?
시간이 좀 늦기도 했고 아침에 해결되는 경우도 종종 있으니
세상을 저주하며 퇴근.
대체 뭘까?
오늘 거의 다해야 내일 총정리를 하든가 하지
역대 최악의 디버깅으로 인정합니다
진짜 뭐가 안 되어도 왜인지 알수가없어
탈주하고 카공을 할까 싶었는데
여기서 열받는거 거기가면 열을 안 받을까...
하지만....
인세와 고립되고 싶다...
원인 찾기
코드 증오하기
30분 알고리즘
마저 증오하기
증오하기
일요일 저녁에는 이번 주차 한 것 총 정리를 해야겠다...
alarm clock과 priority scheduling, mlfqs ...
OS 강의도 너무 정리하고싶은데... 코드 빨리 끝나면 좋겠다