软件中的数学计算引起的一些简单思考
来源:互联网 发布:omtp转ctia软件 编辑:程序博客网 时间:2024/05/18 02:33
1、2的10次方=1kb;
2、2的12次方=4kb;
3、2的20次方=1Mb;
4、1kb*1kb=1Mb;
5、1Mb*1kb=1G;
6、线性地址(4G,物理地址)=目录项(directory,10bit,1kb)+表(table,10bit,1kb)+页帧(offset=page frame,12bit,4kb,帧表示最小单位)
=page table(20bit,directory+ table)+页(4kb)
a.此项中的加可以理解位bit的加,kb的乘;
b.可以看到物理地址是以bit为单位,即寻找的是最小单位是位,而page table(页表)是以4kb为最小单位,寻找的是page frame;这样操作的目的是便于操作系统管理及提高管理效率;
c.为便于上述关系的理解,我们可做如下类比:
32位寻址空间(4Gb)相当于一个仓库里有4G个物料(此时的物料相当于计算机里面的bit),如果我们以最小物料为单位,同时这些物料全部杂乱无章地摆放在这个仓库,那么我们寻找一个物料,我们就需要从第一个物料一直向第4G个物料寻找,效率非常低。那么我们该如何解决这个问题呢?首先,我们不以物料为最小单位,我们以房间(页)为最小基本单位(至于为什么要分页,也困惑了我很长时间,其实很简单的一个道理,一般来说,软件在大数据量中查找一个数据,也是一个一个找的,就好比我们要在人海中找一个人,也必须一个一个挨着找,但是倘若我们把这些人海分成一个一个块,每个块都具有相同的某种属性(就好比如果把人分成男、女,寻找时间就少了一半),我们先知道他们在哪个块,那么我们只需要在这些块中(人数相对而言就非常少)寻找,效率提高了几百倍都不止,但是每个页包含多少字最好,是1K,2K还是4K,我目前也不知道,只是知道,这些块中的字无论太多还是太少,都不利于CPU对地址的命中率,即降低了计算机的效率)。
假设一个房间中可以装4K个物料(4K个物料都具有某一种相同的属性,譬如胡萝卜、白菜等等),那么我们每次只需要在4K个字中寻找我所需 要的数据,而不是在4G个字中寻找我所需要的数据了,对比之下可想而知了。
有了页这个基本量,我们就只需要管理这些房间了,但是如果要装4G个物料,每个房间可以装4K个,我们最少需要1M个(100万)房间,100万依旧是一个庞大的数字,目前有如下几种管理方式:
A.胡萝卜房间号位0---1万,白菜为1万01到2万,包菜为3万01到4万等等,这样数据来了,我们就知道把对应的数据往对应的仓库去放置;
B.不连续分配地址空间,譬如胡萝卜4K打包放置在第1个房间,剩余的就没有胡萝卜了,那么我们把白菜打包成4K一个房间放置在2-150,包菜放置在151-300,如果后面再来白菜,我们就放置在301-400等等;
这样对仓库管理者而言,我们只需要管理这个记录本,就可以很高效地管理整个系统了。此时记录各个房间对应的房间号的本子,我们就叫做页表,页表只是物理地址向上抽象的一层,便于管理者对物理地址的管理。
同时,通过这个类比,也可以清晰地看到,管理方法(即算法)差异的重要性,即:白菜、胡萝卜、包菜等等各需要多少个房间,是连续分配还是断续分配,每一种菜如果不是整数怎么办?还有菜被取走了如何办?需要后续学习补充;
于此同时,还遇见一个问题:倘若我们有100万个房间号,但是实际上,没有给我100万个房间,那该如何处理呢?此时,虚拟内存便粉墨出场了。此时就将没有用到的空间暂存在备用仓(硬盘上),再把需要的page调用到内存中,对于系统而言,他们就相当于独享4G内存空间。
d.一个仓库(内存)的最小管理单位是房间(页),页表就是记录的房间号表;
- 软件中的数学计算引起的一些简单思考
- 关于国产科学(计算)软件的一些思考
- 关于“云计算”引起的一点思考
- 数学建模的一些思考
- WPF 引起的软件架构思考
- 由两道题所引起的一些思考
- 软件行业的一些思考
- 软件测试的一些思考
- 一些简单问题的思考:
- 从秒杀架构引起的一些思考
- java单例模式引起的一些思考和了解
- 吃饭引起的思考
- Disruptor引起的思考
- ClassNotFoundException引起的思考
- 关于并行计算发展的一些思考
- 移动云计算的一些思考
- 软件开发流程的一些思考
- 关于软件开发团队的一些思考
- 如何编译wxWidgets示例程序(samples目录下的程序)
- 009 Android programming 3rd Activity生命周期以及debug处理
- hdu2686
- CentOS7 彻底清除MySQL
- poj1068括号加密
- 软件中的数学计算引起的一些简单思考
- python浅拷贝和深拷贝 copy()和deepcopy()
- kotlin 基本语法(一)
- request获取路径
- 线程状态
- WebLogic下部署war包
- 排序3——插入排序及优化
- 实现一个随手指移动而滑动的效果---爬坑
- 金典——叠罗汉2