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

news2024/9/24 21:20:51

(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.coloradmin.cn/o/1931998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

暑期-大数据人工智能学习-在线实习项目

这个暑期 默默努力一把 悄悄惊艳所有人 在线企业项目试岗实训 助你突破固有思维模式,伴你进阶成长

MySQL索引特性(下)

目录 索引的理解 理解单个Page 理解多个Page 页目录 单页情况 多页情况 复盘一下 聚簇索引VS非聚簇索引 区别 索引操作 主键索引 唯一索引的创建 普通索引的创建 查询索引 删除索引 索引创建原则 索引的理解 理解单个Page MySQL 中要管理很多数据表文件,而…

阿里云ECS跨区域迁移,利用老操作系统作为新服务操作系统

由于特殊原因或者数据备份需要迁移ecs服务器 1.老服务快照 选择ecs实例,点开实例 进入云盘 https://ecs.console.aliyun.com/disk 在云盘上点击建立快照 2.准备oss同源 购买oss 存储,用于临时备份 https://oss.console.aliyun.com/bucket/ 记得必…

Spring如何进行动态注册Bean

在Spring框架中,Bean是应用程序的核心组成部分,而BeanDefinition则是这些Bean的元数据表示。随着应用程序的复杂性增加,我们可能需要更灵活地定义和注册Bean。Spring框架提供了几个扩展点,允许我们以编程方式影响Bean的创建和定义…

Window中 Redis下载安装

Redis7.2.3连接: 我用夸克网盘分享了「redis-windows-7.2.3.zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://pan.quark.cn/s/4dfb0497707a 在安…

Uniapp基础篇(持续更新)

1. Uni-app常用内置组件 view 视图容器 scroll-view 可滚动视图区域,用于区域滚动。需注意在webview渲染的页面中,区域滚动的性能不及页面滚动。 swiper 滑块视图容器。一般用于左右滑动或上下滑动,比如banner轮播图。 image uniapp官方iam…

封装网络请求 鸿蒙APP HarmonyOS ArkTS

一、效果展示 通过在页面直接调用 userLogin(params) 方法,获取登录令牌 二、申请网络权限 访问网络时候首先需要申请网络权限,需要修改 src/main 目录下的 module.json5 文件,加入 requestPermissions 属性,详见官方文档 【声明权…

Flink底层原理解析:案例解析(第37天)

系列文章目录 一、flink架构 二、Flink底层原理解析 三、Flink应用场景解析 四、fink入门案例解析 文章目录 系列文章目录前言一、flink架构1. 作业管理器(JobManager)2. 资源管理器(ResourceManager)3. 任务管理器(Ta…

Hadoop安装报错

报错:ERROR 2023-03-09 21:33:00,178 NetUtil.py:97 - SSLError: Failed to connect. Please check openssl library versions. 解决方案: 在安装失败得客户端执行 编辑 /etc/python/cert-verification.cfg 配置文件,将 [https] 节的 verify 项 设为禁用…

【教学类-67-02】20240716毛毛虫ABB排序

背景需求: 【教学类-67-01】20240715毛毛虫AB排序-CSDN博客文章浏览阅读584次,点赞16次,收藏6次。【教学类-67-01】20240715毛毛虫AB排序https://blog.csdn.net/reasonsummer/article/details/140443310 在AB排序基础上,继续制作…

【JavaEE精炼宝库】 初识网络原理——网络通信基础 | 协议

文章目录 一、网络发展史1.1 独立模式:1.2 网络互连:1.3 局域网(LAN):1.4 广域网(WAN): 二、网络通信基础2.1 IP地址:2.2 端口号: 三、协议3.1 协议的概念&am…

RabbitMQ:基础篇

1.RabbitMQ是高性能的异步通讯组件 何为异步通讯 打电话就是同步通讯,微信聊天可以理解为异步通讯,不是实时的进行通讯:时效性差。 同步调用的缺点: 拓展性差(需求不尽提) 性能下降 级联失败 …

实时高清无延迟:EasyDSS/EasyCVR无人机直播技术重塑赛事新体验

近日有网友发视频称,在内蒙古呼伦贝尔一景区的马术表演现场,一架无人机擅自在场地上空飞行拍摄。现场工作人员多次制止飞行无果,一名表演者骑马用弓箭将无人机射落。 在数字科技日新月异的今天,无人机直播推流技术以其独特的视角…

在GPU上运行PyTorch

文章目录 1、查看GPU的CUDA版本2、下载CUDA版本3、安装cuDNN4、配置CUDA环境变量5、安装配置Anaconda6、使用Anaconda7、pycharm导入虚拟环境8、安装带GPU的PyTorch⭐9、总结 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主&#x…

字节跳动十年经验老鸟,耗时大半年整理的软件测试面试真题【附答案】

软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位,问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux操作系统的使用、软件…

回溯算法的去重问题

概述 在利用回溯算法去求子集、排列、组合等问题时,所给数组中如果包含重复元素,需要进行去重操作。常用的去重方法是使用used数组或集合。 对于上述子集、排列、组合等问题的求解方法是将数组转化为树的形式,利用递归和回溯的方法进行求解…

10.1 JSP语言入门

JSP语言入门 目录一、 基础概念1. 什么是JSP?2. 工作原理3. 基本语法 二、 表达式语言(EL)1. 简介2. 语法 三、 JSTL(JSP Standard Tag Library)1. 简介2. 核心标签库3. 常用标签 四、 高级话题1. 会话管理2. 自定义标…

卷积神经网络(一)-LeNet-5

前言 LeNet开启了卷积神经网络的第一枪,这一网络模型由Yann LeCun等人在1998年提出,被视为卷积神经网络的开山之作。 论文地址: http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf 如果打不开就看csdn: https://download.…

LangChain-v0.2 Build an Agent 构建代理

语言模型本身不能采取行动,它们只是输出文本。LangChain的一个重要用例是创建代理。代理是使用LLM作为推理引擎来确定要采取哪些行动,以及传递哪些输入的系统。执行操作后,可以将结果反馈到LLM中,以确定是否需要更多操作&#xff…

陪玩系统小程序模式APP小程序H5系统搭建开发

随着移动互联网的营及和游戏行业的蓬轨发展,陪玩服务应远而生并迅速唱起,陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁,其模式系统的搭建与开发是得尤为重要,本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程,包…