美文网首页
day3 切换到32位

day3 切换到32位

作者: 柯基是只dog | 来源:发表于2018-12-06 16:19 被阅读0次

head.s会和其他c程序一起编译成内核代码,就像名字一样,他是内核的开头部分,前面setup.s程序已经完成了他的使命把内核代码加载到0开始的部分了,head就开始为内核的工作做一些初始化的工作,后面的代码则都由c来写了。

设置IDT表

内核最重要的一个功能就是处理中断了,不同的事件产生都会生成一个中断号并被cpu捕捉到,cpu根据内核设置的中断表找到对应中断号的中断处理程序,交由内核处理。所以内核就必须提前告诉cpu中断表的位置,并在中断表中设置各个中断对应的表项。
通过设置一个idtr的寄存器来让内核告诉cpu中断表位置,idtr是48位的,前16位是表限长,后32位是中断表基址。每个中断描述项如下


image.png

设置GDT表

段的内容昨天说过了,内核初始化的时候硬编码了两条记录,分别是第1和第2项,第0项规定留空不用,剩下253项先用0填充了


image.png

开启分页

linux把地址从0开始的4K地址用作页目录,紧挨着后面是4个页表,分页是把虚拟地址经过分段产生的线性地址再一次经过分页产生真正的物理地址。
分页的逻辑也很简单,32位先行地址,0-11共12位作为页偏移刚好寻址4K,中间12-21共10位作为页表项选择符,22-31共10位作为页目录选择符
使用了二级目录,原因是节省内存,如果使用一级分页,要寻址4G的物理地址,则需要4G/4M=1K页,共需要1K*4K=4M内存,什么都不干就需要吃掉4M的内存,如果使用二级页表的话,则初始化只需要一个页目录,根据需要生产二级页面,这样不会一开机就白白浪费那么多内存了。

初始化后的内存布局

image.png
image.png

相关文章

  • day3 切换到32位

    head.s会和其他c程序一起编译成内核代码,就像名字一样,他是内核的开头部分,前面setup.s程序已经完成了他...

  • Linux常见命令操作

    cd命令 cd:切换到当前用户根目录,默认[/home/用户名称/] cd . :切换到当前目录 cd .. :切...

  • Linux 目录基本命令

    目录切换命令 cd usr: 切换到 usr 目录 cd ..(或cd../): 切换到上一层目录 cd /: 切...

  • 读《哈佛情商管理》

    Day3: 你能调动情绪,就能调动一切。 ——美国总统 布什 ...

  • Linux必懂基础命令一

    文件 1、cd命令。切换目录命令。cd 单独一个cd,切换到用户主目录cd ~ 切换到用户主目录cd / 切...

  • hide/show切换的BaseFragment

    测试一下 切换到fragment2 切换到fragment3 再切回fragment1 技拙 欢迎批评指正O(∩_∩)O

  • 切换终端

    我们可以通过如下命令从 bash 切换到 fish : 也可以通过如下命令切回到 bash:

  • Kotlin 协程之线程池探索之旅(与Java线程池PK)

    前言 上篇文章分析了协程切换到主线程执行的详细流程,本篇将分析如何切换到子线程执行。通过本篇文章,你将了解到: 切...

  • 2017-11-01

    【萱草芳菲 学而思 20171101 设计改变一切 day3】(叫醒耳朵21/23) 今天的带读提到了“拉链嘴”,...

  • Day44允许一切如是的发生

    ❤【音频文稿素材Day3 20200422】 今天我分享的内容标题是《允许一切如是的发生》。 01.我想和大家...

网友评论

      本文标题:day3 切换到32位

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