计算机系统基础:程序的表达、转换与链接笔记
南京大学袁春风老师的《计算机系统基础》国家精品课程做的笔记~
主要关注的是一个程序如何执行的部分
动态链接库本质也是一个程序,能够被程序加载的程序。
系统中动态链接库都只存一份,即DLL被更改,则系统全局中用到的都被更改了。能被其他进程加载的程序,自己没有内存空间,依附在别的程序中(即这个DLL做的事情就是当前进程做的事情)。
用“系统思维”分析问题
在现实世界成立的,在计算机计算世界中不一定成立。
计算机要执行程序需要哪些结构
最早的通用电子计算机的诞生/冯·诺伊曼结构的基本思想/现代计算机结构模型/存储程序工作方式/指令和数据的概念
形式上指令和数据没有区别,都是01序列,但是计算机应能区分数据还是指令。每条指令由操作码和地址码两部分组成,操作码指出操作类型,地址码指出操作数的地址。由一串指令组成程序,当程序被启动后,计算机会自动取出一条条的指令执行。
CPU:中央处理器
PC:程序计数器
MAR:存储器地址寄存器
ALU:算术逻辑部件
IR:指令寄存器
MDR:存储器数据寄存器
GRPs:通用寄存器组(由若干通用寄存器组成,早期就是累加器)
老师给出了一个很清晰的例子解释计算机是如何工作的:(存储程序的方式)
程序是如何生成与执行的?
最早的程序开发过程/汇编语言开发过程/用高级语言开发程序/Hello程序的启动和执行过程/不同层次语言之间的等价关系
用机器语言编写程序,记录在纸带或卡片上。(是否穿孔,相当于二进制,所有信息都是0/1序列)
汇编语言:
用助记符表示操作码
用标号表示位置
用助记符表示寄存器
简单理解就是:机器语言是最终要执行的二进制代码,汇编语言就是为了给机器语言增加一点可读性(内容是与机器语言一一对应的),但是汇编语言理解起来还是很费事啦,为了方便程序员们编写,所以就有了高级语言。需要运行的时候高级语言通过编译器的解释、编译然后最终还是要转化成机器语言执行。