3. The Kernel
- entry가 CR0_PG를 %CR0에 넣으면 paging hardware가 enable된다.
- 커널을 high memory에 mapping하기 위해 stack pointer를 initialize한다.
movl $(stack + KSTACKSIZE), %esp
- 여기서 stack은 kernel.sym에 0x8010a5c0으로 선언되어 있으며, KSTACKSIZE는 4096으로 선언되어 있다. 합한 값이 high addr.이므로, entry의 실행이 끝나고 low mapping이 사라져도 stack이 valid할 수 있게 된다.
- 과정을 마치면 main으로 jump한다.
The stack
- esp : stack pointer, 현재 사용되는 stack의 가장 낮은 지점을 point한다.
- ebp : base pointer, SW convention과 관련이 있다.
- C function의 entry에서 함수의 prologue code가 직전 함수의 ebp를 stack에 저장한다.
- 현재의 esp를 ebp에 copy한다. (새로운 base pointer)
- 저장된 ebp 값들을 활용하면 nested call을 backtrace할 수 있다.