程序的运行

程序的运行

一个普通的程序,比如c语言程序运行的过程如下图所示:

这里写图片描述

程序要运行起来,离不开图中的几个部分:
  • 文本编辑器:显而易见,这是编辑程序的软件,无论用何种语言都需要编辑文本信息;

  • 编译器:程序说到底是由CPU来运行的,CPU处理的是数字信号,也就是由0和1组成的二进制数,因此无论要实现什么功能传递给CPU的都应该是二进制码,也就是机器码。但是,程序员不会直接写机器码,而是通过更能表述业务逻辑的程序语言来描述希望让计算机做哪些事情,比如用汇编语言(机器语言的助记符)、C语言、C++、java等等。因此需要编译器将程序翻译成机器码。同时,我们实现的程序包含特有的逻辑也包含共有的逻辑,那么就可以把共有的实现逻辑抽象成标准类库供编程者复用。总结起来,编译器的作用是将用编程语言写的文本编译成机器码,将程序中调用的标准类库的机器码链接起来,生成可执行的机器码组成的文件,比如exe文件,对于解释型语言来说随着编译就运行了,所以不会生成可执行文件,此时编译器也可称为解释器。

  • 操作系统:软件的启动、运行、对外设的控制都离不开操作系统。操作系统提供了系统API供上层应用调用,比如,标准类库中提供了printf()方法,利用此方法可以在控制台打印信息,实际上标准类库运行在操作系统之上,正因为使用了系统调用才实现了打印信息的功能,以windows系统为例,真正的实现类库是windows自带的某个dll文件。由此可见,编译器的选择跟操作系统和CPU类型都有关系,因为操作系统不同系统API不同,CPU类型不同对机器码的解析也不同,这些都会影响编译器构造可执行文件。

  • 内存:程序是由控制指令和数据组成的,机器码描述的也是控制指令和数据两部分。一个基本的概念是:数据和指令必须拷贝到内存中才能供CPU使用。这是因为CPU的处理速度远大于磁盘的速度。内存为程序开辟了四块空间:变量空间、函数空间、堆、栈。CPU中的寄存器频繁的读取内存中的数据,将运算过程中产生的变量保存在内存中,保存在栈中的变量会随着函数调用结束自动销毁,保存在堆中的变量需要通过特殊的机制销毁。

  • CPU:CPU是计算机的大脑,我们只关注CPU中的一堆寄存器,当内存中准备好由机器码组成的程序时,有个叫程序计数器的寄存器会记录程序的入口地址然后根据当前这条指令是顺序执行还是需要跳转的来计算下一条指令或数据的内存地址,然后去取下一条内容到相应的寄存器中进行计算,以此类推。当需要调用外设是也是由CPU通过外设的端口向外设发出指令,由外设的控制器件完成操作。

    这里,CPU和内存是计算机的硬件设施,文本编辑器和编译器构成了开发环境(当然真实的集成开发环境还需要调试器、图形界面等),一些系统级的操作由操作系统完成,因此集成开发环境运行在操作系统之上。由此可见,这五个部分对于任何一段程序的运行都是缺一不可的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值