《程序员的自我修养》解析第一章

最开始毕业的时候,看这本书完全不懂它的意思,主要原因还是因为读书的时候没有接触过对应项目,现在给大家一章一章的分析对应的内容。

如果不是程序员那么对程序的概念大概是windows上面的后缀exe文件,比如pps.exe,这些,在手机上面有对应的app文件。程序是运行在电脑上面,那么程序要适应电脑的架构这样才能运行起来,就好像人一样,人有了四肢,大脑这些,还要有灵魂才可以,软件就像灵魂,硬件就像四肢大脑。
在这里插入图片描述
图1-1电脑
可以看到图1-1右边方框里面现实主机里面的简单内容(风扇,主板,以及磁盘都没有画,因为与本文不相关),可以看到主要运行的设备有2个,一个是inel的cpu(也许你用的是amd的cpu),以及内存条,那么电脑是怎样工作的?打个比方,一台电脑比作快递公司,从键盘获取数据(发件人发送自己的东西),键盘发送数据之后,数据会存储在内存(仓库),就像快递员接收你的数据之后把东西存在仓库某个位置,一个内存就代表一个快递公司全国各地的仓库(jd湖南仓库,湖北仓库),仓库存放了之后要给快递高层领导(CPU)处理了之后再存起对应发送的仓库(内存),最后在发给接收人员。
现在知道仓库(内存)是存放物品(数据)的重要地方,那CPU要与内存进行数据沟通,先要知道从哪里取数据,然后取到数据之后做什么?那我们来看一下仓库怎样寻址。
一般快递人员去找某个仓库他的方法应该下图一样:
在这里插入图片描述
快递员小王要取某个物件,找到对应仓库,对应架位号就能取出对应物品,那么cpu要取对应的数据也是依据对应地址来取对应内存里面数据,CPU与内存相连是通过地址线相连接的,如果内存额地址线是4位(现在的cpu都是32位以及以上了),下图显示取对应数据过程
在这里插入图片描述
1、CPU 取地址1001(这里表示一个二进制数字,第1个数据线为1,第2,3,为0,第4为1),把这个地址发给内存条
2、内存条拿了找到1001这个地址数据发给CPU。
这样就完成了数据的存储,看起来是不是很简单,这个称为内存寻址简单模型,不过一般都会说艺术源于生活,高于生活。现在介绍比他复杂2个地方

2.1内存分页技术
2.2MMU技术
如果地址线是4位那么最多可以寻址24=16个地址,如果是32位地址线那么可以寻址232=4GB,地址比较大(注意这里说的是最大是4GB,内存不一定有4GB),于是在操作系统里面有了分页技术,分页就是把内存当作一页一页的,一页的大小自4k,至于为什么要进行分页,先说是为了方便内存管理,具体方面在哪个方便要等后续在解答

在这里插入图片描述

2.2MMU技术
最开始的时候是没有mmu的,那么一般程序就应该这样写
在这里插入图片描述
程序员a要写1加到50,那么就给程序规划1001,1002这两个内存(实际情况要复杂的多,原理其实一样),程序员b要写50加到100,那么就给程序规划1003,004,这样大家都不会干扰对方的数据,不过如果有50个程序员那么都要各自规划不同的空间如果空间错误了回导致系统出问题。
那么有没有办法程序a用1001,1002地址,程序b也用1001,1002地址能够正常运行,有,这个就是MMU所实现的功能

在这里插入图片描述

可以看到cpu与内存之间有了MMU,那么CPU在某一个时刻寻找地址1001里面MMU会映射到对应内存第1页里面一个地址(可能真实的地址是1101),举个例子皇帝(CPU)说去江苏给我拿个碗回来,然后太监(MMU)就去浙江买了个碗,皇帝一直以为他的碗是来自江苏,他完全不知道这个碗真实来自哪里。
CPU->MMU之间箭头代表地址就叫虚拟地址,MMU->内存就叫物理地址,太监去哪里买碗由太监决定(主要看你谁给的钱多),而MMU映射主要由系统进行配置决定,某个时刻MMU可能映射到页1,而再另外某个时刻又会映射到页2,这个是由操作系统帮你们完成,等讲操作系统再具体分析,先可以不用管,与本文关系不大。
讲了对应的硬件的样子,那么我们来看看对应软件是怎样的,在windows里面程序叫做exe,在linux可执行文件叫做elf,具体还有不可执行以及中间文件,这个再下一章进行讲解。
在windows电脑上面装一个virtualbox,就可以实现模拟linux环境了,很简单方便,

在这里插入图片描述

这是两个简单程序,如果不不知道C语言同学可以认为printf就是print_funciton也就是打印函数,那么这主要是打印hello world,程序的最开始运行是main函数,这个main名字四固定的就叫main,其他有函数后续名可以自行定义,这两个程序编译之后进行一系列翻译可以看到对应取地址(一系列翻译过程在下篇进行讲解):
在这里插入图片描述

每个程序最左边是内存地址,可以看到都是804840b,这个是一个16进制地址(16进制可以自行百度),可以看到不同程序的内存地址可以一样,这样是通过mmu进行翻译(具体翻译过程讲到操作系统的时候会进行解答)
如果有疑问,可以留言,多谢,这个是对应公众号二维码
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值