Lab13_C & Fork.pdf

lab013_Booting.pdf


  1. Explain why CoW increase performance in general and how will you implement CoW in xv6 in briefly.

    CoW 방식을 사용하여 process를 생성하면 부모와 자식 process는 각각 서로다른 logical address space를 가지게 되어 제대로 메모리를 할당받았다고 착각을 하게 만들고, OS는 physical address space를 공유하게 만들어 copy를 처음부터 진행하지 않기 때문에 process create 시간이 짧아진다. 그만큼 I/O를 해줄 양이 줄기 때문에 빨라진다. 그리고 write를 해야할 때 그제서야 physical 공간에 저장을 해주기 때문에 write 한 페이지만 복사를 해주기 때문에 메모리 효율성 측면에서도 performance가 증가한다.

    xv6에서는 pgdir을 부모와 자식간에 잠시 공유하게 하고 stack은 따로 할당해주고 write가 발생하면 page를 새로 할당해주는 방식을 채택하면 될 것 같다.


  1. CoW is needed in xv6 especially when fork and exec. Explain how CoW improve performance of xv6 when fork and exec.

    fork의 경우에는 위에서 설명한 이유와 같고, exec의 경우에는 file을 가상 공간공간에 할당해주는 코드가 있는데, 한 번 파일이 메모리에 매핑되면 나중에 다른 process가 파일을 열어도 logical address만 새로 할당해주고 이 매핑된 메모리를 가리키게 하면 메모리 효율성을 높일 수 있다. 실제로 파일을 열어 접근하게 되면 그 때 page를 올려주어 I/O를 최소화 할 수 있다.


  1. Explain full process of xv6 booting in detail.

    PC powers on(xv6를 실행하면) -> bootloader를 load하여 거기서부터 일을하기 시작하는데, 이 때 실행되는 것이 bootasm.S이다. bootasm.S는 start fragment를 실행하여 bootmain.c를 실행한다. 이 과정을 거쳐 최종적으로 xv6의 kernel을 메모리에 load하고 kernel entry로 점프하여 커널코드를 실행한다.