笔记 4 :linux 0.11 中继续分析 0 号进程创建一号进程的 fork () 函数

(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 (),顾名思义,为新进程的创建复制页表,这不同于李忠老师的操作系统:

在这里插入图片描述

(36)
谢谢

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 20:36:01       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 20:36:01       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 20:36:01       62 阅读
  4. Python语言-面向对象

    2024-07-15 20:36:01       72 阅读

热门阅读

  1. Spring boot 2.0 升级到 3.3.1 的相关问题 (一)

    2024-07-15 20:36:01       18 阅读
  2. C++惯用法:do...while(0)的妙用

    2024-07-15 20:36:01       23 阅读
  3. python:罗马数字转整数

    2024-07-15 20:36:01       19 阅读
  4. 如何设置单核测试

    2024-07-15 20:36:01       18 阅读
  5. 模板方法原理与C++实现

    2024-07-15 20:36:01       23 阅读
  6. kmeans.fit_predict 和 kmeans.fit有什么区别

    2024-07-15 20:36:01       22 阅读
  7. C++ --> 类和对象(三)

    2024-07-15 20:36:01       24 阅读
  8. 用Python爬虫能实现什么?得到什么?

    2024-07-15 20:36:01       21 阅读
  9. JVM堆内存的结构,YGC,FGC的原理

    2024-07-15 20:36:01       21 阅读
  10. Spring boot 2.0 升级到 3.3.1 的相关问题 (二)

    2024-07-15 20:36:01       22 阅读