《计算机系统:核心概念及软硬件实现(原书第4版)》——1.3软件

简介:

本节书摘来自华章计算机《计算机系统:核心概念及软硬件实现(原书第4版)》一书中的第1章,第1.3节,作者:[美] J. 斯坦利·沃法德(J. Stanley Warford)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3软件

算法(algorithm)是一组指令,按照适当的顺序执行,在有限的时间内解决一个问题。算法并不一定需要计算机。图1-19是一个用中文表达的算法,解决制作6份奶油冻的问题。
这份食谱说明了算法的两个重要性质—有限数量的指令和在有限时间内执行。这个算法有7条指令—混合、搅拌、烹调、关火、冷却、添加和放凉。7是一个有限的数量。算法中指令的数量不能是无限的。

image

(来源:选自《Better Homes and Gardens New Cook Book》(更好的家和花园系列之新菜谱大全)。Meredith公司版权所有,1981)
尽管奶油冻算法的指令数量是有限的,但是它的执行有一个潜在的问题。食谱告诉我们一直蒸到蛋奶能够裹住金属汤匙,但是如果它一直不能裹住汤匙怎么办呢?那么如果严格遵照指令,我们就要一直蒸下去!一个有效的算法绝不能无休止地执行。它必须提供一个在有限时间内解决问题的方案。假设奶油总是能裹住汤匙,那么这个食谱就是一个真正的算法了。
程序(program)是在计算机上执行的算法。程序不能用自然语言编写,必须用计算机系统的7层之一的语言编写。
通用计算机可以解决不同种类的问题,从计算公司的工资表到修正备忘录中的拼写错误。能够对硬件编程让它做不同的事情,硬件的多功能正是来源于此。控制计算机的程序称为软件(software)。
软件分为两大类:
系统软件。
应用软件。
系统软件(system software)使应用设计者可以接入计算机。同样的道理,应用软件(applications software)使位于App7层的用户可以使用计算机。一般来说,系统软件工程师在HOL6层和更低层设计程序,这些程序处理计算机系统中应用程序员不想费心的许多细节。
**1.3.1操作系统
**计算机最重要的软件是操作系统,操作系统(operating system)是使硬件可用的系统程序。每个通用计算机系统都包括硬件和一个操作系统。
为了有效地学习本书,你必须能够使用一台有操作系统的计算机。一些常用的商用操作系统包括Microsoft Windows、Mac OS X、UNIX和Linux。不幸的是,每个操作系统都有自己独特的命令。本书不可能解释怎样使用所有不同的操作系统,你必须从你的老师或其他资源那里学习你的操作系统的详细内容。
操作系统有3个通用功能:
文件管理。
存储器管理。
处理器管理。
在3个功能中,对用户来说文件管理是最直观的。计算机新手要学会的第一件事情就是如何操作操作系统中的信息文件。
操作系统中的文件类似于办公室中的文件,它们包括应要求被检索和处理的信息。在办公室中,文件柜存储文件;在操作系统中,外围存储器设备存储文件。尽管磁带和磁盘都能存储文件,但是下面的讨论集中于磁盘。
在办公室中,每个文件放在一个文件夹中。办公室工作人员给每个文件命名,并且在文件夹的标签上标注文件名。文件名指示文件夹的内容,也便于从文件柜中取出某个特定的文件。在操作系统中,每个文件也有名字,这个文件名起到与标注在文件夹上的名字同样的作用—便于从磁盘上找出某个文件。
当计算机用户创建一个文件时,操作系统会要求给这个文件起一个名字。根据系统不同,通常对文件名长度和其中允许使用的字符有一些限制。有时,系统会自动给名字附加一个前缀或者后缀。除了用户创建的文件外,其他的文件由系统生成并由它自动命名。
文件可以包含3种类型的信息:
文档。
程序。
数据。
文档可以是公司备忘录、信件和报告等。文件也可以存储计算机执行的程序。要执行程序时,首先要把它们从磁盘加载到主存中。一个正在执行的程序的输入数据可以来自文件,而输出数据也可以发送到文件。
物理上文件散布在磁盘的表面。为了记录所有这些信息文件,操作系统维护文件的目录。目录是磁盘上所有文件的一个列表,目录中的每个条目都包括文件名字、大小、在磁盘上的物理位置和其他任何操作系统管理文件所需的信息。目录本身也存储在磁盘上。
操作系统向用户提供了一种操作磁盘上文件的方法。一些典型的操作系统命令包括:
列出目录中的文件名。
从磁盘删除文件。
更改文件名。
打印文件内容。
执行应用程序。
要解答本书中的问题,你需要学习你的操作系统上的这些命令。
你的操作系统是由一组系统程序员针对你的计算机编写的一个程序。当你发出从磁盘删除一个文件的命令时,系统程序会执行这条命令。你,作为用户,正在使用其他人,即系统程序员,写的一个程序。
1.3.2软件分析和设计
软件,无论系统软件还是应用软件,和文学有很多共同点。两者都是人写的。尽管计算机也能读并执行程序,但人能阅读这两样东西。小说家和程序员都很有创造性,因为他们提出的解决方案并不是唯一的。当小说家想要传达某些东西时,总是有不止一种的表达方式。好小说和坏小说之间的差别不仅体现在要表达的主题上,还体现于表达的方式。同样,程序员要解决一个问题时,解决方案总有不止一种编程方法。好程序和坏程序之间的差别不仅体现在解决方案对问题解答的正确性上,还体现在程序的其他特性上,比如清晰程度、执行速度和对存储器的要求。
文学专业的学生要从事两项活动—阅读和写作。阅读是分析,读其他人写的东西并分析它的内容。写是设计或综合,要表达一个观点,你需要做的是有效地传达这个观点。大多数人觉得写比读难多了,因为它要求有更多的创造力。这也正是大众中读者比作家多的原因。
类似地,作为一个软件专业的学生,你将分析和设计程序。要牢记程序的3个活动是输入、处理和输出。在分析时,给出的是输入和处理指令,问题是确定输出。在设计时,给出的是输入和预期的输出,问题是写出处理指令,这就是软件设计。图1-20展示了分析和设计之间的不同。


image


如同文学中的阅读和写作,设计优秀软件比分析优秀软件困难很多。计算机专业的学生最熟悉的抱怨是“我能理解概念,但是我不会写程序。”这是一个很自然的抱怨,因为它反映了综合相对于分析的困难之处。我们的终极目标是让你能够分析软件,同样能够设计软件。下面的几章将教你一些具体的软件设计技术。
不过,首先你得熟悉求解问题的一般性指导原则,它们同样适用于软件设计:
理解问题。
概括解决方案。
解决概括出的问题的各个部分。
手工验证你的解决方案。
在计算机上验证你的解决方案。
当面对一个软件设计问题时,通过写下一些样本输入和相应的输出,可以检测你对问题的理解。如果你不知道怎么手工解决一个问题,就不可能通过计算机解决这个问题。要概述问题的解决方案,你必须把问题分解成几个子问题,因为子问题比原始问题小,更容易解决。如果你对程序的正确性有疑问,应该在把它输入计算机之前手工验证它。可以用在第一步中写出的样本输入来对它进行测试。
很多学生认为这些步骤对入门性教材中的小程序不是很必要。如果对你来说问题很简单,那么在编写解决方案之前,也可以不在纸上组织思路。不过,这种情况下,你还是要在心里按照这些步骤进行思考。另一方面,你终究会碰到大的设计问题,那么这些解决问题的步骤将是不可或缺的。

相关文章
|
测试技术
《 嵌入式系统设计与实践》一一3.1 硬件/软件集成
本节书摘来自华章出版社《 嵌入式系统设计与实践 》一 书中的第3章,第3. 1节,作者:Elecia White 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1638 0
|
存储 C++ Python
《计算机系统:核心概念及软硬件实现(原书第4版)》——导读
这种方法为讨论计算机科学中的核心问题提供了一种很自然的环境。例如,本书介绍了HOL6层的结构化编程,可以和Asmb5层的非结构化编程的可能性进行对比。书中讨论了goto争议、结构化编程/效率之间的折中,给出了两个层次上语言的实际例子。
1833 0