This repository has been archived by the owner on Dec 18, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Proj2
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() 함수 위해 사용
- 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에서 진행
- parent의 files를 duplicate 후 child의 files에 넣어줌
- 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 이런식으로 캐스팅해서 사용