程序是什么

程序(Program)是计算机系统的必备元素,因为计算机系统由硬件、操作系统以及软件构成,而程序又是软件的组成部分。操作系统是管理和控制计算机硬件与软件资源的计算机软件,是直接运行在“裸机”上最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。可见操作系统也是一个特殊的程序,特殊在它扮演这一个统筹管理的角色,类似于国家职能机关,管理着社会大大小小的事务,让社会有条不紊的发展。

程序与软件(Software)的概念不同,但常常因为概念相似而被混淆。软件指程序与其相关文档或其他从属物的集合。一般的我们视程序为软件的一个组成部分,简单地说,“软件=程序+文档”。比如一个游戏软件包括程序(如.exe等)和其它图片(如.bmp等)、音效(如*.wav等)、使用说明(如readme.txt)等附件,那么这个程序称作“应用程序”(Application),而它与其他文件(图片、音效等)在一起合称“软件”。

本质上,程序是在计算机中执行的一系列指令,用于完成特定的目的,通常用某种程序设计语言编写。程序与编程语言、计算机和操作系统的关系,好比餐厅中完成一道酸菜鱼,厨房经理(操作系统)协调安排某厨师(计算机)按照某语言(比如汉语)编写的菜谱(程序),使用各种食材(鱼、八角、料酒等),烹饪出美味的酸菜鱼。软件可以看作菜谱和各种食材的集合,来完成特定的功能(烹饪美食)。

通常,代码文本文件经过预处理、编译、汇编和链接,生成人们不易理解的二进制指令文本,供计算机执行,这种二进制指令文件即为可执行的计算机程序。未经编译可解释运行的程序通常称之为脚本程序,未经编译不可执行的代码文件称之为源文件。下面以C语言为例,介绍一下学习编程语言的经典样例helloword程序的执行过程。源文件helloworld.c如下:

#include <stdio.h>

int main(int argc,char* argv[])
{
    printf("hello world\n");
    return 0;
}

使用g++ helloword.c编译默认生成名为a.out的可执行文件,执行输出结果为“hello world”。程序执行过程经历了如下步骤: (1)二进制可执行文件a.out存储在磁盘上,由CPU或DMA将a.out加载到主存,加载的数据包括指令和待输出的字符串 “hello word”; (2)CPU依次从内存读取指令,执行指令,将“hello word”复制到寄存器; (3)CPU将“hell world”从寄存器复制到标准输出(默认为显示器)。

对于程序的理解,计算机科学家Niklaus Wirth(尼古拉斯·沃斯)从本质上给出了简洁的定义“程序=算法+数据结构”。所以请记住,“软件=程序+文档=算法+数据结构+文档”。


参考文献

[1]深入理解计算机系统 [2]程序.百度百科

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

你有一个好的归档习惯吗?

29940
来自专栏老九学堂

程序员必备辅助开发工具总结

工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们的开发效率。老九君给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马上开始~! N...

37130
来自专栏生信技能树

生信蓝领,一个不舍得分享的高通量数据分析框架

安装bcbio框架 软件安装 配置参考基因组 流程配置 手动创建 脚本创建 简单实战 总结 当我跑完一些分析流程,比如说RNA-Seq,重测序分析以后,我就想到...

603110
来自专栏程序员宝库

后端好书阅读与推荐(续四)

这里依然记录一下每本书的亮点与自己读书心得和体会,分享并求拍砖。 Docker生产环境实践指南 Docker生产环境实践指南 (豆瓣:https://book....

51460
来自专栏喔家ArchiSelf

解读六边形架构

追溯微服务架构的渊源,一般会涉及到六边形架构。追溯六边形架构的起源,要看始作俑者Alistair Cockburn的这篇文章 http://alistair.c...

19630
来自专栏FreeBuf

如何用kwetza给安卓应用加后门

*本文仅供安全学习、测试或信息安全教学用途,禁止非法使用 简介 这篇文章将会描述一种在Android可执行文件中种后门的方法。在接下来的动手操作部分,我将使用到...

30290
来自专栏轮子工厂

分享两个可供练手的Javaweb网站源码

本科大二的时候记得有一回实验课,系主任给我们代的课。当时我特别认真的坐在第一排敲代码,老师可能是觉得我写代码的姿势特别的帅气,于是过来和我聊天,然后我凭借三寸不...

38340
来自专栏刘君君

Rest Notes-架构上的教训(论文部分完结)

17660
来自专栏FreeBuf

利用Google爬虫DDoS任意网站

作者 Taskiller 提醒:以下内容仅供安全测试及教学参考,禁止任何非法用途 Google的FeedFetcher爬虫会将spreadsheet的=imag...

34770
来自专栏网络

Uber开山基石:如何从无到有设计系统架构?

欢迎回看本文原始视频 http://t.cn/RjSC0KQ 本篇为Uber系列技术文章第一篇 今天我们解读的是Uber公司的Curis所分享的Uber架构从0...

352100

扫码关注云+社区

领取腾讯云代金券