了解程序编译、运行过程

了解程序编译、运行过程

计算机系统是由硬件和软件系统组成的,它们共同工作来运行应用程序。

程序编译

系统中所有的信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的。区分不同数据对象的唯一方法是读到这些数据对象时的上下文。如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。

一个程序的生命周期是从一个高级C语言程序(能够被人读懂)开始,这种程序必须能够被其他程序转化为一系列的低级机器语言指令,然后这样的指令可以按照可执行目标程序的格式打包,并以二进制磁盘文件的形式存放目标程序被称为可执行目标文件

一个.c文件到翻译成可执行目标文件的过程需编译系统完成。编译系统主要由以下四个截断的程序组成:预处理器、编译器、汇编器和链接器

预处理阶段预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。此时得到的程序以.c作为文件扩展名。
编译阶段编译器(ccl)将文本文件.i翻译成文本文件.s,它包含一个汇编语言程序。汇编语言是低级机器语言指令,它为不同高级语言的不同编译器提供了通信的输出语言。
汇编阶段汇编器(as)将.s翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式,并将结果保存在目标文件.o中。.o是一个二进制文件,它的字节编码是机器语言指令而不是字符。
链接阶段链接器(ld)负责将多个.o文件进行合并,从而得到一个可执行文件,从而可以被加载到内存中,由系统执行

了解程序的编译过程主要的优点如下对:优化程序的性能,理解链接时出现的错误,避免安全漏洞等直观重要。

系统硬件组成

总线:主要携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,即字。字中的字节数(字长)是一个基本的系统参数,在各个系统中的情况都不尽相同。多数机器字长为4字节,也有字长为8字节的系统。

I/O设备:输入/输出设备是系统与外部世界的联系通道。系统包括4个I/O设备:键盘、鼠标、显示器、磁盘。I/O设备都通过一个控制器或适配器与I/O总线相连。控制器与适配器区别是他们的封装方式不同,控制器是置于I/O设备本身的或者系统的主印制电路板上(主板)上的芯片组,而适配器则是一块插在主板插槽上的卡

主存主存是临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑角度看,主存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址是从零开始的。

处理器:中央处理单元(CPU),是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个字节的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。处理器按照指令执行模型来操作的,而此模型是由指令集结构决定的。在此模型中,指令按照严格的顺序执行,而执行一条指令包含一系列的步骤。处理器是从程序计数器(PC)指向的存储区读取指令,解释指令中的位,执行该指令指示的简单操作,然后更新PC,使其指向下一条指令,而这条指令并不一定与存储器中刚刚执行的指令相邻。而操作主要围绕主存、寄存器文件和算法/逻辑单元(ALU)进行的。CPU在指令的要求下可能会执行以下操作:

加载:把一个字节或者一个字从主存复制到寄存器,以覆盖寄存器原来的内容。
存储:把一个字节或者一个字从寄存器复制到主存的某个位置,以覆盖这个位置上原来的内容。
操作:把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,以覆盖这个位置上原来的内容。
跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的值。

处理器使用了非常复杂的机制来加速程序的执行。可以区分处理器的指令集结构和微体系结构:指令结构指的是每条机器代码指令的效果;而微体系结构描述的是处理器实际上是如何实现的。

程序运行过程

首先,执行一些命令,使可执行文件中的代码和数据从磁盘复制到主存,即程序的加载过程。注意:利用直接存储器存取(DMA)技术,数据可以不通过处理器而直接从磁盘到达主存。可执行文件的代码和数据被加载到主存后,处理器就开始执行程序的main中的机器指令。

参考文献:深入理解计算机系统

已标记关键词 清除标记
相关推荐
<p> <strong><span style="font-size:20px;color:#FF0000;">本课程主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者</span></strong> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">1. 包含:<span style="color:#FFFF00;background-color:#FF0000;">项目源码、</span><span style="color:#FFFF00;background-color:#FF0000;">项目文档、数据库脚本、软件工具</span>等所有资料</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">2. 手把手的带你从零开始部署运行本套系统</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">3. 该项目附带的源码资料可作为毕设使用</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">4. 提供技术答疑和远程协助指导</span></strong></span><strong><span style="font-size:18px;"></span></strong> </p> <p> <br /> </p> <p> <span style="font-size:18px;"><strong>项目运行截图:</strong></span> </p> <p> <strong><span style="font-size:18px;">1)系统登陆界面</span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241015433522.png" alt="" /><br /> </span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">2)学生模块</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241015575966.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">3)教师模块</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016127898.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">4)系统管理员</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016281177.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016369884.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><br /> </span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">更多Java毕设项目请关注我的毕设系列课程 <a href="https://edu.csdn.net/lecturer/2104">https://edu.csdn.net/lecturer/2104</a></span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><br /> </span></strong> </p>
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页