Pintos源码学习进度(1)

2019-05-12  本文已影响0人  speakspeak

1.了解Pintos

①如何下载与安装Pintos.

在threads目录下使用make,就可以将Pintos装好

②如何下载与安装bochs

需要有这些库的支持

  sudo yum install gtk2 gtk2-devel

  sudo yum install libXt libXt-devel

  sudo yum install libXpm libXpm-devel

在make的时候可能会有错误。记得在Mikefile中加上-lpthread.

./configure --with-x --with-x11 --with-term --enable-debugger --enable-gdb-stub

然后在make,make install

③在centos中下载一个桌面.

2.学会GDB调试

①在一个终端中../../utils/pintos --gdb -s -- run mytest   ,注意--必须放在run前面

②在另个终端中 

../../utils/pintos-gdb kernel.o

target remote localhost:1234

layout regs

set dissassemble-next-line on

③b(break) main  设置断点

④c(continue)    运行到断点处

⑤n在C的情况下向下走一行, ni在汇编的情况下向下走一行

⑥调试用户态程序,需要先将macros进行启动,gdb>source pintosdir/src/misc/gdb-macros,其中pintosdir是pintos的存储的位置.再输入loadusersymbols echo将echo进行反汇编导入到gdb中。

3.loader.S的主要内容

①disk,sector,partition table的区别

disk是硬盘。

sector是扇区。

内核是放在一块硬盘中的第一个扇区的。因此只要找第一个扇区就可以了。

partition table是分区表,相关的partition table中存放着kernel的first sector与sector number

就是内核在硬盘中存放的位置

②查找kernel存在的位置

③读取kernel

④loader.S中的内存分配

00007c00 ~ 00007dff 存放的是loader.S的代码.

0000e000 ~  0000efff 

存放的是Stack for loader; kernel stack and struct thread for initial kernel thread.

0000f000~0000ffff   Page directory for startup code.  这里是页目录

00010000--00020000  Page tables for startup code.  这里是页表

00020000~0009ffff  存放的是kernel code,data.

4.start.S的主要内容

①从BIOS中获取memory的大小,并计算出page的个数,存入init_ram_pages

②开启A20,使得我们可以访问1MB以后的内存空间

③建立页目录,与页表。

④将页目录的基地址放入cr3寄存器

⑤禁止中断

⑥从实模式转化到保护模式

⑦跳转到main函数


上一篇 下一篇

猜你喜欢

热点阅读