操作系统真相还原_第8章:内存管理系统

news2024/11/25 14:37:41

文章目录

  • 8.1 Makefile 简介
    • makefile基本语法
    • make参数
    • 伪目标
    • 自定义变量与系统变量
    • 隐含规则
    • 自动化变量与模式规则
  • 8.2 实现assert断言
    • 操作系统代码
    • 编译、链接并写入磁盘
    • 启动bochs执行
    • 物理内存使用情况
  • 8.3 实现字符串操作函数
    • 操作系统代码
    • 编译、链接并写入磁盘
    • 启动bochs执行
    • 物理内存使用情况
  • 8.4 位图实现
    • 操作系统代码
    • 可用物理内存
    • 物理内存使用情况
  • 8.5.1 内存池规划
    • 操作系统代码
    • 编译、链接并写入磁盘
    • 启动bochs执行
    • 物理内存使用情况
  • 8.5.1 物理页分配
    • 操作系统代码
    • 编译、链接并写入磁盘
    • 启动bochs执行
    • 物理内存使用情况

8.1 Makefile 简介

makefile基本语法

目标文件: 依赖文件
[Tab] 命令

目标文件:此规则中要生成的目标文件
依赖文件:此规则中要生成目标文件所要使用的文件
命令:此规则中要执行的动作(shell命令)
以上规则的意义是:要想生成目标文件,需要提前准备好依赖文件,若依赖文件列表中任一文件比目标文件新,则去执行规则中的命令

文件更新时间:
atime:读取文件数据的时间
ctime:文件数据或数据的改变时间
mtime:文件数据部分的修改时间(make语法中的命令执行参考该时间)
stat 文件名:查看上述三种时间数据

make参数

make 目标文件:执行指定目标文件处的语法
make:从上至下执行语句
当未指定使用的makefile文件时,会默认搜索名为makefile的文件

make:递归式推导目标
在makefile中的目标,是以递归方式逐层向上查找目标的,这一点能在多个目标相互依赖的情况下得到体现

伪目标

伪目标:当规则中不存在依赖文件时该目标文件就是伪目标,此时命令的执行不依赖于更新时间,而是直接执行
伪目标不能和真实目标文件同名,为了避免同名的情况,可使用".PHONY"来修饰为目标,格式为".PHONY:伪目标名"

常用手法:用于删除编译过程中产生的.o文件
.PHONY:clean
clean:
rm ./build/*.o

常用伪目标名称:

自定义变量与系统变量

自定义变量:
变量定义格式:变量名=值(字符串),多个值之间使用空格分开
变量引用格式:$(变量名)

系统变量:

隐含规则

在行尾添加反斜杠字符,则下一行的内容与反斜杠所在行同属一行
使用#表示注释,若行尾含有反斜杠,则下一行也被注释

自动化变量与模式规则

自动化变量:
make还支持一种自动化变量,此变量代表一组文件名
$@:表示规则中的目标文件集合
$<:表示依赖文件中的第1个文件
$^:表示所有的依赖文件
$?:表示所有比目标文件mtime更新的依赖文件

模式规则:
%用来匹配多个非空字符串,make会在当前路径进行模式匹配

8.2 实现assert断言

随着模块越来越多,程序出错的概率越来越大,为了方便调试在程序的关键部分设置"哨兵",让它来监督数据的正确性

操作系统代码


百度网盘链接:https://pan.baidu.com/s/1U8Gb0PZazvxFLJNIyHMizQ
提取码:dz4f

编译、链接并写入磁盘

启动bochs执行

./bochs/bin/bochs -f bochs/boot.disk

物理内存使用情况

系统信息(ards信息)位于0x500
mbr.s位于0x7C00~0x7E00,占用0.5KB
loader.s位于0x2000~0x2800,占用2KB
页目录表位于0x100000~0x101000,占用4KB
缓冲区位于0x70000~0x100000,占用192KB
内核位于0x3000

8.3 实现字符串操作函数

操作系统代码


百度网盘链接:https://pan.baidu.com/s/17IOgSbbumSr6acTMC50FYg
提取码:6rez

编译、链接并写入磁盘

启动bochs执行

./bochs/bin/bochs -f bochs/boot.disk

物理内存使用情况

系统信息(ards信息)位于0x500
mbr.s位于0x7C00~0x7E00,占用0.5KB
loader.s位于0x2000~0x2800,占用2KB
页目录表位于0x100000~0x101000,占用4KB
缓冲区位于0x70000~0x100000,占用192KB
内核位于0x3000

8.4 位图实现

操作系统代码

百度网盘链接:https://pan.baidu.com/s/1g1yCouZksePsKNpSaYSXTQ
提取码:koka

可用物理内存

物理内存使用情况

书中将位图放置于0x9F000,但在我的机器上此段内存不可用
于是我将位图放置于0x8F000
内存分布如下:
系统信息(ards信息)位于0x500
mbr.s位于0x7C00~0x7E00,占用0.5KB
loader.s位于0x2000~0x2800,占用2KB
内核位于0x3000
位图位于0x8F000
页目录表位于0x100000~0x101000,占用4KB
缓冲区位于0x70000~0x100000,占用192KB

8.5.1 内存池规划

操作系统代码



百度网盘链接:https://pan.baidu.com/s/1IO3KNknUOA8QL2q6S3tHGA
提取码:8z4d

编译、链接并写入磁盘

启动bochs执行

./bochs/bin/bochs -f bochs/boot.disk

物理内存使用情况

系统信息(ards信息)位于0x500
mbr.s位于0x7C00~0x7E00,占用0.5KB
loader.s位于0x2000~0x2800,占用2KB
内核位于0x3000
位图位于0x8F000
页目录表位于0x100000~0x101000,占用4KB
缓冲区位于0x70000~0x100000,占用192KB

8.5.1 物理页分配

操作系统代码



百度网盘链接:https://pan.baidu.com/s/1vWUCpGoVHA5Hpvz8CMDUfQ
提取码:o6l4

编译、链接并写入磁盘

启动bochs执行

./bochs/bin/bochs -f bochs/boot.disk

物理内存使用情况

系统信息(ards信息)位于0x500
mbr.s位于0x7C00~0x7E00,占用0.5KB
loader.s位于0x2000~0x2800,占用2KB
内核位于0x3000
位图位于0x8F000
页目录表位于0x100000~0x101000,占用4KB
缓冲区位于0x70000~0x100000,占用192KB

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

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

相关文章

C++基础(一)—— C++概述、C++对C的扩展(作用域、struct类型、引用、内联函数、函数默认参数、函数占位参数、函数重载)

1. C概述1.1 c简介“c”中的来自于c语言中的递增运算符&#xff0c;该运算符将变量加1。c起初也叫”c withclsss”.通过名称表明&#xff0c;c是对C的扩展&#xff0c;因此c是c语言的超集&#xff0c;这意味着任何有效的c程序都是有效的c程序。c程序可以使用已有的c程序库。为什…

Halcon数据结构

1.HTuple类型 1、既可以表示的类型有int&#xff0c;double、float、string&#xff0c;既可以表示单个值&#xff1b; 2、可以是容器&#xff1b; 3、可以是数组&#xff0c;数组遍历时需要有下标&#xff0c;如&#xff1a;变量名称[下标] 图像数据类型 Byte&#xff1a;8…

药房管理系统;药库管理系统

第一&#xff0c;主要功能&#xff1a;  本系统集日常销售、药品进销存、会员积分、GSP管理等药店所需的所有功能于一体&#xff0c;实现店铺管理的全部自动化。第二、新功能&#xff1a;  增加了“按功能查询药品”的功能&#xff0c;使软件用户可以根据客户的症状推荐合适…

【进阶】2、搭建K8s集群【v1.23】

[toc] 一、安装要求 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#xff1a; 一台或多台机器&#xff0c;操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘30GB或更多集群中所有机器之间网络…

编写SPI_Master驱动程序_老方法

编写SPI_Master驱动程序 文章目录编写SPI_Master驱动程序参考资料&#xff1a;一、 SPI驱动框架1.1 总体框架1.2 怎么编写SPI_Master驱动1.2.1 编写设备树1.2.2 编写驱动程序二、 编写程序2.1 数据传输流程2.2 写代码致谢参考资料&#xff1a; 内核头文件&#xff1a;include\…

数字IC手撕代码--联发科(总线访问仲裁)

题目描述当A、B两组的信号请求访问某个模块时&#xff0c;为了保证正确的访问&#xff0c;需要对这些信号进行仲裁。请用Verilog实现一个仲裁器&#xff0c;对两组请求信号进行仲后&#xff0c;要求&#xff1a;协议如图所示&#xff0c;请求方发送req&#xff08;request&…

数据推荐 | 人体行为识别数据集

人体行为识别任务旨在通过对人体姿态进行分析&#xff0c;识别出人体的具体动作&#xff0c;为人体行为预测、突发事件处理、智能健身、智能看护等领域提供技术支持。 图片 图片 人体行为识别数据标注方式 人体行为数据通用的标注方式包括人体关键点标注和动作标签标注&#…

Spring Boot 整合分布式缓存 Memcached

Memcached是一个开源、高性能&#xff0c;将数据分布于内存中并使用key-value存储结构的缓存系统。它通过在内存中缓存数据来减少向数据库的频繁访问连接的次数&#xff0c;可以提高动态、数据库驱动之类网站的运行速度。 Memcached在使用是比较简单的&#xff0c;在操作上基本…

经典面试题:“从输入URL到展示出页面“这个过程发生了什么?

目录 &#x1f433;今日良言:在逆境中善待自己 &#x1f407;一、输入网址(URL) &#x1f407;二、域名查询(DNS解析) &#x1f407;三、建立TCP连接 &#x1f407;四、发送HTTP/HTTPS请求 &#x1f407;五、服务器响应请求 &#x1f407;六、浏览器解析渲染页面 &…

Simple_SSTI_2

Simple_SSTI_2前言一、python类的内置属性二、解题步骤1.查看当前目录2. 打开flag文件得到flag前言 要想做到这个题&#xff0c;先要了解SSTI_2模板注入详解 一、python类的内置属性 先看如下一段代码&#xff1a; class Restaurant:"""类"""def…

存储的本质-学习笔记

1 经典案例 1.1 数据的流动 一条用户注册数据流动到后端服务器&#xff0c;持久化保存到数据库中。 1.2 数据的持久化 校验数据的合法性修改内存写入存储介质2 存储&数据库简介 2.1 存储系统特点 性能敏感、容易受硬件影响、存储系统代码既“简单”又“复杂”。 2.2 数…

从0到1实现单机记账APP原理与细节uniApp内含源码 (二)

单机记账APP演示及源码 具体演示如下面视频所示。免费下载地址&#xff1a;点击进入 预览APP下载地址&#xff1a;http://8.142.10.182:8888/down/aWHWeGaEQE2W.apk &#xff08;带宽很小所以下载速度慢&#xff09; 由于资源已经通过了&#xff0c;页面的样式这里就不写了&am…

蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、该题目如下二、使用步骤1.矩阵键盘实现2.温度传感器ds18b20的实现总结提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、该题目如下 分…

使用Containerd搭建K8s集群【v1.25】

[toc] 一、安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络互通可以访问外网,需要拉取镜像禁止swap分区二、准备环境 角色IP…

重磅新品 / 酷炫展品 / 强大生态,广和通玩转 MWC Barcelona 2023

2月27日&#xff0c;2023世界移动通信大会&#xff08;MWC Barcelona 2023&#xff09;在西班牙巴塞罗那正式开幕。全球知名移动运营商、设备制造商、技术提供商、物联网企业齐聚一堂&#xff0c;以领先的技术、创新的场景、前瞻的洞察向全行业输送最新鲜的行业观点。作为全球领…

python的opencv操作记录13——区域生长及分水岭算法

文章目录图像区域基本算法——形态学运算腐蚀与膨胀开运算与闭运算opencv中的形态学运算距离计算——distanceTransform函数连通域连通的定义计算连通域——connectedComponents连通域实验基于区域的分割区域生长算法自定义一个最简单区域生长算法实现区域分割一般区域分割open…

解决vscode无法自动更新

一&#xff0e;前言 要在&#xff56;&#xff53;&#xff43;&#xff4f;&#xff44;&#xff45;里面安装插件&#xff0c;被提示版本不匹配&#xff0c;然后得更新&#xff0c;然后我发现我的&#xff07;帮助&#xff07;菜单栏下没有检查更新&#xff0c;然后我去&…

19- CNN进行Fashion-MNIST分类 (tensorflow系列) (项目十九)

项目要点 Fashion-MNIST总共有十个类别的图像。代码运行位置 CPU: cputf.config.set_visible_devices(tf.config.list_physical_devices("CPU"))fashion_mnist keras.datasets.fashion_mnist # fashion_mnist 数据导入训练数据和测试数据拆分: x_valid, x_train…

WebAPI

WebAPI知识详解day11.Web API 基本认知作用和分类什么是DOM&#xff1f;DOM树的概念DOM对象2.获取DOM对象通过css选择器获取dom对象通过其他方法获取dom3.设置/修改DOM元素内容方法1. document.write() 方法方法2. 对象.innerText 属性方法3. 对象.innerHTML4.设置/修改DOM元素…

【TypeScript】的上手学习指南!

目录TS简介TypeScript是什么&#xff1f;为什么要推荐使用TypeScript生态支持安装TypeScriptTS简介 TypeScript是什么&#xff1f; TypeScript官网 简介&#xff1a;TypeScript是JavaScript类型的超集&#xff0c;它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计…