首页 > 学院 > 开发设计 > 正文

cpu的好伙伴

2019-11-06 09:29:33
字体:
来源:转载
供稿:网友

hello,大家好,我是一个cpu,今天我来跟大家介绍一下我的日常工作和我的工作拍档们。

我和我的好朋友们被一起组装在我们的家(主板)里,我们通过家的内部通信设施相互协作交流。非常愉快,当主人启动电脑时,我们的家里就来电了,于是我们一一醒来,进入工作状态,大家都说我是计算机的大脑,其实不谦虚的说,这话真没错,但也离不开其他小伙伴的共同努力,我首先会从硬盘加载系统到内存中来运行,于是整个操作系统就启动了。

系统启动后主人点击了QQ,我赶紧去磁盘老兄那 把QQ这个程序的代码拿过来,放在内存 这儿【这里八卦一下,内存和磁盘的关系真的是非同一般,磁盘那专门给内存开了一片地儿叫 《虚拟内存》,内存这儿空间紧张的时候就临时在那儿存一下,在通过交换到内存中来使用。在内存这边也有专门的《磁盘缓存》把使用频发的指令放在这里,下次就不用去内存那取了 】。编译后的代码都是机器指令,我只认识机器指令,也就是0 和1 组成的二进制,包括我和我的伙伴们的沟通也是通过 0和1来沟通的。言归正传,我接下来就要开始执行内存中的指令了,其实你别觉得指令这个东西有多深奥,也就是 简单的 【操作命令 + 数据】,我一条条执行这些指令,大部分的工作是 把数据在内存 和我自己的寄存器里搬来搬去,遇到需要运算我就做一下运算操作,遇到流程性的向if,while这种语句我就会做跳转,在跳转和一条条执行指令的过程中我都依赖我的一种寄存器叫:程序计数器,它来存下一条指令的地址,我还有许多其他类型的寄存器,像标志寄存器,存的是判断的结果,累加寄存器等等,在我这儿算稍微复杂一些的是call/return 指令,调用函数的时候用的,call会跳转到要执行的函数里,并把调用函数的下一条指令地址存在栈中,等调用完了,return指令就会取出这个地址继续往下面执行,函数调用用了寄存器中esp ebp,ebp指向当前函数栈桢地址,esp 指向栈顶地址。ok,等依次执行完代码就完成了某个程序的运行。我就是这样和内存,磁盘进合作工作通过读取代码来启动一个程序的。

我的好伙伴还没给大家详细介绍呢,先说说内存,内存用来存储数据的,内存的逻辑模型是楼房,由一个一个字节堆成的,定义指针时给的类型是为了告诉指针,要取的内存地址多大位一个单元,刚刚的楼房是一层一个单元,数据类型不同了,可能是多层一个单元。内存中有栈桢和堆,栈桢中存储的数据编译的时候的能分配空间像int,堆中存的运行中才能生成向new。磁盘中读取数据比较慢,但容量比较大,磁盘的物理结构是由扇区构成的,根据扇区的最小单位的整数倍(簇)来进行的,1簇可以使1个扇区512B 或者是1KB等等,所以,建一个文件最少占用512B,而不是根据你写入的内容决定的。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表