笔记 4 :linux 0.11 注释 get_free_page , get_limit , get_base , _set_base , invalidate , copy_page_tables

(27)本条目开始, 开始分析 copy_process () 函数,其又会调用别的函数,故先分析别的函数。 get_free_page () ;

先 介绍汇编指令 scasb :

以及 指令 sstosd :

在这里插入图片描述

以及 get_free_page 的源码注释:

在这里插入图片描述

(28) 接着介绍全局变量,指向当前进程的 task_struct 的指针 current :

在这里插入图片描述

(29) 接着介绍另一个全局变量 jiffies , 记录开机到现在的滴答数,每 10 ms :

在这里插入图片描述

(30) 接着介绍另一个函数 sched . h / get_limit ( 段选择子 ) , 返回选择子指定的段的段长度:

在这里插入图片描述

(31)再给出另一个函数 get_base ( 段描述符) 的源代码,计算段描述符中的基地址:

在这里插入图片描述

(32) 接着介绍生成 新进程的 TCB 中的 LDT 表中的描述符的函数 _set_base ( 描述符地址 , 段的基地址 ) :

在这里插入图片描述

(33)接着介绍页目录表和页表的属性位,这关系到为新进程创建页目录结构:

在这里插入图片描述
+
在这里插入图片描述

(34) 在创建新进程,进行页复制的时候,我们疑惑原进程是如何可以访问更大的线性地址空间的,源于 _system_call 的设置:

在这里插入图片描述

(34) 更新 CR3 页目录表缓存的宏定义,在修改了页目录表以后:

在这里插入图片描述

(35)接着介绍又一个大的函数, copy_page_tables (),顾名思义,为新进程的创建复制页表,这不同于李忠老师的操作系统:

在这里插入图片描述

可见,进程 1 共享进程 0 的数据段和代码段。但进程 0 对自己的内存页有读写的权利,但进程 1 对这 160 页只有读的权利。这让咱们很疑惑,这有什么意义和影响呢?艺术书说了:这只是暂时的,待给进程 1 分配了新的程序,就会解除这种共享关系,并重新组织自己的内存结构。

(36)接着介绍关于文件与节点的结构体 file 、 d_inode 、 m_inode , 因为进程控制块 TCB 里也会用到:

在这里插入图片描述

(37)我们复习下全局页目录表和 4 个页表的初始化,填写了什么数据,这将影响到 fork 函数中对内存页的申请与新进程页目录表和页表的完善:

在这里插入图片描述

(38)
谢谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值