Skip to content
This repository has been archived by the owner on Dec 18, 2021. It is now read-only.
Woojin Lee edited this page Oct 9, 2021 · 5 revisions

한양대 자료

https://oslab.kaist.ac.kr/wp-content/uploads/esos_files/courseware/undergraduate/PINTOS/01.pdf
https://oslab.kaist.ac.kr/wp-content/uploads/esos_files/courseware/undergraduate/PINTOS/02.pdf
https://oslab.kaist.ac.kr/wp-content/uploads/esos_files/courseware/undergraduate/PINTOS/03.pdf
https://oslab.kaist.ac.kr/wp-content/uploads/esos_files/courseware/undergraduate/PINTOS/04_File_Descriptor.pdf
https://oslab.kaist.ac.kr/wp-content/uploads/esos_files/courseware/undergraduate/PINTOS/05_Denying_Write_to_Executable.pdf

(이유는 모르지만) process.c에서 filesys_lock은 open할때만 써야 하는듯....????

새로 추가한 변수들

struct thread
//USERPROG //USERPROG 안에 있음

  • fd_table: (int) fd -> (struct file *)f. next_fd_table
  • files: (struct file *)f를 모아둔 array. next_file
  • dead_childs: wait() 함수 구현하기 위해서 만든 list. struct dead_child 참고
  • struct file *file_executing: executing인 파일에 write하지 못하도록 추가한 변수
  • load_sema: fork, load (process_exec() 안에 있음)을 위해 사용
  • exit_sema: wait() 함수 위해 사용

process.c

  • fd_table과 files 작동 원리 -- process_add_file fd_table은 빈 곳 있으면 빈칸에 추가. 빈 칸 없으면 realloc 통해 새로운 칸 만들고, 할당 files에는 무조건 추가(+realloc) -- process_close_file
    fd_table의 해당 fd만 NULL로 바꿈. 실제 file close는 process_exit에서 진행
    files는 바꾸지 않음
    -- process_exit
    files array 돌면서 전부 file_close 실행
    -- process_fork
    __do_fork에서 진행
  1. parent의 files를 duplicate 후 child의 files에 넣어줌
  2. parent의 fd_table element 각각에 대해
    parent의 fd_table index를 X라 하자.
    2-1. parent의 files와 비교하며 files의 index 탐색(Y라 하자)
    2-2. child의 fd_table[X]를 child의 files[Y]로 덮어쓴다.
  • process.c의 stdin, stdout:
    일단 메모리 할당해 두기 위해 아무 타입으로(uint64_t) 설정해뒀음.
    나중에 (struct file *)&stdin 이런식으로 캐스팅해서 사용
Clone this wiki locally