fork 더보기모든 케이스를 통과한게 아니라 중간에 틀린 내용이 있을 것으로 예상..fork()자식 프로세스(쓰레드)를 생성하고 부모 프로세스(쓰레드)의 내용을 자식에게 복사함tid_t fork(const char *file_name, struct intr_frame *f){ return process_fork(file_name, f);}process_fork()커널의 인터럽트 프레임을 부모 구조체 내부의 parent_tf에 복사함(자식에게 복사해주기 위함)tid_t process_fork(const char *name, struct intr_frame *if_ UNUSED){ struct thread *parent = thread_current(); // 부모 쓰레드 memcpy(&parent->par..
728x90
반응형
pintos
System Call시스템콜 함수더보기추가적인 수정이 필요함..check_addr()받아온 주소의 유효성을 검사가상 메모리와 주소가 맵핑된 것이 없는 경우주소가 유저 스택의 최상단 주소보다 같거나 큰 경우(유저 영역이 아닌 경우)주소가 NULL인 경우void check_addr(void *addr){ // 가상메모리와 매핑된게 없거나 유저스택보다 같거나 크고 NULL이면 종료(exit) if (pml4_get_page(thread_current()->pml4, addr) == NULL || !is_user_vaddr(addr) || addr == NULL) { exit(-1); }}halt()power_off를 호출해서 PintOS를 종료시킴void halt(void){ power_off();}exit..
728x90
반응형