内核的执行头程序head.S

简介: 功能定义data段和text段重新手动初始化gdt表, idt表, tss表结构初始化页表和页目录 --> 页目录的数据放在一个页表中在页目录中, 其实地址为0x1000, 初始化页目录, 一个页目录占用的页表的剩余数据值使用0来填充, 一个页表的大小分为(2MB, 4MB, 8MB等...

功能

  • 定义data段和text段
  • 重新手动初始化gdt表, idt表, tss表结构
  • 初始化页表和页目录 --> 页目录的数据放在一个页表中

    • 在页目录中, 其实地址为0x1000, 初始化页目录, 一个页目录占用的页表的剩余数据值使用0来填充, 一个页表的大小分为(2MB, 4MB, 8MB等, 一般来说越大则容易造成页颗粒过于零碎)
  • 在text代码段中, 使用 lgdt, lidt 和 load cr3 等加载数据到寄存器中
  • 初始化完毕之后, 通过跳转指令将CPU指向真正内核的代码, 就是一个函数的地址罢了
  • 注意: 对于head.S, 我们知道他是在内核这一个可执行文件中的, 并且是在最前面, 所以我们在链接的时候需要将其放到内核代码的最前面

目录
相关文章
|
3月前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
4月前
|
网络协议 API Windows
MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确
MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确
|
4月前
|
API
MASM32编程使用PE文件头信息计算文件长度
MASM32编程使用PE文件头信息计算文件长度
|
4月前
|
NoSQL
读取内核变量的几种方法
读取内核变量的几种方法
|
6月前
|
应用服务中间件 开发工具 nginx
Ngnix全局块的工作进程的两个指令
Ngnix全局块的工作进程的两个指令
|
8月前
|
监控 Linux
linux(十六)文件和目录相关命令-查看文件头部内容head与查看文件尾部内容tail
linux(十六)文件和目录相关命令-查看文件头部内容head与查看文件尾部内容tail
166 0
|
8月前
|
Unix Linux 索引
Linux 基础解惑:Linux 下文件描述符标志和文件描述符状态标志,文件状态标志,文件状态之间的区别
Linux 基础解惑:Linux 下文件描述符标志和文件描述符状态标志,文件状态标志,文件状态之间的区别
215 0
|
安全 Linux API
Linux内核10-list_head和hlist_head的理解
Linux内核10-list_head和hlist_head的理解
|
存储 缓存 安全
PHP的passthru() 函数:执行一个命令,并将输出直接发送到输出缓冲区,缓冲区是干什么的?为什么要发送到缓冲区?
PHP的passthru() 函数:执行一个命令,并将输出直接发送到输出缓冲区,缓冲区是干什么的?为什么要发送到缓冲区?
375 0
JVM虚拟机-Class文件之访问标志
JVM虚拟机-Class文件之访问标志
109 0