목록전체 글 (64)
정글에서 온 개발자
에러 Anonymous, Stack growth를 통과했는데, page-linear를 돌리면 에러가 났다. 0x00000080042095f3: intr_handler (threads/interrupt.c:352) 0x0000008004209a11: intr_entry (threads/intr-stubs.o:?) 0x000000800421ad55: hash_clear (lib/kernel/hash.c:58) 0x0000008004221cb9: supplemental_page_table_kill (vm/vm.c:332) 0x000000800421c70c: process_cleanup (userprog/process.c:378) 0x000000800421c6a8: process_exit (userprog/pr..
배경 pintos vm에서는 page를 보조테이블에 uninit_page 로 미리 넣어놓고, 페이지를 읽을 때 lazy_load_segment로 물리주소에 할당한다. process를 시작할 때 읽어들이는 파일도 마찬가지인데, process_exec이 stack을 쌓고 do_iret()을 하면, 해당 rip로 가면서 rip가 가리키는 가상주소를 물리주소에 할당하기 시작한다. 그런데 위와 같이 잘 읽어들이다가 0을 가리키는 곳으로 빠졌다. 해당 fault가 특정 코드에서 나는 것이 아니기 때문에 fault 직전에 브레이크포인트를 잡고 디버깅할 수도 없어 이틀 정도를 헤멨다. 'addr : ' log는 page_fault_handler 진입하자마자 찍는 로그이다. 해결 기존 코드에서는 아래 두 코드가 빠져있었..
Priority Inversion 문제 우선순위 역전. 우선순위가 높은 쓰레드가 우선순위가 낮은 쓰레드를 기다리는 현상 Critical Section(이하 CS)를 접근하지 못하도록 락을 거는 경우에 발생한다. 락은 우선순위와 상관 없이, 락 홀더가 끝날 때까지 다른 쓰레드들이 락이 풀릴때까지 CS 앞에서 대기한다. L(낮은 priority) 이 lock holder고 H(높은 priority)가 락 해제를 기다리는 경우에도 우선순위 역전이라고 할 수 있다.(나의 생각) 일반적으로는 CS에 접근하지 않는 M(L과 H의 중간 priority) 이 들어오는 경우에 이 역전이 더 극명하게 나타난다. L이 time_slice 때 cpu를 반환하면, L보다 우선순위가 높은 M이 먼저 실행된 뒤에야 L이 실행되어 ..