MIT 6.828 JOS????????????10. Lab 1 Part 3: The kernel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MIT 6.828 JOS????????????10. Lab 1 Part 3: The kernel相关的知识,希望对你有一定的参考价值。

?????????

Lab 1 Part 3: The kernel

?????????????????????????????????????????????JOS??????????????????boot loader?????????????????????????????????????????????????????????????????????????????????????????????C???????????????????????????????????????

??????????????????

???????????????boot loader??????boot loader????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????0xf0100000???????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????????????????????????????????????????????????????0xf0100000?????????????????????????????????????????????????????????????????????0xf0100000?????????????????????????????????0xf0100000?????????????????????

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

????????????????????????????????????????????????????????????????????????????????????????????????0xf0100000???????????????????????????????????????????????????????????????????????????????????????????????????0x00100000??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????lab\kern\entrygdir.c??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????0xf0000000~0xf0400000?????????????????????????????????0x00000000~0x00400000??????????????????????????????????????????0x00000000~0x00400000???????????????????????????????????????0x00000000~0x00400000???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????


 

??????Exercise 7???

????????????Qemu???GDB?????????JOS??????????????????????????????movl %eax, %cr0???????????????????????????????????????0x00100000??????0xf0100000???????????????????????????????????????stepi??????????????????????????????????????????????????????????????????????????????????????????????????????????????????

????????????????????????movl %eax, %cr0????????????????????????????????????????????????????????????????????????????????????????????????????????????entry.S?????????????????????????????????????????????

???????????????

???????????????????????????????????????0x10000C?????????????????????????????????????????????????????????0x10000C?????????????????????????????????  ???????????????????????????????????????????????????????????????movl %eax, %cr0?????????????????????????????????????????????0x00100000?????????0xf0100000???????????????????????????

??????????????????

?????????????????????????????????????????????????????????

??????????????????stepi?????????????????????si????????????????????????????????????

??????????????????

????????????????????????????????????????????????????????? ?????????????????????0xf0100000?????????????????????????????????0x00100000?????????

??????

??????????????????????????????entry.S????????????%movl %eax, %cr0?????????????????????????????????????????????????????????make clean????????????%movl %eax, %cr0???????????????????????????????????? ?????????qemu??????????????????????????????0x10000C????????????????????????????????????????????????????????????????????????????????????

??????????????????

???????????????0x10002a??????jmp??????????????????????????????0xf010002C???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????make qemu-gdb?????????????????????????????????

??????????????????

????????????????????????????????????????????????????????????


 

???????????????????????????(??????)

??? ????????????????????????????????????printf?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

    ??????kern/printf.c???lib/printfmt.c???kern/console.c??????C??????????????????Exercise 8???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????printfmt.c??????????????????lib???????????????

??? Exercise 8???http://www.cnblogs.com/fatsheep9146/p/5066690.html


 

    ????????????????????????Exercise 8??????????????????

??? 1. ????????????printf.c???console.c????????????????????????console.c??????????????????????????????????????????????????????printf.c???????????????

??? ?????????Exercise 8???????????????????????????????????????????????????????????????console.c????????????static????????????????????????????????????????????????????????????????????????printf????????????????????????cputchar????????????

??? 2. ????????????console.c??????????????????????????????????????????

1 if (crt_pos >= CRT_SIZE) {
2        int i;
3        memcpy(crt_buf, crt_buf + CRT_COLS, (CRT_SIZE - CRT_COLS) * sizeof(uint16_t));
4        for (i = CRT_SIZE - CRT_COLS; i < CRT_SIZE; i++)
5                crt_buf[i] = 0x0700 | ??? ???;
6        crt_pos -= CRT_COLS;
7 }

 

??? ??????????????????????????????????????????

????????? crt_buf:?????????????????????????????????????????????????????????????????????????????????

????????? crt_pos:???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????    ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????console.c???????????????????????????????????????????????????????????????80x25???????????????????????????????????????????????????25??????????????????????????????80?????????????????????????????????80x25?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????cga???

????????? ??????console.c?????????????????????cga_putc(int c)????????????????????????????????????c????????????????????????????????????????????????????????????????????????????????????????????????(0?????????1?????????2??????)?????????????????????????????????40????????????????????????cga_putc(0x65)??????????????????0x65??????????????????A????????????2?????????41?????????????????????cga_putc?????????????????????crt_buf???????????????????????????????????????????????????????????????????????????????????????????????????crt_pos????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????crt_pos = 85?????????????????????????????????2?????????1???????????????6?????????5????????????????????????crt_pos???????????????????????????0~(80*25-1)???

????????? ?????????????????????????????????????????????cga_putc??????cga_putc???????????????????????????????????????????????????int c???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

????????? ???crt_pos >= CRT_SIZE?????????CRT_SIZE = 80*25?????????????????????crt_pos???????????????0~(80*25-1)???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1~79?????????????????????0~78??????????????????79????????????????????????????????????????????????????????????0???????????????????????????????????????int c????????????memcpy???????????????crt_buf???????????????1~79????????????????????????0~78????????????????????????????????????for??????????????????????????????79????????????????????????????????????????????????crt_pos?????????

???3. ??????????????????????????????

int x = 1, y = 3, z = 4;
cprintf("x %d, y %x, z %d\n", x, y, z);

???????????????????????????

????????????* ?????????cprintf??????fmt???????????????????????????ap???????????????????????????

????????????* ????????????????????????????????????cons_putc, va_arg??????vcprintf??????????????????cons_putc??????????????????????????????????????????va_arg??????ap???????????????????????????????????????????????????????????????vcprintf???????????????????????????????????????

????????????

????????????cprintf?????????

????????????
 1 int
 2 cprintf(const char *fmt, ...)
 3 {
 4     va_list ap;
 5     int cnt;
 6 
 7     va_start(ap, fmt);
 8     cnt = vcprintf(fmt, ap);
 9     va_end(ap);
10 
11     return cnt;
12 }
cprintf(const char *fmt, ...)

????????????????????????????????????fmt????????????????????????????????????????????????????????????????????????????????????????????????"x %d, y %x, z %d\n"???????????????ap???va_list????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ap???????????????????????????????????????

???????????????????????????cprint????????????vcprintf?????????????????????????????????fmt????????????????????????ap?????????x,y,z??????????????????????????????vcprintf?????????vcprintf?????????\lib\printfmt.c??????vprintfmt??????????????????????????????4???????????????1???????????????????????????????????????????????????????????????printf.c????????????????????????putch????????????????????????????????????????????????????????????????????????????????????0????????????????????????2?????????????????????2???????????????????????????????????????????????????1????????????????????????????????????????????????????????????????????????2?????????????????????????????????????????????????????????1????????????????????????????????????????????????????????????2???????????????????????????????????????????????????????????????2????????????????????????????????????????????????????????????????????????3,4??????????????????????????????cprintf??????????????????

??????????????????vprintfmt???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????fmt??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????4????????????

??????"x %d"??? ", y %x" , ", z %d", "\n"

????????????????????????????????????%???????????????????????????????????????????????????"x %d"???"x "???????????????%???????????????????????????"x %d"?????????????????????????????????10??????????????????????????????????????????%?????????????????????????????????????????????????????????????????????????????????????????????"x %d"?????????????????????????????????????????????

1         case ???d???:
2             num = getint(&ap, lflag);                        //?????????????????????????????????int?????????long?????????long long??????????????????ap??????????????????????????????
3             if ((long long) num < 0) {                        //???????????????????????????????????????????????????
4                 putch(???-???, putdat);
5                 num = -(long long) num;
6             }
7             base = 10;
8             goto number;

?????????????????????????????????????????????getint????????????????????????????????????

 1 static long long
 2 getint(va_list *ap, int lflag)
 3 {
 4     if (lflag >= 2)
 5         return va_arg(*ap, long long);
 6     else if (lflag)
 7         return va_arg(*ap, long);
 8     else
 9         return va_arg(*ap, int);
10 }

??????????????????????????????????????????????????????va_arg?????????ap????????????????????????????????????????????????????????????????????????9????????????????????????va_arg?????????????????????????????????ap?????????x???y???z????????????????????????1???3???4???????????????????????????y???z????????????3,4.

????????????vprintfmt?????????num??????????????????????????????1??????????????????????????????????????????????????????????????????????????????????????????putch?????????????????????????????????????????????????????????number??????

??????number????????????????????? printnum(putch, putdat, num, base, width, padc)???????????????????????????????????????????????????????????????????????????????????????1???????????????????????????????????????????????????????????????????????????num = 1?????????????????????????????????base = 10????????????????????????????????????????????????????????????????????????????????????putch????????????????????????????????????????????????putch(padc, putdat);??????????????????????????????????????????????????????????????????????????????

?????????????????????1?????????x=1?????????????????????????????????????????????????????????????????????

??????????????????????????????????????????????????????????????????\lab\kern\monitor.c????????????vim????????????????????????????????????monitor????????????????????????

??????????????????

??????????????????????????????????????????lab??????????????? make qemu ????????????????????????????????????

??????????????????

??????4. ????????????????????????

 unsigned int i = 0x00646c72;
    cprintf("H%x Wo%s", 57616, &i);

?????????????????????????????????????????????????????????????????????

???????????????

?????????????????????????????????????????????????????????????????????????????????????????????moniter.c??????????????????????????????????????????????????????

????????????????????????

??????????????????????????????????????????????????????????????????%x?????????????????????16??????????????????????????????????????????????????????57616???????????????16????????????????????????e110???????????????????????????He110???

??????????????????????????????%s????????????????????????????????????????????????&i????????????i??????????????????????????????????????????i??????????????????????????????

??????????????????cprintf???????????????i???????????????int????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????????????????x86???????????????????????????????????????????????????????????????????????????????????????i??????????????????0x00?????????i???4????????????????????????0x00???0x01???0x02???0x03???????????????????????????????????????0x00?????????0x72(???r???)???0x01?????????0x6c(???l???)???0x02?????????0x64(???d???)???0x03?????????0x00(???\0???).

?????????????????????cprintf?????????i???????????????????????????????????????????????????????????? "World"

??????5. ???????????????????????????y=????????????????????????????????????????????????

 cprintf("x=%d y=%d", 3);

???????????????

?????????????????????????????????

????????????????????????

??????????????????y??????????????????????????????????????????????????????????????????

 

??????

????????????????????????????????????????????????????????????C??????????????????x86?????????????????????????????????????????????????????????????????????kernel monitor??????????????????????????????????????????????????????????????????????????????????????????????????????IP?????????????????????????????????????????????????????????????????????IP??????????????????????????????????????????????????????????????????????????????????????????call?????????


 

??????Exercise 9???

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

???????????????????????????????????????????????????http://www.cnblogs.com/fatsheep9146/p/5079177.html


 

??????X86????????????????????????%esp?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1??????????????????4????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1??????????????????4?????????32bit????????????????????????????????????????????????32bit?????????????????????%esp??????????????????????????????4????????????

?????????ebp?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ebp??????????????????????????????????????????????????????ebp??????????????????????????????esp?????????????????????????????????????????????????????????????????????ebp???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ebp????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????


 

??????Exercise 10???

????????????????????????????????????x86??????C???????????????????????????????????????????????????obj/kern/kern.asm???test_backtrace????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????test_backtrace???????????????????????????????????????????????????????????????????????????????????????

?????????????????????http://www.cnblogs.com/fatsheep9146/p/5079930.html


 

     ??????????????????????????????????????????????????????????????????????????????????????????mon_backtrace??????kern/monitor.c???????????????????????????????????????????????????C?????????????????????????????????????????????????????????kernel moniter????????????????????????????????????????????????moniter???????????????????????????

???  ???????????????????????????????????????????????????????????????

???  Stack backtrace:

???  ??????ebp f0109358 eip f0100a62 args 00000001 f0109e80  f0109e98 f0100ed2 00000031

?????????  ebp f0109ed8 eip f01000d6 args 00000000 00000000 f0100058 f0109f28 00000061

???        ...

??? ??????????????? "Stack backtrace"?????????????????????????????????mon_backtrace??????????????????????????????????????????mon_backtrace?????????a???????????????????????????????????????a?????????b????????????????????????????????????

??? ??????????????????ebp???????????????????????????????????????????????????ebp???????????????????????????????????????????????????????????????????????????eip?????????????????????????????????????????????????????????????????????args?????????16???????????????????????????????????????????????????????????????????????????????????????????????????????????????


 

??? Exercise 11???

??? ????????????????????????????????????backtrace????????????

??? ?????????

??? ???????????????????????????????????????????????????????????????????????????????????????????????????ebp????????????????????????????????????????????????????????????????????????????????????eip????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

??? ???????????????????????????????????????????????????????????????????????????????????????

??? ????????????

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ebp???????????????????????????????????????????????????????????????????????????????????????????????????

??????????????????????????????????????????????????????????????????????????????????????????ebp???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????????????????????????????????????????ebp+4??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????(ebp+8, ebp+12....)???

??????????????????????????????????????????????????????????????????ebp?????????????????????????????????????????????????????????????????????ebp??????????????????????????????

????????????????????????????????????github???????????????~


 

  ??? ?????????????????????????????????backtrace???????????????????????????mon_backtrace()????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

???   ??????????????????????????????????????????????????????????????? debuginfo_eip()?????????????????????????????????symbol table????????????eip???????????????????????????????????????eip???????????????????????????????????????????????????kern/kdebug.c????????????


??????Exercise 12

??????????????????Exercise?????????????????????????????????????????????????????????????????????

??????

 

 

 

 

 

 

 

 

 

????????????

????????? 

?????????

 

以上是关于MIT 6.828 JOS????????????10. Lab 1 Part 3: The kernel的主要内容,如果未能解决你的问题,请参考以下文章

MIT 6.828 JOS学习笔记9. Exercise 1.5

MIT 6.828 JOS学习笔记8. Exercise 1.4

MIT 6.828 JOS学习笔记5. Exercise 1.3

MIT-6.828-JOS-lab5:File system, Spawn and Shell

MIT 6.828 JOS学习笔记7. Lab 1 Part 2.2: The Boot Loader

MIT 6.828 JOS学习笔记4. Lab 1 Part 2.1: The Boot Loader