欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 笔记 3 :linux 0.11 中的重要的全局变量 (b)

笔记 3 :linux 0.11 中的重要的全局变量 (b)

2025/9/17 18:20:15 来源:https://blog.csdn.net/zhangzhangkeji/article/details/140386326  浏览:    关键词:笔记 3 :linux 0.11 中的重要的全局变量 (b)

(15) 接着介绍缓冲区初始化,首先介绍一个全局量 end ,表示 源代码编译的终点,随后就是缓冲区。缓冲头环形双链表的 end 的节点的地址保存在内核数据区的指针 start_buffer 里,以供内核代码使用,这是个全局变量。 经 static 修饰的 指针 free_list 仅有 buffer . c 文件使用:

在这里插入图片描述

上图里也介绍了关于缓冲区的其它几个全局变量。全局数组 hash_table 的位置肯定是在 end 以前定义的。end 后为随机数据缓冲区。

(16) 接着介绍缓冲区头部 buffer_head 这个结构体:

在这里插入图片描述

(17) 由于初始化了缓冲区后,得出操作系统指导的内存分布图:

在这里插入图片描述

(18) 接着介绍硬盘初始化时的全局变量与结构:

在这里插入图片描述

(19) 接着要使 0 号进程转到用户态。书中说:linux 操作系统规定,所有进程都要由已存在的进程在 3 特权级创建

在这里插入图片描述

给出 move_to_user_mode() 这个 宏定义的源码:

在这里插入图片描述

执行上面代码的时候 , CPU 里的重要的寄存器都已赋值 : GDTR 、 LDTR 、TR 、 IDTR 、 CR0 、 CR3 、 ESP 等。

(20) 接着是宏定义 sti () ,跟函数似的,而且 c 语言语法不直接支持汇编语句的书写:

在这里插入图片描述

(21) 接着介绍在 main 函数里是如何调用 fork ( ) 函数的,及全局变量 errno ,此值记录函数调用出错码 :

在这里插入图片描述

(22) 关于 fork() 函数,可以参考笔记 1 ,这里继续补充,这里记录下 全局函数指针数组 sys_call_table 的定义,及 typedef 的用法,可见这些函数都不能有参数:

在这里插入图片描述

以及测试 typedef 的补充例子:

在这里插入图片描述

以及确认函数类型:

在这里插入图片描述

(23) 继续分析 fork( ) 函数的执行过程及编译时候的符号链接:

在这里插入图片描述

(24) 再来看看 system_call 系统调用的定义,由以上分析知,系统足以在 int 80H 中断发生时,根据功能号来找到合适的子例程来执行:

在这里插入图片描述

(25) 再举一例,关于编译 linux 0.11 源码的编译器的对符号的链接问题, 表示全局描述符表 gdt 和中断描述符表 idt 这两个 c 语言中的全局变量的赋值问题:

先介绍一个 sourceinlight 的好用的功能,用于变量名和函数名的跟踪:

在这里插入图片描述

如下图:

在这里插入图片描述

(26) 本条目分析例程 find_empty_process ( ) ,并介绍汇编指令 test 的功能,以及又一个新的全局变量 last_pid :

在这里插入图片描述

(27)
谢谢

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com