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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值