210215 개발일지(70일차) - 운영체제(OS) 프로젝트 #2-5 : fork에 대하여

고재개발·2021년 2월 18일
0

OS Project

목록 보기
16/28

원래 pintOS에서 fork는 구현하지 않는데, kaist pintOS에서는 fork() 함수를 구현한다.
공식 깃북에는 아래와 같이 설명이 돼있다.

요약하자면, 현재 프로세스의 복제 프로세스를 만든다.
1. 현재 스레드의 interrupt_frame을 복제한다.
2. fd_table을 복제한다.
3. 복제된 스레드는 tid = 0을 갖는다.(부모는 정상적으로 tid 할당)
4. 제대로 복제하지 못할 경우 TID_ERROR (==-1)을 리턴한다.

fork() 함수를 활용해, 복제한 프로세스(스레드)로 특정 작업을 진행할 수 있다.
흐름은 아래 그림을 참고하자.

부모 프로세스와 자식 프로세스의 상황

syscall.c에서 구현한 fork() 함수

pid_t fork (const char *thread_name){
    struct intr_frame *user_tf = &thread_current()->fork_tf;
    pid_t child_pid = process_fork(thread_name, user_tf);
    sema_down(&get_child_process(child_pid)->load_lock);
    return child_pid;
}
profile
고재개발

0개의 댓글