[정글 72일차] Project2 발표 및 Project3 발제
- Project2 발표
Pintos Project2를 마무리하면서 발표를 진행했다. System Call 호출과 관련된 내용 중 fork의 수행 과정에 대해 발표를 진행하였는데 부족하지만 성공적으로 마무리 된 것 같아서 다행이다.
발표한 내용에 대해 잠시 정리를 하자면 fork()가 호출되었을 경우 함수 호출의 움직임에 대한 대략적인 내용이다.
[fork 함수 호출 순서]
1. user 영역에 있는 user program(CMD)에서 fork를 호출하면 systemcall을 통해 kernel 영역의 systemcall이 호출된다.
2. System call handler가 rsp를 통해 호출 번호를 확인하고, fork가 실행됩니다.
3. fork 내에는 process_fork가 호출되는데, process_fork는 parent_if에 현재의 cpu if를 복사하고,
4. 자식 thread를 생성하기 위한 thread_create 호출하게 됩니다. (부모는 자식프로세스가 성공적으로 복제 되었는지 여부를 알 수 있을때 까지 반환을 해서는 안되므로 semaphore 를 사용하여 구현)
5. copy를 하는 과정에서 copy가 끝날 때까지 sema down을 통해 parent thread가 waiter list에 들어가고 child의 쓰레드가 실행 됩니다.(do_fork)
6. 이때 thread_create에서 인자를 전달받은 __do_fork는 자식의 interrupt frame을 생성하고 전달받은 parent thread의 interrupt frame을 new if에 복사합니다.
7. 또한 page mapping table과 fdt를 복사하여 부모와 같은 정보를 가지게 됩니다.
8. 이 과정이 끝난 이후에 sema_up을 통해 fork semaphore를 up하는데, 이때 wait list에 있던 부모 thread가 ready list에 들어갑니다.
9. 만약 interrupt가 발생하지 않는다면 이때 자식은 ready list로 들어가고, do_iret으로 cpu에 interrupt frame 정보를 넣게 됩니다.
10. cpu가 assembly로 정의되어 있는 program counter를 통해 기존에 중단되어 있던 부모 프로세스의 코드부터 순차적으로 실행하므로, return child_id부터 실행되게 됩니다.
11. 이런 일련의 과정으로 부모 프로세스가 자식 프로세스를 생성하게 됩니다.
함수 하나를 구현하는 것에도 많은 시간과 내용이 있다는 것을 이번 프로젝트를 통해 배운 것 같다.
내용을 구성하다보니 개념적인 지식에 대한 공부가 부족했는데 다음 프로젝트에서는 좀 더 보완을 해야겠다.
- Project3 발제
Project2도 숨가쁘게 진행한 것 같은데 바로 발제가 시작되었다. Project3의 내용은 Virtual Memory와 관련된 내용을 구현하는 것으로 직접 디자인 해야한다는 내용을 듣고 한숨만 나왔다.
발제 시간에 코치님과의 질의를 통해 내가 생각해 보지 못했던 부분에 대해 잘 알 수 있는 것 같다.
우선 발제 때 나온 내용과 질문을 정리 한다면
Q1. fork 함수는 2개의 return 값을 가지고 있는데 무엇을 return하는가?
=> Parent의 메모리 복제 후 Child는 부모에게 Child 프로세스라는 의미로 0을 return 하고, 자신은 pid를 갖고 필요 시 pid를 return 하게 된다라는 의미로 이해 되었다.
Q2. Program Counter의 의미가 무엇인가요?
=> Program Counter은 현재 실행되어야 할 문장의 위치를 알려주는 것으로 인터럽트, 콜, 시스템 콜 발생 시 스택 내에 rip로 정보를 가지고 있다가 실행 시 cpu 레지스터에 올려 해당 문장부터 실행을 하게 해주는 것으로 이해가 되었다.
이외에도 rsp의 역할, 각각의 스택 포인터가 의미하는 바에 대해 여쭤보셨는데 이 질문을 통해 스스로가 많이 부족하다는 점을 알게되어 CS 공부를 좀 더 중점적으로 해야겠다는 생각이 들었다.
발표자료를 준비하기 위해 전날에 밤을 샜더니 몸상태가 너무 안좋은 하루다. 하지만 열심히 구현해서 이번에는 내용을 다 따라가도록 노력해야겠다.