zoukankan      html  css  js  c++  java
  • 《操作系统》学习笔记

    操作系统是计算机学科的基础课程,是理解计算机运行原理的重要基石,学习操作系统不仅能够让编程人员了解计算机运行逻辑而且还有助于培养编程“软实力”,如果想真正在编程之路上走下去,那么操作系统将会是重要的加速器,本系列将走进操作系统课程,了解在计算机世界的规则...

    正文

    一、操作系统是什么

    说到操作系统,不少人会瞬间想到微软的Windows系列,有经验的编程人员或许会想到unix,Linux等,但对于操作系统的定义,不少人恐怕就说不上来了,其实在计算机学科领域至今也未形成一个统一的标准化的定义,出现这个问题一方面由于操作系统实现两项相对独立的功能---扩展机器和管理资源,另一方面取决于从什么角度来看待操作系统---用户观点还是系统观点。

    1、操作系统作为扩展机器

    操作系统可以将硬件细节与编程人员隔离开,用户可以使用操作系统提供的各种命令,直接打开文件、读写文件、更改目录等,在做这些事情时,只需要关心自己要实现的目标,并不用考虑硬件是如何动作,从而隐藏了底层硬件的特性。通过操作系统的加工,呈现在用户面前的机器是功能更强,使用更方便的机器,通常把逻辑之上覆盖各种软件,从而形成功能更强的机器称为扩展机器或虚拟机。

    2、操作系统作为资源管理器

    操作系统可以用来管理硬件资源和数据、程序等软件资源,控制、协调各个程序对这些资源的利用,尽可能地充分发挥各种资源的作用,作为资源管理者,操作系统主要做以下工作:

    • 监视各种资源,随时记录它们的状态
    • 实施某种策略以决定谁获得资源、如何获得、获得多少
    • 分配资源提供需求者使用
    • 回收资源,以便再分配

    3、用户角度看操作系统

    操作系统应当处于用户与计算机硬件系统之间,为用户提供使用计算机系统的接口。

    4、系统角度看操作系统

    操作系统是硬件之上的第一层软件,它要管理计算机系统中各种硬件资源和软件资源的分配问题,要解决大量对资源请求的冲突问题,决定把资源分配给谁,何时分配,分配多少等,使得资源的利用高效而且公平。此外操作系统要对IO设备和用户程序加以控制,保证设备正常工作,防止非法操作,及时诊断设备的故障等。

    综上所述,可以得到:

    • 操作系统是软件,而且是系统软件,即操作系统由一整套程序组成。
    • 操作系统基本职能是控制和管理系统内各种资源,有效地组织多道程序的运行。
    • 操作系统提供众多服务,方便用户使用,扩充硬件功能。

    总之,通常可以这样定义操作系统:操作系统是控制和管理计算机系统内各种硬件和软件资源,有效地组织多道程序运行的系统软件,是用户和计算机之间的接口。

    二、操作系统的主要功能

    操作系统主要功能有一下5个方面:存储管理、作业和进程管理、设备管理、文件管理和用户接口服务

    1、存储管理

    存储管理的主要功能包括:内存分配,地址映射,内存保护和内存扩充

    1.1 内存分配

    内存分配的主要任务是为每道程序分配一定的内存空间,为此操作系统必须记录整个内存的使用情况,处理用户提出的申请,按照某种策略实施分配,接收系统或用户释放的内存空间。由于内存是宝贵的系统资源,在制定分配策略时应该如何考虑提高内存的利用率,减少内存浪费。

    1.2 地址映射

    CPU在执行用户程序时,要从内存中取出指令或数据,为此就必须把所用的相对地址(或称逻辑地址)转换成内存的物理地址。

    1.3 内存保护

    不同用户的程序都放在同一个内存中,就必须要保证它们在各自的内存空间中活动,不能相互干扰,更不能侵占操作系统的空间,为此需要建立内存保护机制。

    1.4 内存扩充

    一个系统中的内存容量是有限的,不能随意扩充其大小。然而,当对内存“求大于供”的局面时,就需要采取虚拟存储技术。将程序当前使用的部分放在内存,而其余部分放在磁盘上,以后根据程序执行时的要求和内存当时使用的情况,随机地将所需部分调入内存;必要时还要把已分配出去的内存回收,供其他程序使用(内存置换)

    2、作业和进程管理

    操作系统中有两个重要概念,即作业与进程,简言之,用户的计算任务称为作业,程序的执行过程称作进程(进程是分配资源和在处理机上运行的基本单位)。众所周知,计算机系统中最重要的资源是CPU,对它管理的优劣直接影响整个系统的性能。所以,作业和进程管理的基本功能包括:作业和进程调度、进程控制和进程通信。

    2.1 作业和进程调度

    一个作业通常经过两级调度才能在CPU上执行,首先是作业调度,它把选中的一批作业放入内存,并分配其他必要资源,为这些作业建立相应的进程,然后进程调度按照一定的算法从就绪进程中选出一个合适进程,使之在CPU上运行、

    2.2 进程控制

    进程是操作系统中活动的实体,进程控制包括创建进程、撤销进程、封锁进程、唤醒进程等。

    2.3 进程通信

    多个进程在活动过程中彼此间会发生相互依赖或者相互制约的关系,为保证系统中所有的进程都能正常活动,就必须设置进程同步机制,它分为同步方式与互斥方式。相互合作的进程之间往往需要交换信息,为此,操作系统需要提供通信机制。

    3、设备管理

    设备的分配和驱动由操作系统负责,即设备管理的主要功能包括:缓冲区管理,设备分配,设备驱动和设备无关性

    3.1 缓冲区管理

    缓冲区管理的目的是解决CPU和外设速度不匹配的矛盾,使它们充分并行工作,提高各自的利用率。

    3.2 设备分配

    根据用户的IO请求和相应的分配策略,为该用户分配外部设备、通道和控制器等

    3.3 设备驱动

    实现CPU与通道和外设之间的通信,由CPU向通道发出IO指令,后者驱动相应设备进行IO操作。当IO任务完成后,通道向CPU发出中断信号,由相应的中断处理程序进行处理

    3.4 设备无关性

    设备无关性又称设备独立性,即用户编写的程序与实际使用的物理设备无关,由操作系统把用户程序中使用的逻辑设备映射到物理设备。

    4、文件管理

    文件管理功能包括:文件存储空间的管理,文件操作的一般管理,目录管理,文件的读写管理和存取控制

    4.1 文件存储空间的管理

    系统文件和用户文件都要放在磁盘上,为此,需要由文件系统对所有文件以及文件的存储空间进行统一管理:为新文件分配必要的外存空间,回收释放的文件空间,提高外存的利用率。

    4.2 文件操作的一般管理

    文件操作的一般管理包括:文件的创建、删除、打开、关闭等

    4.3 目录管理

    目录管理包括目录文件的组织、实现用户对文件的“按名存取”,以及目录的快速查询和文件共享等

    4.4 文件的读写管理与存取控制

    根据用户的请求,从外存中读取数据或者将数据写入外存中。为了保证文件信息的安全性,防止未授权用户的存取或破坏,对各个文件(包括目录)进行存取控制

    5、用户接口服务

    用户上机操作时直接使用到操作系统提供的用户接口,操作系统对外提供多种服务,使得用户可以方便、有效地使用计算机硬件和运行自己的程序,使得软件开发变的容易、高效。现代操作系统提供三种用户接口:程序接口,命令行接口以及图形用户接口。

    5.1 程序接口

    也称系统调用接口,系统调用是操作系统内核与用户程序、应用程序之间的接口,它位于操作系统核心层的最外层。所有内核之外的程序都必须经由系统调用才能获得操作系统的服务。系统调用只能在程序中使用,不能直接作为命令在终端上输入和执行。由于系统调用能够改变处理机的执行状态,从用户态变为核心态,直接进入内核执行,所以执行效率很高。用户在自己程序中使用系统调用,从而获取系统提供的众多基层服务,

    5.2 命令行接口

    在提示符之后用户从键盘上输入命令,命令解释程序接收并解释这些命令,然后把它们传递给操作系统内部程序,执行相应功能。命令行接口不属于操作系统内核,相应的程序是在用户空间中运行的。

    5.3 图形用户接口

    用户利用鼠标,窗口,菜单,图标等图形用户界面工具,可以直观、方便,有效地使用系统服务和各种应用程序及实用工具。图形用户接口也不属于操作系统内核,相应的程序是在用户空间中运行的。

    三、操作系统的类型

    操作系统基本类型可分为5种:批处理系统,分时系统、实时系统、网络系统和分布式系统

    1、批处理系统

    早期的计算机操作系统大多数是批处理系统,在这种系统中,把用户的计算任务按“作业”进行管理。其工作流程一般如下:

    • 操作员把用户提交的作业卡片放到读卡器上,通过SPOOLing输入程序及时把这些作业送入直接存取的后援存储器(如磁盘)
    • 作业调度程序根据系统的当时情况和各后背作业特点,按一定的调度原则,选择一个或几个搭配得当的作业装入内存准备运行
    • 内存中多个作业交替执行,当某个作业完成时,系统把该作业的计算结果交给SPOOLing输出程序准备输出,并回收该作业的全部资源

    上述步骤将一直重复下去,使得各作业一个接一个地流入系统,直到没有作业。各个作业经过处理后又顺序地退出系统,形成一个源源不断的作业流。

    可以看出批处理系统具有两个特点---“多道”与“成批”

    • “多道”是指内存中存放多个作业,并且在外存上存放大量的后备作业。因此,这种系统的调用原则相当灵活,易于选择一批搭配合理的作业调入内存运行,从而充分发挥系统资源的利用率,增加系统的吞吐量。
    • “成批”是指系统运行过程中不允许用户和机器之间发生交互作用,也就是说,用户一旦把作业提交系统,他就不能直接干预该作业的运行了。

    批操作系统优点:

    • 系统资源利用率高
    • 系统吞吐量大

    批操作系统缺点:

    • 用户作业的等待时间长
    • 没有交互能力

    2、分时系统

    针对批操作系统的缺点,人们提出了分时系统,它让用户通过终端设备联机使用计算机。

    在单CPU系统中无法真正的实现多个程序的并行(两个或两个以上事件或活动在同时刻发生就称作并行),为了在多道程序环境中提高资源利用率,往往采用多道程序分时共享硬件和软件资源的技术,分时就是对时间的共享。在分时系统中,分时主要是指若干程序对CPU时间的共享。分享的时间单位称为时间片,它往往很短,如几十毫秒。这种分时的实现,需要有中断机构和时钟系统的支持。利用时钟系统把CPU时间分成一个一个的时间片,操作系统轮流把每个时间片分给各个程序,每道程序一次只可以运行一个时间片。当时间片计数到时后,产生时间中断,控制转向操作系统,操作系统选择另一道程序并分给它时间片,让其投入运行。到达给定时间,再发中断,重新选程序(或作业)运行,如此反复。

    两个或两个以上的程序在一段时间内,在同一CPU上执行就称作并发,在分时系统中利用并发机制实现了一个物理CPU(也可以是多个物理CPU)在若干道程序之间的多路复用。

    分时系统的基本特征:

    • 同时性,若干用户可以同时上机使用计算机系统
    • 交互性,用户能够方便地与系统进行人机交互
    • 独立性,系统中各用户可以批次独立地操作,互不干扰或破坏
    • 及时性,用户能在很短时间内得到系统的响应

    分时系统的优点:

    • 为用户提供友好的接口,即用户能在较短时间内得到响应,能以对话方式完成对程序的编写,调试,修改,运行和得到运算结果
    • 促进了计算机的普及应用,一个分时系统可带多台终端,同时为多个远近用户使用
    • 便于资源共享和交换信息,为软件开发和工程设计提供良好的环境

    常用的通用操作系统是分时系统与批处理系统的结合,其原则是:分时优先,批处理在后。“前台”响应需频繁交互的作业,“后台”处理时间性不强的作业。

    3、实时系统

    在计算机的很多应用领域内,要求对实时采样数据进行及时处理,做出相应的反应,如果超出限定的时间就可能丢失信息或影响下一批信息的处理。实时系统是指计算机能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有设备和任务协调一致工作的操作系统。实时系统的目标是:对外部请求在严格时间范围内做出反应,并有高可靠性和完整性。其主要特点是:资源的分配和调度首先要考虑实时性,然后才是效率。此外实时系统还应该具有较强的容错能力。实时系统现在有三种典型的应用形式:过程控制系统、信息查询系统和事务处理系统。

    实时系统与分时系统的差别:

    • 交互性:分时系统提供一种随时可提供多个用户使用、通用性很强的计算机系统,用户与系统之间具有较强的交互作业或会话能力,而实时系统的交互能力相对来说比较差
    • 实时性:分时系统响应时间的要求是人能够接受的等待时间,数量级通常是秒;而实时系统对响应时间要求较高,数量级可达到毫秒,甚至微秒。
    • 可靠性:虽然分时系统也要求系统可靠,但是实时系统对可靠性要求更高

    4、网络操作系统

    由于单台计算机资源毕竟有限,为了实现异地计算机之间的数据通信和资源共享,可将分布在各处的计算机和终端设备通过数据通信系统联结在一起,构成一个系统,这就是计算机网络,计算机网络需要两大支柱----计算机技术和通信技术。

    计算机网络的特征:

    • 分布性:网上节点机可以位于不同地点,各自执行自己的任务
    • 自治性:网上的每台计算机都有自己的内存,IO设备和操作系统,能够独立地完成自己承担的任务
    • 互连性:利用互连网络把不同地点的资源(包括硬件资源和软件资源)在物理上和逻辑上连接在一起,在统一的网络操作系统控制下,实现网络通信和资源共享
    • 可见性:计算机网络中的资源对用户来说是可见的,用户任务通常在本地机器上运行,利用网络操作系统提供的服务可共享其他主机上的资源

    网络操作系统一般建立在各个主机的本地操作系统基础之上,其功能是实现网络通信,资源共享和保护,以及提供网络服务和网络接口等。在网络操作系统的作用下,对用户屏蔽了各个主机对同样资源所具有的不同存取方法。

    网络操作系统的特性:

    • 接口一致性:网络操作系统要为共享资源提供一个一致的接口,而不管其内部采取什么方法予以实现。
    • 资源透明性:网络操作系统能够实现对资源的最优选择,它了解整个网络系统中共享资源的状态和使用情况,能够根据用户的要求自动做出选择。
    • 操作可靠性:网络操作系统利用硬件和软件资源在物理上分散的优点,实现可靠的操作。
    • 处理自主性:网络操作系统中的各个主机都具有独立的处理能力,在各主机上的资源被认为是局部所有的
    • 执行并行性:计算机网络中任何一个工作站或通信计算机都称作一个节点,网络操作系统不仅实现本机上多道程序的并发执行,而且实现网络系统各节点机上进程执行的真正并行。

    5、分布式操作系统

    分布式操作系统把大量的计算机组织在一起,彼此通过高速网络进行连接。分布式系统有效地解决了地域分布很广的若干计算机系统间的资源共享,并行工作,信息传输和数据保护等问题。

    分布式操作系统特点:

    • 灵活性:根据用户需求和使用情况,方便地对系统进行修改或者扩充
    • 可靠性:如果系统中某台机器不能工作了,就有另外的机器做它的工作。可靠性包括可用性,安全性和容错性
    • 高性能:分布式具有执行速度快,响应及时,资源利用高,而且网络通信能力强
    • 可扩充性:分布式系统可以根据使用环境和应用的需要,方便地扩充或缩减其规模

    分布式系统是网络操作系统的更高形式,它保持了网络操作系统的全部功能,而且还具有可靠性和高性能。网络操作系统和分布式操作系统虽然都属于管理分布在不同地理位置的计算机,但最大的差别是:网络操作系统知道计算机确切的地址,而分布式系统则不知道计算机的确切地址;分布式操作系统负责整个资源的分配,能很好地隐藏系统内部的实现细节,如对象的物理位置,这些对用户都是透明的。

    四、计算机硬件结构

    从硬件的角度看,现代通用计算机系统是由CPU、内存和若干IO设备组成,它们经由系统总线链接在一起,实现彼此通信。从功能上讲,是由五大功能部件组成,即运算器、控制器、存储器、输入设备和输出设备。这五大功能部件相互配合,协同工作。其中运算器和控制器集成在一片或几片大规模或超大规模集成电路中,称为中央处理器(CPU)。

    1、处理器

    CPU是计算机的“大脑”,它从内存中提取指令并执行它们。CPU工作的基本周期是:提取指令,译码分析,执行指令。对后面的的指令按类似步骤进行处理。CPU内部包含若干寄存器,其中,一类是通用寄存器,用来存放关键变量和中间结果。另一类是专用寄存器,如程序计数器(PC),栈指针寄存器和程序状态字(PSW)。同时一般操作系统都提供核心态与用户态两种处理机执行状态。其目的是为了保护操作系统程序(特别是内核部分),防止受到用户程序的损害。当执行操作系统程序时,处理机处于核心态。这时它具有较高特权,可以执行所有指令,包括普通用户程序中不能使用的特权指令,从而能对所有寄存器和内存进行访问,以及启动IO操作等。而用户程序是在用户态下执行的,它的的权限较低,只能执行指令集中非特权指令。

    2、存储器

    在任何计算机中,存储器都是最主要的组成部分之一。按照速度、容量和成本划分,存储器系统构成一个层次结构,如下图所示:

     

    • 顶层是CPU内部寄存器,其速度与CPU一样快,所以存取它们没有延迟。但是它的成本高,容量小,通常小于1KB。典型存取时间1ns
    • 下面一层是高速缓存,它们大多由硬件控制。Cache的速度很快,它们放在CPU内部或非常靠近CPU的地方。当程序需要读取具体信息时,Cache硬件先查看它是否在Cache中,如果在其中,就直接使用它;如果不在,就从内存中获取该信息,并把它放入Cache中,以备今后再次使用。但Cache成本很高,容量较小,一般小于4MB。典型存取时间2ns
    • 中间一层是内存或者称为主存,它是存储器系统的主力,也称作RAM(随机存取存储器)。CPU可以直接存取内存及寄存器和Cache中的信息,但是不能直接存取磁盘上的数据。因此,机器执行的指令及所用的数据必须预先存放在内存及Cache和寄存器中。然而内存中存放的信息是易丢失的,当机器电源被关闭后,内存中的信息就全部丢失了。
    • 再往下一层是磁盘,称作辅助存储器,它是对内存的扩展。磁盘上可以永久的保留数据,而且容量特别大,现在常用的磁盘容量为250GB~2TB。磁头是可以移动的,由于是机械装置,所以磁盘上数据的存取速度低于内存存取速度
    • 最下层是磁带,它记录的数据可以永久保存,而已还可以根据情况换磁带,故容量很大,但是由于它的存取速度很慢,所以不适宜进行随机存取,所以,磁带设备一般不能用做辅存,它的主要用途是作为文件系统的后备,存放一些不经常使用的信息或者用作系统间传送信息的介质。

     3、IO设备

    IO设备是人机交互的工具,它通常由控制器和设备本身两部分组成。控制器是IO设备的电子部分,它协调和控制一台或多台IO设备的操作,实现设备操作与整个系统操作的同步。设备控制器本身有一些缓冲区和一组专用寄存器,负责在外部设备和本地缓冲区之间移动数据。设备实际上隐藏在控制器的后面,因而,操作系统总是与控制器打交道,而不是与设备直接作用。由于设备的种类有很多,因而设备控制器的类别就很多,这就需要不同的软件来控制它们。这些向控制器发布命令并接收其回答信息的软件就是设备驱动程序。不同操作系统上的不同控制器分别对应不同的设备驱动程序,理论上讲,驱动程序可以在核心之外运行,但当前的系统都把它放在操作系统中,使其在核心方式下运行。

    4、总线

    按照总线上传送的信息所起的作用,系统总线基本上可以分为如下三部分:

    • 数据总线:用于传输计算机各部件之间数据的通道,其宽度随字节而定。32位结构的数据总线应是32根,64位结构的数据总线应为64根。数据总线是双向总线,即两个方向都可以传送数据。
    • 地址总线:从CPU送来地址的地址线,它可以是存储器的地址,也可以是IO设备控制器中控制寄存器或数据寄存器的地址。地址总线决定了CPU所能访问的最大内存空间的大小。
    • 控制总线:在该线上出现的信号是各模块之间传送数据时所需的全部控制信号

    本文内容参考孟庆昌老师所著《操作系统》一书

  • 相关阅读:
    kafka概述
    Spark网络通信分析
    spark序列化及MapOutputTracker解析
    spark checkpoint详解
    深入理解spark streaming
    spark Listener和metrics实现分析
    Spark SQL catalyst概述和SQL Parser的具体实现
    spark block读写流程分析
    java 分布式实践
    单元测试ppt
  • 原文地址:https://www.cnblogs.com/sachen/p/6792688.html
Copyright © 2011-2022 走看看