随笔分类 -  程序是怎样跑起来的

摘要:操作系统的硬件控制功能,通常是通过一些小的函数集合体的形式来提供的。这些函数及调用函数的行为统称为系统调用,即应用对操作系统的功能进行调用(call)。 C 语言等高级编程语言并不依存于特定的操作系统。这是因为人们希望不管是 Windows还是 Linux,都能使用几乎相同的源代码。因此高级编程语言 阅读全文
posted @ 2023-02-13 21:49 叮铃铛铛 阅读(40) 评论(0) 推荐(0)
摘要:制作应用的程序员们意识到一点:制作的不是硬件,而是利用操作系统功能的应用。 代码清单9-1 表示的是,在 Windows 操作系统下,用C语言制作一个具有表示当前时间功能的应用。time()是用来取得当前日期和时间的函数,printf() 是用来在显示器上显示字符串的函数。程序的运行结果如图 9-4 阅读全文
posted @ 2023-02-13 21:43 叮铃铛铛 阅读(24) 评论(0) 推荐(0)
摘要:操作系统的原型:仅具有加载和运行功能的监控程序。 通过事先启动监控程序,程序员就可以根据需要的各种程序加载到内存中运行。如下图: 在利用监控程序编写程序的过程中,发现很多程序都要共通的部分。因此,基本的输入输出部分的程序就被追加到了监控程序中。初期的操作系统就这样诞生了(图 9-2 )。 为了方便程 阅读全文
posted @ 2023-02-13 21:38 叮铃铛铛 阅读(22) 评论(0) 推荐(0)
摘要:Q:编译器和解释器有什么不同?A:编译器是在运行前对所有源代码进行解释处理的。而解释器则是在运行时对源代码的内容一行一行地进行解释处理的。 Q:“分割编译”指的是什么?A:将整个程序分为多个源代码来编写,然后分别进行编译,最后链接成一个EXE文件。这样每个源代码都相对变短,便于程序管理。 Q:“Bu 阅读全文
posted @ 2023-02-13 21:29 叮铃铛铛 阅读(19) 评论(0) 推荐(0)
摘要:当程序加载到内存后,还会生成栈和堆。栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据及对象的内存领域(图8-10)。 EXE文件中并不存在栈及堆的组。栈和堆需要的内存空间是在EXE文件加载到内存后开始运行时得到分配的。 内存中的程序 阅读全文
posted @ 2023-02-13 21:26 叮铃铛铛 阅读(37) 评论(0) 推荐(0)
摘要:在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件的开头,追加转换内存地址所需的必要信息。这个信息称为再配置信息。EXE文件的再配置信息,就成为了变量和函数的相对地址。相对地址表示的是相对于基点地址的偏移量,也就是相对距离。在源代码中,虽然变量及函数是在不同位置分散记述的,但在 阅读全文
posted @ 2023-02-13 21:16 叮铃铛铛 阅读(20) 评论(0) 推荐(0)
摘要:Windows以函数的形式为应用提供了各种功能。这些形式的函数称为API (应用程序接口)。例如,Samplel.c中调用的MessageBox0不是C语言的标准函数,而是Windows提供的API的一种。MessageBox()提供了显示消息框的功能。 Windows中,API的目标文件,并不是存 阅读全文
posted @ 2023-02-13 21:11 叮铃铛铛 阅读(30) 评论(0) 推荐(0)
摘要:下图的错误消息表示的是无法解析Sample1.obj参照的外部符号。 外部符号是指其他目标文件中的变量或函数。sprintf及MessageBoxA是目标文件中sprintf及MessageBox()的名称。代码中记述的函数名同目标文件中的函数名有一些差异,不过大家只需把它理解成这是C编译器的规定即 阅读全文
posted @ 2023-02-13 20:52 叮铃铛铛 阅读(13) 评论(0) 推荐(0)
摘要:编译器转换源代码后,就会生成本地文件。不过,本地文件是无法直接运行的。 为了得到可以运行的EXE文件,编译之后还需要进行“链接”处理。下面,就让我们使用Borland C++ Compiler5.5(以下称为Borland C++)来看一下编译和链接是如何进行的。 Borland C++的编译器是b 阅读全文
posted @ 2023-02-13 20:43 叮铃铛铛 阅读(26) 评论(0) 推荐(0)
摘要:能够把C 语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器。每个编写源代码的编程语言都需要其专用的编译器将 C语言编写的源代码转换成本地代码的编译器称为 C 编译器。 编译器首先读入代码的内容,然后再把源代码转换成本地代码编译器中就好像有一个源代码同本地代码的对应表。但实际上,仅仅靠对应 阅读全文
posted @ 2023-02-13 20:34 叮铃铛铛 阅读(28) 评论(0) 推荐(0)
摘要:Windows中EXE文件的程序内容,使用的就是本地代码。 用记事本打开有代码清单8-1的内容转换成本地代码得到的EXE文件(Samplel.exe),页面显示情况如图8-3所示。 上面本地代码内容是人类无法理解的。所以用C语言等编程语言来编写源代码,然后再将源代码转换成本地代码这一方法。 接下来, 阅读全文
posted @ 2023-02-13 20:28 叮铃铛铛 阅读(13) 评论(0) 推荐(0)
摘要:代码清单8-1。这是一个用C语言记述的Windows程序。该程序运行后,会把123和456的平均值289.5显示在消息框(图8-1)中。 类似于代码清单8-1这样,用某种编程语言的程序就称为源代码,保存源代码的文件称为源文件。 代码清单8-1的源代码是无法直接运行的。这是因为,CPU能直接解析并运行 阅读全文
posted @ 2023-02-13 20:19 叮铃铛铛 阅读(21) 评论(0) 推荐(0)
摘要:程序的运行环境中,存在着名为BIOS(Basic Input/Output System)的系统。BIOS存储在ROM中,是预先内置在计算机主机内部的程序。BIOS除了键盘、磁盘、显卡等基本控制程序外,还有启动“引导程序”的功能。引导程序是存储在启动驱动器起始区域的小程序。操作系统的启动驱动器一般是 阅读全文
posted @ 2023-02-13 20:10 叮铃铛铛 阅读(73) 评论(0) 推荐(0)
摘要:一、不通过移植,也能利用虚拟机软件来运行其他操作系统的应用。 通过利用该虚拟机,我们就可以在Macintosh的Mac操作系统上运行Windows应用了。Virtual PC for MAC 可以使Macintosh这一硬件变得同AT兼容机一样,从而能在该硬件上安装Windows。(Macintos 阅读全文
posted @ 2023-02-11 22:10 叮铃铛铛 阅读(30) 评论(0) 推荐(0)
摘要:Unix系列操作系统FreeBSD中,存在一种名为Ports的机制。该机制能够结合当前运行的硬件环境来编译应用的源代码,进而得到可以运行的本地代码系统。如果目标应用的源代码没有在硬件上的话,Ports就会自动使用 FTP"连接到相关站点来下载代码(图7-5)。 通过使用Ports可以利用的程序源代码 阅读全文
posted @ 2023-02-11 21:50 叮铃铛铛 阅读(34) 评论(0) 推荐(0)
摘要:应用软件则必须根据不同的操作系统类型来专门开发。CPU的类型不同,所对应的机器语言也不同,同样的道理,操作系统的类型不同,应用程序向操作系统传递指令的途径也是不同的。 应用程序向操作系统传递指令的途径称为API。(API也称为“系统调用”,是应用调用操作系统功能的手段。) Windows及Unix系 阅读全文
posted @ 2023-02-11 21:40 叮铃铛铛 阅读(53) 评论(0) 推荐(0)
摘要:计算机的硬件并不仅仅是由CPU构成的,还包括用于存储程序指令和数据的内存,以及通过1/O连接的键盘、显示器、硬盘、打印机等外围设备。 而计算机是如何控制这些外围设备的呢?这和计算机的机型有着很大的关系。 MS-DOS(Microsoft Disk Operating System)是20世纪80年代 阅读全文
posted @ 2023-02-11 21:30 叮铃铛铛 阅读(34) 评论(0) 推荐(0)
摘要:由于同一个程序能被大量用户使用,所以说程序具有很大的价值。但是,如果运行环境不同,程序是无法运行的。 如表7-1所示:在表示程序的运行环境时,列出了Operating System(操作系统)和计算机的主机(硬件)两项,由此知道运行环境是这两者的综合。也就是说,操作系统和硬件决定了程序的运行环境。 阅读全文
posted @ 2023-02-11 21:15 叮铃铛铛 阅读(27) 评论(0) 推荐(0)
摘要:图像文件的数据形式: 图像文件的使用目的:通常是把图像数据输出到显示器、打印机等设备上。Windows的标准图像数据形式为BMP,是完全未压缩的。由于显示器及打印机输出的bit (点)是可以直接映射(mapping)的,因此便有了BMP=bitmap这一名称。 除BMP格式以外,还有其他各种格式的图 阅读全文
posted @ 2023-02-11 21:02 叮铃铛铛 阅读(177) 评论(0) 推荐(0)
摘要:通过图6-5的步骤2可以发现,在用枝条连接数据时,我们是从出现频率较低的数据开始的,这就意味着出现频率越低的数据到达根部的枝条数就越多。而枝条数越多,编码的位数也就随之增多了。 使用哈夫曼树后,出现频率越高的数据所占用的数据位数就越少,而且数据的区分也可以很清晰地实现。 哈夫曼算法可以对数据进行区分 阅读全文
posted @ 2023-02-11 20:48 叮铃铛铛 阅读(25) 评论(0) 推荐(0)