Day1
xv6라는 교육용 운영체제를 가지고, 실제로 운영체제가 어떤식으로 이루어져있고 동작하는지 2주동안 공부해보려고 한다.
QEMU라는 프로그램을 통해서, 가상으로 xv6 운영체제를 서버위에서 구동하고, gdb 디버거를 통해서 살펴보았다.
-
Lab 0 파트는 먼저 운영체제가 구동되는 시작 과정인 BIOS 그리고 Boot Loader 에 대해서 주로 다루고있다. xv6의 맨처음 instruction은 BIOS공간에서 시작했다. 여기서는 memory 용량 체크, video card 초기화 등의 작업이 이뤄진다. 그후에, boot가능한 device 를 찾아서, boot loader 를 실행시키고 control을 넘겨주게 된다. 그후에는 boot loader 가 커널을 메모리로 올리고, 커널을 실행시킨다. 오늘은 주로 이 boot loader 역할을 하는 코드인 bootasm.S 그리고 bootmain.c 를 살펴보았다.
-
exercise 문제는 디버거를 사용해서 어떤 instruction에서 boot loader가 끝나고, 커널의 첫번째 instruction은 무엇인지 찾는 것이었다. 부끄럽지만 디버거도 사용해본 적이 거의없고 어셈블리 코드를 보는 것도 낯설어서 오늘 많이 해맸던것 같다. 후에 다같이 모여서 exercise 문제를 보았는데, 내가 혼자 해매이면서 생각했던 것들이 다 틀리지는 않다는 것을 알게 되었고, 몰랐던 것들을 이해하는데 도움이 되어서 좋았다. 아직 낯설고 어려워서 긴장이 많이 되지만, 이번 기회에 디버거 어셈블리 등등 많은 것을 얻어갈 수 있을 것 같다.