笔记 6 :linux 0.11 注释,新设计艺术团队第二版。第三章 3-21a-----3-21e 及更早

(47) 介绍下 linux 0.11 中定义的信号量

在这里插入图片描述

(48) 接着介绍下逗号表达式 , linux 大师这么使用了 ,所以需要了解下:

在这里插入图片描述

(49) 关于进程调度、切换 的 schedule ( ) 与 switch_to ( ) 函数:

在这里插入图片描述

(50) 接着给出 pause ( ) 函数被执行时的函数调用链,以了解和跟踪操作系统和 CPU 的执行状态:

在这里插入图片描述

从以上的代码框架里得出几个结论:
一:0 号进程被称为怠速进程,其不断调用 pause(),看看是否有新进程可以调度,没有则 switch_to() 不进行进程切换,继续运行 0 号进程,再次循环调用 pause() 函数。
二:0 号进程的状态 state 是特例,不起作用的,当没有另外的进程时,对 0 号进程的调用是随时都可以的。
三:函数 switch_to() 的对任务的切换,是使用不带返回的跳转指令 jmp ,而非 call ,我们有个疑问是,那本进程剩余的程序还会被执行么?答案是会的,因为进程切换时 , CPU 进行的保存进程上下文和加载新进程 TSS 的过程,非常类似于 call 与 ret 的功能。所以日后调用 switch_to () 的进程再次获得调度运行后,是可以接着 jmp 的下一条指令继续执行的:完成 switch_to 的剩余代码,从 int 80H 中断返回。
关于 X86 架构的汇编指令 jmp far 的机器指令就是 0xEA ,是有依据的,来自王爽老师的汇编第三版课本:

在这里插入图片描述

(51) IDT 表中的中断描述符的 type : 陷阱门 = 1111 ,允许嵌套 ; 普通中断 = 1110 ,不允许嵌套 ; linux 0.11 中的系统调用门 int 80H = 1111 ,所以也允许嵌套。即 int 80H 的系统调用函数可以嵌套调用。第一个 int 80H 还没有返回,又调用另一个 int 80H 。
附 TSS 描述符 10B1 , LDT 描述符 : 0010 。

(52)以进程 0 对 进程 1 的调度为例,来说明系统调用中断 int 80H 是可以嵌套的:

在这里插入图片描述

(53)以上的说明,以探讨完 0 号进程的代码和功能。接着探讨被 0 号进程调度执行的 1 号进程的代码和功能, 1 号进程开始给系统挂载硬盘和文件系统。首先介绍相关的 函数 sys_setup()的来龙去脉,探讨其是被如何调用的:

在这里插入图片描述

以及启用博思白板会员后的图片:

![3-1 函 sys_setup 的调用链](https://i-blog.csdnimg.cn/direct/fbadb95b7dec4d3b908b29352c451871.jpeg

(54)从已经探讨完所有的代码的进程 0 看, 进程 0 称为怠速进程,只需要很少的代码,就可以维持硬件 ,如 cpu 运转,不至于没有任务时候,系统停机。而进程 1 就比较复杂,开始打开了文件,关联到了硬盘,但这也是要操作数据的大多数进程的实际情况。

(55)再介绍一个关于硬盘分区的结构 partition :

在这里插入图片描述

(56a) 3-21a 函 sys_setup 的调用链上:

在这里插入图片描述

(56b)介绍读取硬盘信息并加载根文件系统的函数 sys_setup_() :

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6d94919bb3e44105ae90bbd72009b8b3.jpeg

(56c) 接着再完善其调用链。涉及到的 iget ,iput 下图给出 :

在这里插入图片描述

(56d)接着补充函数 iget 的调用链,顾名思义,从磁盘上获取一个节点:

在这里插入图片描述

(56e)接着介绍把内存节点同步到磁盘节点的 iput 的调用链:

在这里插入图片描述

(57)

谢谢

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值