上一篇概述完了计算机硬件部分,这次主要来聊一聊计算机软件组成。

说到计算机软件组成,不得不提及两类软件,一类是系统软件,一种是用户软件。这里着重讲解系统软件。

系统软件,最主要的就是操作系统。先说说操作系统的发展历史。

操作系统发展历程

操作系统之本意原为提供简单的工作排序能力,后为辅助更新更复杂的硬件设施而渐渐演化。从最早的批量模式开始,分时机制也随之出现,在多处理器时代来临时,操作系统也随之添加多处理器协调功能,甚至是分布式系统的协调功能。其他方面的演变也类似于此。另一方面,在个人电脑上,个人电脑之操作系统因袭大型机的成长之路,在硬件越来越复杂、强大时,也逐步实践以往衹有大型机才有的功能。总而言之,操作系统的历史就是一部解决电脑系统需求与问题的历史。

第一部电脑并没有操作系统。这是由于早期电脑的创建方式与性能不足以运行如此程序。但在1947年发明了晶体管,以及莫里斯·威尔克斯发明的微程序方法,使得电脑不再是机械设备,而是电子产品。系统管理工具以及简化硬件操作流程的程序很快就出现了,且成为操作系统的起源。到了1960年代早期,商用电脑制造商制造了批处理系统,此系统可将工作的建置、调度以及运行序列化。此时,厂商为每一台不同型号的电脑创造不同的操作系统,因此为某电脑而写的程序无法移植到其他电脑上运行,即使是同型号的电脑也不行。

到了1964年,IBM System/360推出了一系列用途与价位都不同的大型机,而它们都共享代号为OS/360的操作系统(而非每种产品都用量身订做的操作系统)。让单一操作系统适用于整个系列的产品是System/360成功的关键,且实际上IBM当前的大型系统便是此系统的后裔,为System/360所写的应用程序依然可以在现代的IBM机器上运行。

OS/360也包含另一个优点:永久贮存设备—硬盘的面世。另一个关键是分时概念的创建:将大型机珍贵的时间资源适当分配到所有用户身上。分时也让用户有独占整部机器的感觉;而Multics的分时系统是此时众多新操作系统中实践此观念最成功的。

1963年,通用电气与贝尔实验室合作以PL/I语言创建的Multics,是激发1970年代众多操作系统创建的灵感来源,尤其是由AT&T贝尔实验室的丹尼斯·里奇与肯·汤普逊所创建的Unix系统,为了实践平台移植能力,此操作系统在1973年由C语言重写;另一个广为市场采用的小型电脑操作系统是VMS。

到八十年代后,第一代微型计算机并不像大型机或小型电脑,没有装设操作系统的需求或能力;它们只需要最基本的操作系统,通常这种操作系统都是从ROM读取的,此种程序被称为监视程序。1980年代,家用电脑开始普及。通常此时的电脑拥有8-bit处理器加上64KB存储器、显示器、键盘以及低音质喇叭。而80年代早期最著名的套装电脑为使用微处理器6510的Commodore C64。此电脑没有操作系统,而是以一8KB只读存储器BIOS初始化彩色显示器、键盘以及软盘驱动器和打印机。它可用8KB只读存储器BASIC语言来直接操作BIOS,并依此撰写程序,大部分是游戏。此BASIC语言的解释器勉强可算是此电脑的操作系统,当然就没有内核或软硬件保护机制了。此电脑上的游戏大多跳过BIOS层次,直接控制硬件。

而1980年代另一个崛起的操作系统异数是Mac OS,此操作系统紧紧与麦金塔电脑捆绑在一起。此时一位施乐帕罗奥多研究中心的员工Dominik Hagen拜访了苹果电脑的史蒂夫·乔布斯,并且向他展示了此时施乐发展的图形用户界面。苹果电脑惊为天人,并打算向施乐购买此技术,但因帕罗奥多研究中心并非商业单位而是研究单位,因此施乐回绝了这项买卖。在此之后苹果一致认为个人电脑的未来必定属于图形用户界面,因此也开始发展自己的图形化操作系统。

现代操作系统通常都有一个使用的绘图设备的图形用户界面(GUI),并附加如鼠标或触控面版等有别于键盘的输入设备。旧的OS或性能导向的服务器通常不会有如此亲切的接口,而是以命令行界面(CLI)加上键盘为输入设备。以上两种接口其实都是所谓的壳,其功能为接受并处理用户的指令。

操作系统核心概念

操作系统是软件中最基础的部分,它运行在内核态中,内核态也称为管态或者核心态,它们都是操作系统的运行状态,只不过是不同的叫法而已。操作系统具有硬件的访问权,可以执行机器能够运行的任何指令。软件的其余部分运行在用户态下。要理解操作系统,首先得理解相关核心概念,例如,进程,地址空间,文件等。

进程

进程就是操作系统执行一个程序,与每个程序相关的是地址空间,其实际是最小存储空间地址到最大存储空间地址的列表。在这个地址空间中,进程可以进行读写操作,地址空间中存放着可执行程序,程序所需要的数据和它的栈,与每个进程相关的还有资源集,通常包括寄存器(registers)(寄存器一般包括程序计数器(program counter)和堆栈指针(stack pointer))、打开文件的清单、突发的报警、有关的进程清单和其他需要执行程序的信息,可以把它理解成程序的容器。

由于单核cpu运行时往往是伪并发,一个时间端往往只有一个进程在运行,为此,就不得不提及进程间的切换。为此,在运行过程中,进程往往要被挂起,所以,一个挂起的进程包括进程地址空间以及对应的进程表项。

进程往往有以下几种状态,运行态,就绪态和阻塞态。其转化模型如下:

计算机操作系统概述中文最新版(计算机入门必读-操作系统)(1)

运行态表示着这个进程当前正在占用着cpu,就绪态表示着可以运行但是别的进程正在占用着cpu,阻塞态表示除非外部事物发生,否则进程不能运行。

经常表项往往又称为进程控制块,该表项包含了进程的重要信息,包括程序计数器,堆栈指针,内存分配情况,所打开的文件状态,调度信息以及进程切换时所保留的各种信息等。下图是进程表中相关图的一些介绍:

计算机操作系统概述中文最新版(计算机入门必读-操作系统)(2)

进程间往往在运行中有交互的过程,这个过程我们叫做进程间通信,常见的进程间通信方式有管道,有名管道,有名管道,信号,消息队列,共享内存,信号量,套接字七种,这里不做赘述。

地址空间

在操作系统管理程序运行的阶段,进程会将文件或者硬盘中的程序和数据拷贝到内存中运行,操作系统中管理分层存储体系的部分称为存储管理器,它的任务是有效的管理内存的使用,记录哪些内存正在使用,哪些内存是空闲的,从而在进程需要的时候去分配其内存。

地址空间即为内存物理地址的抽象。其的存在合理性是要以防用户程序直接对物理内存地址进行操作导致影响操作系统的运行。它的出现着力于解决保护和重定向。

地址空间是抽象出来的进程可以寻址的内存的一套抽象地址集合。每个进程都有自己的地址空间,并且这个地址空间独立于其他进程存在。

虚拟内存/分页技术

说到内存管理,就不得不提及虚拟内存技术。其是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。

而虚拟内存中又会使用到分页技术。其可以使电脑的主存可以使用存储在辅助存储器中的数据。操作系统会将辅助存储器(通常是磁盘)中的数据分割成固定大小的区块,称为“页”(pages)。当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。相对于分段,分页允许存储器存储于不连续的区块以维持文件系统的整齐。分页是磁盘和内存间传输数据块的最小单位。

分页/虚拟内存能有助“大大地”降低整体及额外非必要的 I/O 次数,提高系统整体运作性能。因为这能有助提高 RAM 的读取命中率,也透过其内部的高效率算法来达到 I/O 数据流的预缓存工作,通过与之相关的等等手段也能很好地提高了 CPU 的使用效率,而拥有大物理内存的用户更可能考虑利用如Ramdisk、Supercache、SoftPerfect RAM Disk等模拟出硬盘分区来同时将虚拟内存/系统临时文件等设置其上以进一步加强系统性能,及达至保障硬盘的措施。分页是虚拟内存技术中的重要部分。一般来说,操作系统会将运行中程序的数据放至随机存取存储器上空的帧中,将不需要的数据从帧上清除,但如果随机存取存储器没有空的帧可用,操作系统会把一部分的数据存回辅助存储器然后释放。辅助存储器会用分页的方式将文件存在经过平均分配大小的页上,等到随机存取存储器需要使用时再写回。如果在随机存取存储器释放数据过后还需要更新数据,系统必须将数据先写回后更新,再存入辅助存储器中。高性能的系统需要在替换随机存取存储器上的数据时消耗较少的时间,所以一般的系统会采取最近最少使用算法(LFU)来达到较高的效果。

文件系统

文件是进程创建的信息逻辑单元。一块磁盘通常含有成百上千的文件,每个文件又是独立于其他文件的。文件是受操作系统管理的,有关文件的构造,命名,存取,使用,保护都是操作系统设计时需要考虑的范畴,操作系统处理文件的部分称之为文件系统。

文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。

文件系统一般有以下几种:

磁盘文件系统:

一种设计用来利用数据存储设备来保存计算机文件的文件系统,最常用的数据存储设备是磁盘驱动器,可以直接或者间接地连接到计算机上。例如:FAT、exFAT、NTFS、HFS、HFS 、ext2、ext3、ext4、ODS-5、btrfs、XFS、UFS、ZFS。有些文件系统是行程文件系统(也有译作日志文件系统)或者追踪文件系统。

闪存文件系统:

是一种设计用来在闪存上储存文件的文件系统。随着移动设备的普及和闪存容量的增加,这类文件系统越来越流行。

日志文件系统:

具有闪存文件系统需要的特性,这类文件系统包括JFFS2和YAFFS。也有为了避免日志频繁写入而导致闪存寿命衰减的非日志文件系统,如exFAT。

数据库文件系统:

文件管理方面的一个新概念是一种基于数据库的文件系统的概念。不再(或者不仅仅)使用分层结构管理,文件按照他们的特征进行区分,如文件类型、专题、作者或者亚数据进行区分。于是文件检索就可以按照SQL风格甚至自然语言格式进行。

网络文件系统:

网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制。

系统调用

其指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态运行。如设备IO操作或者进程间通信。

操作系统的进程空间可分为用户空间和内核空间,它们需要不同的执行权限。其中系统调用运行在内核空间。这块博大精深,之后会详细探讨。

网络

网络也是操作系统的核心概念,许多现代的操作系统都具备操作主流网络通信协议TCP/IP的能力。也就是说这样的操作系统可以进入网络世界,并且与其他系统分享诸如文件、打印机与扫描仪等资源。

安全

大多数操作系统都含有某种程度的信息安全机制。信息安全机制主要基于两大理念:

操作系统提供外界直接或间接访问数种资源的管道,例如本地端磁盘驱动器的文件、受保护的特权系统调用、用户的隐私数据与系统运行的程序所提供的服务。

操作系统有能力认证资源访问的请求。允许通过认证的请求并拒绝无法通过的非法请求,并将适当的权力授权给此请求。有些系统的认证机制仅简略地把资源分为特权或非特权,且每个请求都有独特的身份识别号码;例如用户名。

资源请求通常分成两大种类:

内部来源:通常是一个正在运行的程序发出的资源请求。在某些系统上,一个程序一旦可执行就可做任何事情(例如DOS时代的病毒),但通常操作系统会给程序一个识别代号,并且在此程序发出请求时,检查其代号与所需资源的访问权限关系。

外部来源:从非本地端电脑而来的资源请求,例如远程登录本机电脑或某些网络连线请求(FTP或HTTP)。为了识别这些外部请求,系统也许会对此请求提出认证要求。通常是请求输入用户名以及相对应的密码。系统有时也会应用诸如磁卡或生物识别数据的它种认证方法。在某些例子,例如网络通信上,通常不需通过认证即可访问资源(例如匿名访问的FTP服务器或P2P服务)。

用户界面

就是面向用户友好的UI,没什么说的。

驱动程序

所谓的驱动程序(Device driver)是指某类设计来与硬件交互的电脑软件。通常是一设计完善的设备交互接口,利用与此硬件连接的电脑汇排流或通信子系统,提供对此设备下令与接收信息的功能;以及最终目的,将消息提供给操作系统或应用程序。驱动程序是针对特定硬件与特定操作系统设计的软件,通常以操作系统内核模块、应用软件包或普通计算机程序的形式在操作系统内核底下运行,以达到通透顺畅地与硬件交互的效果,且提供硬件在处理异步的时间依赖性接口时所需的中断处理函数。

设计驱动程序的主要目的在于操作抽象化,任何硬件模块,既使是同一类的设备,在硬件设计面上也有巨大差异。厂商推出的较新模块通常更可靠更有效率,控制方法也会有所不同。电脑与其操作系统每每不能预期那些现有与新设备的变异之处,因此无法知道其操作方法。为解决此问题操作系统通常会主动制订每种设备该有的操作方式,而驱动程序功能则是将那些操作系统制订的行为描述,转译为可让设备了解的自定义操作手法。

理论上适合的驱动程序一旦安装,相对应的新设备就可以无误地运行。此新驱动程序可以让此设备完美地切合在操作系统中,让用户察觉不到这是操作系统原本没有的功能。

总结

能总结比较重要的大概就这些,还有很多点都可以抽出详细探讨,这个以后有时间会详细说明。

,