软件系统

两种主要的软件:操作系统和应用程序

操作系统是软件中的基础层,它负责管理计算机硬件,并为其他被称作应用程序的程序运行提供支持。

6.1 操作系统

操作系统控制和分配计算机资源。

6.2 操作系统怎么工作

CPU的结构是经过特殊设计的。计算机加电后,CPU会开始执行存放在非易失性存储器中的一些指令。这些指令继而从一小块闪存中读出足以运行某些设备的代码。这些代码在运行过程中再从磁盘,CD,USB存储器或网络连接的既定位置读出更多指令。这些指令再继续读出更多指令,直到加载了足够完成有效工作的代码为止。这个准备开始的过程叫做启动(booting)。具体细节可能不同,但基本思想是一样的,即少量指令足以找到更多指令,后者依次再找到更多的指令。

计算机启动过程中通常还要检查硬件,以便知道有哪些设备接入了计算机,比如有无打印机或者无线设备。还会检查内存和其他组件,以确保他们都可以正常工作。启动过程还会为接入的设备加载软件(驱动程序),以便操作系统能够使用这些设备。上述过程都需要时间,而我们从开机到计算机能用的这段时间内通常都会等的不耐烦。尽管计算机比过去快了不知多少倍,但在启动上仍然要花一两分钟时间,的确够让人泄气的。

操作系统运行起来之后,它就会转而执行一个简单循环,依次把控制权交给准备运行或需要关注的每个应用程序。如果我在字处理程序中输入眼下这些字的时候,顺便收了一下邮件,又到网上逛了逛,同时还在后头播放音乐,那么操作系统会让CPU依次处理这些进程,并根据需要在他们之间切换。每个程序会得到一段极短的时间,在程序请求系统服务后或者分配给它的时间用完时结束。

6.2.1 系统调用

操作系统提供了硬件和其他软件之间的接口。有了这个接口,硬件就好像能听懂人的话了,而程序员编程因此就会变得简单。用这个圈子里的行话说,操作系统提供了一个平台,在这平台上可以构建应用程序。

操作系统为应用程序定义了一组操作(也叫服务),比如将数据存储至文件或者从文件中取出数据,建立网络连接,获取键盘输入,报告鼠标移动和按钮点击,绘制屏幕,等等。

操作系统以标准化的或者说大家协商一致的方式提供这些服务,而应用程序通过执行一种特殊的指令来请求这些服务,并将控制权移交给操作系统中特定的地址。操作系统根据请求完成计算,然后再将控制权和结果返回给应用程序。操作系统的这些入口被称为系统调用,而对这些系统调用的详细说明实际上恰恰解释了操作系统能做什么。系统调用可以直接拿操作系统内部的代码作为入口,也可以是对某个(为相应服务而准备的)库函数的调用。但多数情况下,即便是程序员也不用关心上述区别。正因为如此,谁也说不清到底有多少个系统调用,但通常一两百个总是有的。

###6.2.2 设备驱动程序

设备驱动程序是一种沟通操作系统与特点硬件设备的程序。驱动程序的代码知道怎么让特殊的设备履行自己的职责,比如从特定的鼠标得到移动和按钮信息,让磁盘通过旋转的磁表面读取和写入信息,让打印机在纸上留下记号,让特定的无线网卡发送和接收无线电信号。

6.3 其他操作系统

6.4 文件系统

6.5 应用程序

应用程序是一种统称,表示所有在操作系统平台上完成某种任务的软件或程序。

首先,浏览器必须处理异步事件。所谓异步事件,就是在非预定时间发生,没有特定次序的事件。

浏览器自身还是一个平台,要提供不同层次的扩展接口。

6.6 软件分层

与计算领域的很多其他东西一样,软件也是分层组织的。类似于地质学中的分层,软件中的不同层次可以隔离不同的关注点。在程序员的世界里,分层是解决复杂问题的一个核心思想。

通俗地讲,计算机的最底层是硬件。硬件,除了总线支持在系统运行期间添加和删除设备之外,其他方面几乎可以看成不可变的。

再往上就是所谓的操作系统层了。为了突出其核心地位,通常把这一层称为内核。操作系统介于硬件和应用程序之间。无论底层是什么硬件,操作系统都要负责隐藏其特殊性,向应用程序提供统一的接口或界面,这个接口或界面不因硬件的种种差别而变化。在接口设计得当的情况下,同一个操作系统的接口完全可以适用于众多制造商生产的不同类型的CPU。

Unix操作系统的接口就是这样的。Unix可以在各种处理器之上运行,但在任何处理器上都能提供相同的核心服务。事实上,操作系统就是一种通用的商品,底层的硬件除了价格和性能之外,其他方面都影响不大。而且,上层的软件也不依赖于它。把为一种处理器编写的程序移植到另一种处理器上,无非就是小心谨慎地用合适的编译器再编译一遍而已。当然,程序与硬件结合得越紧密,这种转换工作就越难做。无论如何,这种转换对很多程序来说都是可行的。

对Windows来说,问题就没有那么简单了。

操作系统再往上的一层是函数库。函数库提供通用的服务,这样一来,程序员就不必各自重复实现这些功能。有些库比较靠近底层,能够完成一些基本功能(完成数学计算,比如开方和求对数,或者像前面date命令一样计算日期和时间)。另外一些库的功能更强大(涉及机密,图形处理,压缩等)。图形用户界面上的组件,包括菜单,按钮,复选框,滚动条,选项卡面板等等,都需要编写很多代码。为此,只要把这些代码封装成函数库,任何人就都可以使用它们,而且还能保证统一的行为和外观。这就是为什么大多数windows应用看起来那么相似的原因。同样的情况在Mac上更是如此。如果所有软件开发商都重新发明,重新实现这些功能,那不仅会浪费大量资源,而且五花八门的界面也会让用户感到无所适从。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值