project2 - 추가 함수 및 변수 정리

이후띵·2022년 1월 6일
0

PintOS

목록 보기
17/31

include/thread/thread.h

struct thread

  • int exit_status : 자식의 종료상태를 확인 목적, syscall.c -> exit 에서 저장

  • struct semaphore fork_sema : 자식이 fork 하기 전까지 부모를 block 상태로 만들어주기 위한 sema(thread.c/init_thread() 초기값 0)

  • struct semaphore wait_sema : 복제된 자식 프로세스가 종료할 때까지 부모 block (thread.c/init_thread() 초기값 0)

  • struct semaphore free_sema : 자식은 바로 terminate 시키지 않고 부모가 sema up 시켜줄 때까지 대기(thread.c/init_thread() 초기값 0)

  • struct intr_frame pif : fork시에, 부모 context에서 register 메모리 상태를 자식에게 전달 목적

  • struct list child_list : 부모가 child_elem들을 관리하기 위한 리스트, (thread.c/init_thread() 리스트 초기화)

  • struct list_elem child_elem : fork 된 자식

  • struct file **fd_table : 말그대로 fd 테이블 (thread_create -> 할당, fd[0] = 1, fd[1] = 2 초기화)

  • int fd_idx : fd_table의 오픈 인덱스 (thread_create -> 2로 초기화)

  • struct file *running : for denying excutable writes (thread.c/init_thread(), NULL로 초기화)

  • int stdin_count (thread_create -> 1 초기화)

  • int stdout_count (thread_create -> 1 초기화)

include/userprog/syscall.h

struct lock filesys_lock : for synchronizaion

include/filesys/file.h

struct file

  • int dup_count : for dup count

userprog/process.c

struct thread* thread_child(int tid);

  • 입력 : tid
  • child_list 에서 해당 tid값을 가진 자식 쓰레드 구조체의 포인터 리턴, 없으면 return NULL;

void argument_stack_for_user(char **argv, int argc, struct intr_frame *if_){}

  • argument를 스택에 아래 방향으로 쌓는다. rsp pointer를 아래 방향으로 움직이면서 쌓음.
  • 8의배수로 맞춰주고, sentinel 패딩을 넣고, 각각의 arg 들의 시작점 주소들도 넣고, fake 리턴값도 넣고 여기서 나는 rdi, rsi 에 argc 랑 argv[0][0]도 여기서 넣어줬음.

userprog/syscall.c

전역 변수

void check_address(const uint64_t *addr);

  • addr이 NULL 인지, kernel_addr 에 있는지,

process_add_file (struct file *f){}

process_get_file (struct file *f){}

process_close_file (struct file *f){}

profile
이후띵's 개발일지

0개의 댓글