我们先做个比喻,计算机就好比一栋具备"智能功能的大楼",操作系统就是负责这栋"智能大楼"协调、管理和控制的"总控中心",计算机硬件就是组成这栋大楼的"钢筋、水泥",应用软件就是大楼里一个个具体的"环境、消防、人员监控系统"。这时候如果要入侵这栋智能大楼,我们最重要夺取哪一个关键点?我相信大家一定会选择"总控中心"。因此对于黑客学习内容里关键的一部分就是对于操作系统整体架构的掌握。
今天就以本篇文章,让大家对计算机系统架构有个初步认识!便于未来的学习中对操作系统有个更深刻的理解。
操作系统(英语:operating system,作OS)是管理与资源的,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置、决定系统资源供需的优先次序、控制输入与输出设备、操作与管理等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
操作系统是作为计算机硬件和计算机用户之间的中介的程序。操作系统的目的是为用户提供方便且有效地执行程序的环境。操作系统是管理计算机硬件的软件,硬件必须提供合适的机制来保证计算机系统的正确性,以及确保系统不受用户程序干扰正常运行。操作系统庞大而复杂,因此它必须被分块构造。每一块都是系统中明确定义的一部分,具有严格定义的输入、输出和功能。
操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的。
1)有效性:提高系统资源利用率;提高系统的吞吐量。
2)方便性:
3)可扩充性:
4)开放性:开放性是指操作系统能遵循世界标准规范,特别是遵循开放系统互联(OSI) 国际标准。凡遵循国际标准所开放的硬件和软件,均能彼此兼容,可方便的实现互连。
①命令方式:这是指由OS 提供了一组联机命令接口,以允许用户通过键盘输入有关命令来取得操作系统的服务,并控制用户程序的运行。
②系统调用方式:OS 提供了一组系统调用,用户可在自己的应用程序中通过相应的系统调用,来实现与操作系统的通信,并取得它的服务。
③图形、窗口方式:这是当前使用最为方便、最为广泛的接口,它允许用户通过屏幕上的窗口和图标来实现与操作系统的通信,并取得它的服务。
系统资源分为四类:处理器、存储器、I/O设备、信息(数据和程序)。OS 的主要功能也正是针对这四类资源进行有效的管理,即:处理机管理,用于分配和控制处理机;存储器管理,主要负责内存的分配与回收;I/O 设备管理,负责 I/O设备的分配与操纵;文件管理,负责文件的存取、共享和保护。
当一个计算机系统同时供多个用户使用时,用户对系统中共享资源的需求(包括数量和时间)可能发生冲突,为了更好的管理好这些共享资源(包括硬件和信息)的使用,操作系统必须记录下各种资源的使用情况,对使用资源的请求进行授权,协调诸用户对共享资源的使用,避免发生冲突,并计算使用资源的费用等。
对于一个完全无软件的计算机系统(即裸机),它向用户提供的是实际硬件接口(物理接口),用户必须对物理接口的实现细节有充分的了解,并利用机器指令进行编程,因此该物理机器必定是难以使用的。
在裸机上铺设的 I/O软件隐藏了对 I/O 设备操作的具体细节,向上提供了一组抽象的 I/O 设备。
OS 是铺设在计算机硬件上的多层系统软件,它们不仅增强了系统的功能,而且还隐藏了对硬件操作的细节,由它们实现了对计算机硬件操作的多个层次的抽象。
单一体结构是最早期的结构,这时整个OS是一个巨大的单一体,运行在内核态下,为用户提供服务,如下图所示。
单一体结构各功能块之间关系复杂,修改困难,牵一发而动全身,且容易形成循环调用造成死锁,于是有了下面的层次关系。
将操作系统的功能分成不同的层次,低层次的功能为紧邻其上一个层次的功能提供服务,而高层次的功能又为更高一个层次的功能提供服务,如下图所示。
分层结构的主要优点:①易保证系统的正确性。自上而下的设计方式,是所有的设计中的决定都是有序的,或者说是建立在较为可靠的基础上,这样比较容易保证整个系统的正确性。②易扩充和易维护性。在系统中增加、修改或替换一个层次中的模块或整个层次,只要不改变相应层次间的接口,就不会影响其它层次,这必将使系统维护和扩充变得更加容易。
分层结构的主要缺点:系统效率降低了。由于层次结构是分层单向依赖的,因此必须在相邻层之间都要建立层次间的通信机制,OS 每执行一个功能,通常要自上而下地穿越多个层次,这无疑会增加系统的通信开销,从而导致系统效率的降低。
从单一体和层次化结构的图中可以看出,操作系统的所有功能都在内核态下运行。但是,从用户态转为内核态是有时间成本的,这样就会造成OS的效率低下。于是,人们将操作系统的核心中的核心才放在内核态运行,其他功能都迁移到用户态运行,于是就有了下面的微内核结构。
1)提高了系统的可扩展性由于微内核 OS 的许多功能是由相对独立的服务器软件来实现的,当开发了新的硬件和软件时,微内核 OS 只需在相应的服务器中增加新的功能,或再增加一个专门的服务器。
2)增强了系统的可靠性由于微内核是出于精心设计和严格测试的,容易保证其正确性;另一方面是它提供了规范而精简的应用程序接口(API),为微内核外部的程序编制高质量的代码创造了条件。此外,由于所有服务器都是运行在用户态,服务器与服务器之间采用的是消息传递通信机制,因此,当某个服务器出现错误时,不会影响内核,也不会影响其他服务器。
3)可移植性在微内核结构的操作系统中,所有与特定 CPU 和 I/O 设备硬件有关的代码,均放在内核和内核下面的硬件隐藏层中,而操作系统其它绝大部分(即各种服务器)均与硬件平台无关,因而,把操作系统移植到另一个计算机硬件平台上所需的修改是比较小的。
4)提供了对分布式系统的支持由于在微内核 OS 中,客户和服务器之间以及服务器和服务器之间的通信,是采用消息传递通信机制进行的,致使微内核 OS 能很好地支持分布式系统和网络系统。事实上,只要在分布式系统中赋予所有进程和服务器唯一的标识符,在微内核中再配置一张系统映射表(即进程和服务器的标识符与它们所驻留的机器之间的对应表),在进行客户和服务器通信时,只需在所发送的消息中表上所发送进程和接收进程的标识符,微内核便可利用系统映射表,将消息发往目标,而无论目标是驻留在哪台机器上。
5)融入了面向对象技术在设计微内核 OS 时,采用了面向对象的技术,其中的"封装"、"继承"、"对象类"和"多态性",以及在对象之间采用消息传递机制等,都十分有利于提高系统的的"正确性"、"可靠性"、"易修改性"、"易扩展性"等,而且还能显著地减少开发系统所付出的开销。
微内核系统存在的问题:在微内核 OS 中,由于客户和服务器及服务器和服务器之间的通信,都需通过微内核,只是同样的服务请求至少需要四次上下文切换。第一次是发生在客户发送请求消息给内核,以请求取得某服务器特定的服务时;第二次是发生在由内核把客户的请求消息发往服务器时,第三次是当服务器完成客户的请求后,把响应消息发送到内核时;第四次是在内核将响应消息发送给客户时。实际情况是,当某个服务器自身尚无能力完成客户请求,而需要其他服务器帮助时,如下图所示,其中的文件服务器还需要磁盘服务器的帮助,这时就需要进行上下文的切换。
为了改善运行效率,可以重新把一些常用的操作系统的基本功能,由服务器移入微内核中,这样可使客户对常用操作系统的功能的请求所发生的用户/内核模式和上下文切换的次数。但是这又会使微内核的容量明显的增大,在小型接口定义和适应性方面的有点也有所下降,同时也提高了微内核的设计代价
1、隐藏了硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。
例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制(比如控制磁盘转动,移动磁头读写数据等细节),
2、将应用程序对硬件资源的竞态请求变得有序化
例如:很多应用软件其实是共享一套计算机硬件,比方说有可能有三个应用程序同时需要申请打印机来输出内容,那么a程序竞争到了打印机资源就打印,然后可能是b竞争到打印机资源,也可能是c,这就导致了无序,打印机可能打印一段a的内容然后又去打印c,操作系统的一个功能就是将这种无序变得有序。
处理机管理的主要功能是创建和撤销进程,对诸进程的运行进行协调,实现进程之间的信息交换,以及按照一定的算法把处理及分配给进程。
1、进程控制
进程控制的主要功能是为作业创建进程,撤销已结束的进程,以及控制进程在运行过程中的状态转换。
2、进程同步
进程同步的主要任务是为多个进程的运行进行协调。有两种协调方式:
1)进程互斥方式:这是指诸进程在对临界资源进行访问时,应采用互斥方式;
2)进程同步方式:这是指在相互合作去完成功能任务的诸进程间,由同步机构对他们的执行次序加以协调。
3、进程通信
在多道程序环境下,为了加速应用程序的运行,应在系统中建立多个进程,并且再为一个进程建立若干个线程,由这些进程(线程)相互合作去完成一个共同的任务。
4、调度
1)作业调度
作业调度的基本任务是从后备队列中按照一定的算法,选择出若干个作业,为他们分配运行所需的资源。在将他们调入内存后,便分别为他们建立进程,使他们都成为可能获得处理机的就绪进程,并按照一定的算法将他们插入就绪队列。
2)进程调度
进程调度的任务是从进程的就绪队列中,按照一定的算法选出一个进程,把处理机分配给它,并为它设置运行现场,使进程投入执行。值得提出的是,在多线程OS中,通常是把线程作为独立运行和分配处理机的基本单位,为此,须把就绪线程排成一个队列,每次调度时,是从就绪线程队列中选出一个线程,把处理机分配给它。
存储器的主要任务是为多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及能从逻辑上扩充内存。
1、内存分配
内存分配的主要任务是为每道程序分配内存空间,使它们"各得其所";提高存储器的利用率,以减少不可用的内存空间;允许正在运行的程序申请附加的内存空间,以适应程序和数据动态增长的需要。
为了实现内存分配,在内存分配的机制中应具有这样的结构功能:
1)内存分配数据结构。该结构用于记录内存空间的使用情况,作为内存分配的依据。
2)内存分配功能。系统按照一定的内存分配算法为用户程序分配内存空间。
3)内存回收功能。系统对用用户不再需要的内存,通过用户的释放请求去完成系统的回收功能。
2、内存保护
内存保护的主要任务是确保每道用户程序都只在自己的内存空间内运行,彼此互不干扰;决不允许用户程序访问操作系统的程序和数据;也决不允许用户程序转移到非共享的其他用户程序中去执行。
3、地址映射
4、内存扩充
为了能在逻辑上扩充内存,系统必须具有内存扩充机制,用于实现下述各功能:
1)请求调入功能。
允许在装入一部分用户程序和数据的情况下,便能启动该程序运行。在程序运行过程中,若发现要继续运行时所需的程序和数据尚未装入内存,可向OS发出请求,由OS从磁盘中将所需部分调入内存,以便继续运行。
2)置换功能。
若发现在内存中已无足够的空间来装入需要调入的程序和数据时,系统应能将内存中的一部分暂时不用的程序和数据调至盘上,以腾出内存空间,然后再将所需调入的部分装入内存。
完成用户进程提出的 I/O 请求;为用户进程分配所需的 I/O 设备;提高 I/O 设备和 CPU 的利用率;提高 I/O 速度;方便用户使用 I/O 设备。
设备管理应具有:缓冲管理,设备分配,设备处理以及虚拟设备等功能。
1、缓冲管理:
2、设备分配:
设备分配的基本任务是根据用户进程的 I/O 请求、系统的现有资源情况以及按某种设备的分配策略,为之分配其所需的设备。
3、设备处理:
设备处理的基本任务是用于实现 CPU 和设备控制之间的通信。
4、虚拟设备:
文件管理的主要任务是对用户文件和系统文件进行管理,以方便用户使用,并保证文件的安全性。
为此,文件管理应具有对文件存储空间的管理、目录管理、文件的读/写管理,以及文件的共享与保护等功能。
1、文件存储空间的管理
为每个文件分配必要的外存空间,提高外存利用率,并能有助于提高文件系统的存、取速度。
2、目录管理
为每个文件建立其目录项,并对众多的目录项加以有效的组织,以实现方便的按名存取,即用户只需提供文件名便可对该文件进行存取。
3、文件的读/写管理和保护
1)文件的读、写管理
根据用户的请求,从外存中读取数据,或将数据写入外存。
2)文件保护
①防止未经核准的用户存取文件
②防止冒名顶替存取文件
③防止以不正确的方式使用文件
用户与操作系统的接口:
1、用户接口
它是提供给用户使用的接口,用户可通过该接口取得操作系统的服务。
1)联机用户接口
为联机用户提供,它由一组键盘操作命令及命令解释程序所组成。
2)脱机用户接口
为批处理作业的用户提供的,故也称批处理用户接口。该接口由一组作业控制语言(JCL)组成。批处理作业的用户不能直接与自己的作业交互作用,只能委托系统代替用户对作业进行干预和控制。这里的作业控制语言 JCL 便是把需要对作业进行的控制和干预事先写在作业说明书上,然后将作业和作业说明书一起提供给系统。
3)图形用户接口
图形用户接口采用了图形化的操作界面,用非常容易识别的各种图标将系统的各项功能、各种应用程序和文件,直观、逼真的表示出来。
2、程序接口
是为用户程序在执行中访问系统资源而设置的,是用户程序取得操作系统服务的唯一途径。
系统一般有4个主要部分:
内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的结构,它们使得用户可以运行程序、管理文件并使用系统。