OS/Pintos 개발일지 5

[Pintos] 1. background

struct thread- thread id- thread status // running, ready, block, dying- thread name- stack pointer // saved stack pointer- priority+ allelem // list element for all threads list.+ elem // list element- pagedir // USER PROGRAM이 define되어 있다면 사용. page directory이다.- magic // detects stack overflow- 생성될 때 THREAD_MAGIC(0xcd6abf4b)으로 설정. 스택 오버플로우 발생 시 이 값이 변한다. description- kernel 스택 메모리가 작아서 스택 오버플로우..

[Pintos 개발일지] Priority scheduling 17/27 tests passed.

후... 10 of 27 tests failed로 줄였다. 자세한 코드는 내 github의 terapintos의 pass priority-donate-one으로 시작하는 곳을 참고하자. https://github.com/hsb0818/terapintos/commit/4790d3967a7a7e4b9a0735ab1bdc463208b141e9 nested donation에선 문제 없었지만 multiple에선 문제 생겼던 것인데, reset donation을 진행할 때 struct thread* pHighThread = list_entry (list_front (&lock->semaphore.waiters) , struct thread, elem); if (pCurThread->priority < pHighTh..

[Pintos 개발일지] [pass] priority-donate-nest

priority-donate-nest 테스트 케이스를 통과했다. 나머지도... 테스트 케이스 분석하면서 다 패스해보자. Nested priority donation 문제를 최종적으로 다음과 같이 해결했다. void lock_acquire (struct lock *lock) { ASSERT (lock != NULL); ASSERT (!intr_context ()); ASSERT (!lock_held_by_current_thread (lock)); struct thread* pCurThread = thread_current (); priority_donation (lock); pCurThread->hurdle = lock; sema_down (&lock->semaphore); pCurThread->hurdl..

[Pintos 개발일지] 음...Kernel Panic이나 Unexpected interrupt 0x0E 에러에 대해

Pintos를 진행하다가 Kernel Panic이나 Unexpected interrupt 0x0E 라고 뜨면서 잘 안 될 때가 있다. 구글링을 해보니 Unexpected interrupt 0x0E 에러가 뜨는 경우는 초기화되지 않은 메모리를 사용하거나.. 할 때 뜨는 에러라고 한다.Thread 관련된 doc을 보면 스레드는 메모리를 페이지(4kb) 단위로 할당받기 때문에, 이게 넘어가면 페이지 폴트 에러가 뜰 수 있다. 하지만 이 문제는 아닌 것 같다. -_-;; 그런데 pintos -q run priority-donate-nest 이렇게 -q 옵션을 사용하니까 이 에러가 없어졌다. 자세한 이유는 모르겠지만 Pintos doc에 써있는 문구가 있었다. pintos -f -q. The ‘-f’ option..

반응형