
为了使计算机程序得以运行,计算机需要加载代码,同时也要加载数据,然后由处理器执行指令。整个过程可以总结为编译、链接、装载、执行。
1、编译
编译过程又可以被分为两个阶段:编译、汇编。
编译是指编译器读取字符流的源程序,对其进行词法与语法的分析,将高级语言指令转换为功能等效的汇编代码。
汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。
2、链接
链接的主要内容是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接又分为静态链接和动态链接:
静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大;
动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统中把相应动态库加载到内存中去。
3、装载
程序在经过链接后,得到了可执行文件,下一步就需要将可执行程序加载到内存中。
由于现代 *** 作系统均采用分页的方式来管理内存,所以 *** 作系统只需要读取可执行文件的文件头,之后建立起可执行文件到虚拟内存的映射关系,而不需要真正的将程序载入内存。
4、运行
加载器将可执行目标文件中的代码和数据从磁盘复制到内存中,然后通过跳转到程序的第一条指令或入口点来运行程序。
在程序的运行过程中,CPU发现有些内存页在物理内存中并不存在并因此触发缺页异常,此时CPU将控制权限转交给 *** 作系统的异常处理函数, *** 作系统负责将此内存页的数据从磁盘上读取到物理内存中。
数据读取完毕之后, *** 作系统让CPU jmp到触发了缺页异常的那条指令处继续执行,此时指令执行就不会再有缺页异常了。
扩展资料
为使计算机按预定要求工作,首先要编制程序,无论是最早的 *** 作系统还是现代 *** 作系统,程序的运行都是计算机工作的本质。
早期计算机是单任务执行,由程序员直接编写 *** 作系统可以识别的机器语言,到现在可以实现多道程序并行,并且程序的开发由更利于程序员理解的高级语言编写,源程序在经过一系列翻译过程,变成计算机理解的机器语言,再执行。
整个程序执行的过程,需要CPU、内存、程序代码、设备等配合,才能实现程序要表达的功能。
参考资料来源:百度百科-计算机
是的,运行程序时的内存,也叫RAM(简称运存)。而另一个内存是用来存储东西的内存,就像8G的MP4一样,它拥有8G的存储空间,这种内存为一般叫的电脑内存。内存这东西就像工厂的车间,存储正在处理的数据,CPU只是车间的机器,只处理数据,你说的程序应该是在内存中运行,就像产品在车间被处理一样。
当我们同时在电脑上打开很多软件,而电脑本身内存又不是很大的时候,电脑就会出现内存占用很高的现象。如果你安装了360或者电脑管家等软件的话,那么就能看到大致是那些软件占用的内存,如果没有安装这些安全软件也可以按下ctrl+shift+Esc键打开windows本身的任务管理器,然后我们可以看到是那些软件在占用内存。
楼主的意思是指将软件安装到其他人的硬盘(不是内存吧)上吧。。。如果是内存:
则软件加载到内存,并开始执行是由 *** 作系统控制的,一般程序无需介入
如果是安装到硬盘上:
这其实涉及的就是一个软件分发的概念,软件分发其实就是将软件部署到目标计算机,对于复杂软件主要就是在目标计算机配置运行环境,比如:
1。安装相关支持库,比如基于VC的就有VC运行库
2。设置软件相关配置,比如向注册表写入初始信息,以便程序能够正常启动
只要将软件运行所需的环境部署正确,软件就能正常运行,这就是软件安装程序所作的工作。
当然,对于一些小的程序,尤其是使用常见语言编写的程序,更尤其是使用微软自家支持的开发工具开发的软件,部分可以复制运行,因为Windows会默认安装这些语言的运行库,比如VC,VB(Vista之后不再支持win32 VB),C#,VB.net(Vista之后默认安装.net环境)等
具体的软件分发细节比较多,有兴趣的话可以Hi我来讨论^_^
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)