美文网首页
Pintos源码学习进度(1)

Pintos源码学习进度(1)

作者: speakspeak | 来源:发表于2019-05-12 09:19 被阅读0次

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函数


相关文章

  • Pintos源码学习进度(1)

    1.了解Pintos ①如何下载与安装Pintos. 在threads目录下使用make,就可以将Pintos装好...

  • Pintos源码学习进度(7)

    1.用户态堆栈的实现 ①创建一个用于的page directory,并存放在thread结构中. ②创建一个pag...

  • Pintos源码学习进度(8)

    1.系统调用的基本过程 ①调用系统调用相关函数,在系统调用函数中调用syscall,在syscall中会调用i...

  • Pintos源码学习进度(2)

    1.Thread结构 在pintos中,仅有init thread存放在0x0000e000 ~ 0x0000...

  • Pintos源码学习进度(4)

    1.中断函数 intr_get_level /intr_set_level ①获得中断的状态, on还是off...

  • Pintos源码学习进度(3)

    1.信号量的作用 ①当信号量初始值为0时,通过sema_down可以用于当一个进程创建另一个进程后,使自己进行bl...

  • Pintos源码学习进度(6)

    1.进程switch机制 对于正在运行进程的切换 ①通过中断机制的时间中断进入timer_interrupt函数....

  • Pintos源码学习进度(5)

    1. page allocate内存分配方式 struct pool { struct lock lock;...

  • Docker源码学习进度(1)

    1.编译最为简单的Docker ①安装GO 其中包括,下载go的安装,并且加安装路径存入,$HOME/.bashr...

  • 错题本!

    SUSTech CS302 OS Project1 Report Title: Pintos Stude...

网友评论

      本文标题:Pintos源码学习进度(1)

      本文链接:https://www.haomeiwen.com/subject/pbaaoqtx.html