笔记 5 :linux 0.11 注释,函数 copy_mem() , copy_process () , 中断函数 int 80H 的代码框架

(38)接着介绍一个创建进程时的重要的函数 copy_mem() 函数:

在这里插入图片描述

(39) 分析另一个关于 fork() 的重要的函数 copy_process(),与李忠老师的操作系统不同,在理解上有难度:

在这里插入图片描述

上图中还有共享文件的代码:

在这里插入图片描述

(40)至此,已分析完 fork()执行时调用链上的所有函数,以下给出 fork()函数的执行调用链,以理清该函数执行的逻辑过程:

在这里插入图片描述

(41) 至此,其实还有一个疑问: 若所有进程共享一个页目录表,那么 1 号进程是如何完成线性地址到物理地址的映射的,毕竟又不是可重定位代码:

在这里插入图片描述

同样来自闪客老师的课本插图:

在这里插入图片描述

以及:

在这里插入图片描述

结论: 英特尔 CPU 认为代码中的地址都是偏移量,需要加上基址才是完整的线性地址,再去查页目录表。而一开始我错误的以为代码中的地址就是线性地址,只要在段基址限定范围内即可。但进程 0 假如先后连续产生两个进程,未经修改的内核代码同时在三个进程中运行,怎么也不可能符合三个段基址的要求啊,原来如此。谢谢闪客老师!!!!!!

(42)由以上,又有一个结论。探讨下 64 这个数字在 linux 0.11 中的使用,为什么 linux 大师用了这个数字:
第一处: 全局变量 task [ ] 数组的长度是 64 ,允许系统中最多 64 个进程同时运行;
第二处:每个进程的所在的线性起始地址是 64Mb 的倍数;
第三处:每个进程的长度最多是 64 Mb ,这和第二条也是有关联的,进程各自占据的内存不能越界。
可以猜测下 linux 大师的思路:他那个年代,内存非常宝贵稀缺,故采用了所有进程共享一个页目录表,进程各自拥有独立的页表的结构。因为每个页目录表就要占据 4Kb 的内存。进程的线性地址采用了段页式管理结构。64Mb * 64 = 4096Mb = 4Gb ,刚好瓜分完 32 位CPU 架构的可以支持的最大内存空间。只有进程的线性空间不发生彼此干涉越界,才能保证物理内存的分布也不会互相干涉越界。
现在咱们学习保护模式,都是跟着李忠老师学习的。后来的年代,内存普及了。所以对内存的使用也可以放宽了。可以为每个进程安排一个页目录表,并登记在 CR3 寄存器里,这样的做法相当于每个进程都独自拥有 4Gb 的内存空间。当然进程的大小可以超过了 64Mb ,但也不能真的太大。因为同时会有多个进程在运行,都需要内存。
估计后来的 linux 版本已经改过来了,随着内存的增大和程序的增大。但先学习过李忠老师的操作系统的内存结构,不了解早期 linux 大师的思路,先入为主,会给理解 linux 0.11 的代码带来一段时间的困扰。故单独记录下。

(43) 结合看汇编代码,有必要再研究下栈指针 esp 的工作原理:压栈时是先移动栈指针,再赋值:

在这里插入图片描述

(44) 介绍 syscall 时候源码中出现的汇编指令 bsf 与 bsr :

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

(45)再复习另一个汇编指令 btr :

在这里插入图片描述

(46) 在 int 80 H 里,我们可以做很多事,但不清楚 int 80H 的所有的中断代码,也是不合适的,尤其是这里存在对信号量的处理:

在这里插入图片描述

(47)

谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378178.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qcom平台通过Hexagon IDE 测试程序性能指导

Qcom平台通过Hexagon IDE 测试程序性能指导 1 安装Hexagon IDE工具2 测试工程2.1 打开Hexagon IDE2.2 新建工程2.3 添加测试案例2.3.1 方法一:新建2.3.2 方法二:拷贝 2.4 配置测试环境2.4.1 包含头文件2.4.2 添加程序优化功能(需先bulid一下)2.4.3 添加g…

【问题记录】Docker配置mongodb副本集实现数据流实时获取

配置mongodb副本集实现数据流实时获取 前言操作步骤1. docker拉取mongodb镜像2. 连接mongo1镜像的mongosh3. 在mongosh中初始化副本集 注意点 前言 由于想用nodejs实现实时获取Mongodb数据流,但是报错显示需要有副本集的mongodb才能实现实时获取信息流,…

HTTPS请求头缺少HttpOnly和Secure属性解决方案

问题描述: 建立Filter拦截器类 package com.ruoyi.framework.security.filter;import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.…

某客户管理系统Oracle RAC节点异常重启问题详细分析记录

一、故障概述 某日10:58分左右客户管理系统数据库节点1所有实例异常重启,重启后业务恢复正常。经过分析发现,此次实例异常重启的是数据库节点1。 二、故障原因分析 1、数据库日志分析 从节点1的数据库日志来看,10:58:49的时候数据库进程开始…

1.MQ介绍

MQ 消息队列,本质是一个队列,先进先出,只不过队列中存放的内容是message而已。 为啥学习MQ 1.流量消峰 如果一个订单系统最多每秒能处理一万次订单,正常情况下我们下单1秒后就能返回结果。但是在高峰期,如果有两万…

Linux驱动开发笔记(十九)文件系统的构建

文章目录 前言一、文件系统1.1 Linux系统的组成1.2 什么是文件系统 二、根文件系统的制作工具三、busybox3.1 什么是busybox3.2 制作流程 四、buildroot4.1 什么是Buildroot4.2 制作流程 前言 上节我们在mdev实验进行配置时,利用了busybox,这里着重对这部…

活动预告|想更了解流式数据湖?亚马逊云科技数据开源软件-流式数据湖 Tech Talk来啦!

活动介绍 本次活动旨在探索在亚马逊云科技上构建和使用开源数据软件产品的一些最佳实践,特别关注流式数据湖的构建。活动将在线上举行,汇聚来自 AutoMQ Apache paimon和亚马逊云科技的顶尖专家,分享他们在这一领域的最新进展和实际经验。参与…

旗晟巡检机器人的应用场景有哪些?

巡检机器人作为现代科技的杰出成果,已广泛应用于各个关键场景。从危险的工业现场到至关重要的基础设施,它们的身影无处不在。它们以精准、高效、不知疲倦的特性,担当起保障生产、守护安全的重任,为行业发展注入新的活力。那么&…

2024华为数通HCIP-datacom最新题库(变题更新⑥)

请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了,如果你准备去考试,还是用的之前的题库,切记暂缓。 1、…

【Elasticsearch7】3-基本操作

目录 RESTful 数据格式 HTTP操作 索引操作 倒排索引 创建索引 查看所有索引 查看单个索引 删除索引 文档操作 创建文档 查看文档 ​编辑 全量修改 ​编辑局部修改 删除文档 条件删除文档 高级查询 条件查询 URL带参查询 请求体带参查询 带请求体方式的查…

使用GPT3.5,LangChain,FAISS和python构建一个本地知识库

引言 介绍本地知识库的概念和用途 在现代信息时代,我们面临着海量的数据和信息,如何有效地管理和利用这些信息成为一项重要的任务。本地知识库是一种基于本地存储的知识管理系统,旨在帮助用户收集、组织和检索大量的知识和信息。它允许用户…

java8新特性

目录 一. lambda 1. 为什么要有lambda 2.功能接口 3. 使用lambda的条件 二. Stream流 1. 获取流 1.1 将集合转为流 1.2 将数组转为流 1.3 将相同数据类型的数据转为流 1.4 将文件里的内容转为流 2. 中间操作 3. 终端操作 一. lambda lambda:本质上就是将函数当做参…

Python | Leetcode Python题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:m, n len(matrix), len(matrix[0])x, y 0, n - 1while x < m and y > 0:if matrix[x][y] target:return Trueif matrix[x][y] > tar…

印尼语翻译通:AI驱动的智能翻译与语言学习助手

在这个多元文化交织的世界中&#xff0c;语言是连接我们的桥梁。印尼语翻译通&#xff0c;一款专为打破语言障碍而生的智能翻译软件&#xff0c;让您与印尼语的世界轻松接轨。无论是商务出差、学术研究&#xff0c;还是探索印尼丰富的文化遗产&#xff0c;印尼语翻译通都是您的…

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格&#xff0c;并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …

抖音seo短视频矩阵源码系统开发搭建----开源+二次开发

抖音seo短视频矩阵源码系统开发搭建 是一项技术密集型工作&#xff0c;需要对大数据处理、人工智能等领域有深入了解。该系统开发过程中需要用到多种编程语言&#xff0c;如Java、Python等。同时&#xff0c;需要使用一些框架和技术&#xff0c;如Hadoop、Spark、PyTorch等&am…

小程序-设置环境变量

在实际开发中&#xff0c;不同的开发环境&#xff0c;调用的接口地址是不一样的 例如&#xff1a;开发环境需要调用开发版的接口地址&#xff0c;生产环境需要正式版的接口地址 这时候&#xff0c;我们就可以使用小程序提供了 wx.getAccountInfoSync() 接口&#xff0c;用来获取…

iterator(迭代器模式)

引入 在想显示数组当中所有元素时&#xff0c;我们往往会使用下面的for循环语句来遍历数组 #include <iostream> #include <vector>int main() {std::vector<int> v({ 1, 2, 3 });for (int i 0; i < v.size(); i){std::cout << v[i] << &q…

甄选范文“论软件维护方法及其应用”软考高级论文,系统架构设计师论文

论文真题 软件维护是指在软件交付使用后,直至软件被淘汰的整个时间范围内,为了改正错误或满足 新的需求而修改软件的活动。在软件系统运行过程中,软件需要维护的原因是多种多样的, 根据维护的原因不同,可以将软件维护分为改正性维护、适应性维护、完善性维护和预防性 维护…

持续集成02--Linux环境更新/安装Java新版本

前言 在持续集成/持续部署&#xff08;CI/CD&#xff09;的旅程中&#xff0c;确保开发环境的一致性至关重要。本篇“持续集成02--Linux环境更新/安装Java新版本”将聚焦于如何在Linux环境下高效地更新或安装Java新版本。Java作为广泛应用的编程语言&#xff0c;其版本的更新对…