본문 바로가기
728x90
반응형

개발일지/PintOS12

pintos를 마무리하며...[크래프톤 정글] 입소 후 지금까지 많은 문제들을 만나며 고민해 보는 시간을 가졌었다.  하지만 어떠한 문제들보다 pintos에서 만난 문제들이 더 직접적으로 느껴졌다. 다른 코드들보다 더 깊숙이, 정말 코드 끝까지 파고들어 가는 느낌이 강하게 들었던 프로젝트였다. 이런 시간들을 보내고 나니 많은 코드를 읽고 사용하는것에 조금은 익숙해진 듯하다. OS 개념을 글로 배우는 것과 개념을 직접 구현하는 것은 완전히 다른 것이다. 핀토스를 하게 되면 많은 것을 얻을 수 있다. 하지만 많은 오류들을 마주하게 되어 그것들을 마주하고 분석하고 디버깅하는 힘이 필요하다. 2023. 12. 30.
pintos......... 나는 멍청이다. 24시간 동안 같은 문제를 해결하지 못했다.FAIL tests/vm/page-merge-parFAIL tests/vm/page-merge-stkFAIL tests/vm/page-merge-mm page-merge 네가 이겼다. 테스트 코드를 보며 오류가 있을만한 부분을 고쳐가며 수정했지만 결국 성공하지 못했다.오히려 다른 테스트가 실패하는 일만 생겼다. 테스트 케이스에서 사용하는 create system call 에 lock을 추가하였고, lock acquire 을 수정하였다.하지만../.! 2023. 12. 28.
pintos - virtual memory(7) 지금까지 스택은 USER_STACK에서 시작하는 단일 페이지였으며, 프로그램 실행은 이 크기로 제한되었다. 이제 스택이 현재 크기보다 커지면 필요에 따라 추가 페이지를 할당해야한다.\ bool vm_try_handle_fault (struct intr_frame *f, void *addr, bool user, bool write, bool not_present); git_book:이 함수는 페이지 오류 예외를 처리하는 동안 userprog/exception.c의 page_fault에서 호출됩니다. 이 함수에서는 페이지 오류가 스택 증가에 유효한 경우인지 여부를 확인해야 합니다. 스택 증가로 오류를 처리할 수 있음을 확인했다면 오류가 발생한 주소로 vm_stack_growth를 호출합니다. void .. 2023. 12. 25.
pintos - virtual memory(6) 나는 왜 syn-read, syn-write이 안되는가...!!!!pass tests/userprog/args-nonepass tests/userprog/args-singlepass tests/userprog/args-multiplepass tests/userprog/args-manypass tests/userprog/args-dbl-spacepass tests/userprog/haltpass tests/userprog/exitpass tests/userprog/create-normalpass tests/userprog/create-emptypass tests/userprog/create-nullpass tests/userprog/create-bad-ptrpass tests/userprog/create-.. 2023. 12. 22.
pintos - virtual memory(5) Supplemental Page Table - Revisitbool supplemental_page_table_copy (struct supplemental_page_table *dst, struct supplemental_page_table *src); git_book 설명:보조 페이지 테이블을 src에서 dst로 복사합니다. 이 함수는 자식이 부모의 실행 컨텍스트를 상속해야 할 때 사용됩니다(예: fork()). src의 보충 페이지 테이블에 있는 각 페이지를 반복하고 dst의 보충 페이지 테이블에 있는 항목의 정확한 복사본을 만듭니다. 초기화되지 않은 페이지를 할당하고 즉시 청구해야 합니다. supplemental_page_table_copy함수 호출하는 곳:  hash.c에 있는 hash_f.. 2023. 12. 22.
pintos - virtual memory(4) 부제: 어떤 것이 더 효율적일까?FAIL tests/userprog/args-noneFAIL tests/userprog/args-singleFAIL tests/userprog/args-multipleFAIL tests/userprog/args-manyFAIL tests/userprog/args-dbl-spaceFAIL tests/userprog/haltFAIL tests/userprog/exitFAIL tests/userprog/create-normalFAIL tests/userprog/create-emptyFAIL tests/userprog/create-nullFAIL tests/userprog/create-bad-ptrFAIL tests/userprog/create-longFAIL tests/user.. 2023. 12. 20.
pintos - virtual memory(3) what is pg_round_down?/* Find VA from spt and return page. On error, return NULL. */struct page *spt_find_page (struct supplemental_page_table *spt UNUSED, void *va UNUSED) { /* TODO: Fill this function. */ struct page *page = (struct page *)malloc(sizeof(struct page)); struct hash_elem *e; page->va = pg_round_down(va); e = hash_find (&spt->spt_hash, &page->hash_elem); free(page); return e != NU.. 2023. 12. 19.
pintos - Virtual Memory(1) Virtual Memory  위키백과 설명:가상 메모리 또는 가상 기억 장치(문화어: 가상기억기, virtual memory, virtual storage)는 메모리 관리 기법의 하나로, 컴퓨터 시스템에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자들에게 매우 큰 (주)메모리로 보이게 만드는 것을 말한다. 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다. 이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로도 사용된다. 가상적으로 주어진 주소를 가상 주소(virtual address) 또는 논리 주소(logical address)라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소(physical add.. 2023. 12. 14.
pintos (부끄러운)실수 기록 여기서 틀린 부분을 찾아보세요. (hint: 2개)...1. check_address 함수를 먼저 살펴보겠습니다.void check_address(void *addr) { struct thread *t = thread_current(); if (!is_user_vaddr(addr) || addr == NULL || pml4_get_page(t->pml4 , addr) == NULL) { exit(-1); }}seek 함수에서 check_address 함수를 struct file * 타입의 file에 대해 호출하고 있습니다. 하지만 check_address 함수는 void *addr를 매개변수로 받아 해당 주소가 유효한 사용자 주소인지 확인하는 함수입니다.  check_address 함수는 메모리 주소를.. 2023. 12. 14.
728x90
반응형