精华内容
下载资源
问答
  • 操作系统原理

    千次阅读 多人点赞 2019-09-07 19:20:17
    目录 目录 ... 操作系统原理1 —— 概念 >> 操作系统原理2——OS结构 >> 操作系统原理3——多道程序 >> 操作系统原理4——存储管理 >> 操作系统原理5——文件管理 ...

    原文链接:https://www.cnblogs.com/engine1984/category/155390.html

     

    目录

    目录

    >> 操作系统原理1 —— 概念

    >> 操作系统原理2 —— OS结构

    >> 操作系统原理3 —— 多道程序

    >> 操作系统原理4 —— 存储管理

    >> 操作系统原理5 —— 文件管理

    >> 操作系统原理6 —— 设备管理

    >> 操作系统原理7 —— 作业管理

    >> 操作系统原理8 —— CPU管理,进程

    >> 操作系统原理9 —— 死锁


    >> 操作系统原理1 —— 概念

    学习操作系统,首先我们应该知道操作系统的概念。本章主要讲述了以下几个问题。

    1. 什么是操作系统
    2. 操作系统的形成
    3. 操作系统的类型
    4. 操作系统的功能

    一、什么是操作系统

    在回答这个问题之前,我们先来了解一下什么是计算机系统。计算机系统是按用户的要求接收和存储信息、自动进行数据处理并输出结果信息的系统。

    计算机系统由硬件系统和软件系统组成。软硬件系统的组成部分就是计算机系统的资源,当不同的用户使用计算机时都要占用系统资源并且有不同的控制需求。

    操作系统就是计算机系统的一种系统软件,由它统一管理计算机系统的资源和控制程序的执行。

    操作系统的设计目标一是使计算机系统使用方便。二是使得计算机系统能高效地工作。

    二、操作系统的形成

    早期没有操作系统→原始汇编系统→管理程序→操作系统 可以看到,操作系统是随着计算机硬件的发展和应用需求的推动而形成的。

    三、操作系统的类型

    按照操作系统提供的服务,大致可以把操作系统分为以下几类:

    批处理操作系统、分时操作系统、实时操作系统、网络操作系统和分布式操作系统。其中批处理操作系统分时操作系统实时操作系统是基本的操作系统。

    1. 批处理操作系统按照用户预先规定好的步骤控制作业的执行,实现计算机操作的自动化。又可分为批处理单道系统和批处理多道系统。单道系统每次只有一个作业装入计算机系统的主存储器运行,多个作业可自动、顺序地被装入运行。批处理多道系统则允许多个作业同时装入主存储器,中央处理器轮流地执行各个作业,各个作业可以同时使用各自所需的外围设备,这样可以充分利用计算机系统的资源,缩短作业时间,提高系统的吞吐率。
    2. 分时操作系统,这种系统中,一个计算机系统与许多终端设备连接,分时系统支持多个终端用户,同时以交互方式使用计算机系统,为用户在测试、修改和控制程序执行方面提供了灵活性。分时系统的主要特点是同时性、独立性、及时性和交互性。
    3. 实时操作系统能使计算机系统接收到外部信号后及时进行处理,并在严格的规定时间内完成处理,且给出反馈信号。它是较少有人为干预的监督和控制系统。实时系统对可靠性和安全性要求极高,不强求系统资源的利用率。
    4. 网络操作系统可以把若干计算机联合起来,实现各台计算机之间的通信及网络中各种资源的共享,像我们现在使用的Windows ,UNIX和Linux等操作系统都是网络操作系统。
    5. 分布式操作系统的网络中各台计算机没有主次之分,在任意两台计算机间的可进行信息交换和资源共享。这一点上分布式操作系统和网络操作系统差别不大,他们的本质区别在于:分布式操作系统能使系统中若干计算机相互协作完成一个共同的任务。这使得各台计算机组成一个完整的,功能强大的计算机系统。

    四、操作系统的功能

    从资源管理的观点出发,操作系统功能可分为五大部分:处理器管理、存储管理、文件管理、设备管理和作业管理。


    >> 操作系统原理2 —— OS结构

    计算机系统是由硬件系统软件系统两部分组成,操作系统软件系统的一个组成部分,它是直接在硬件系统的基础上工作的,所以在研究操作系统之前,先必须对计算机系统的结构有一个基本的了解,本章就是讲述计算机系统结构的基本知识。

    本章的知识要点是:

    1. 计算机系统的层次结构
    2. 硬件环境
    3. 操作系统结构

    一、计算机系统的层次结构

    现代的通用计算机系统是由硬件和软件组成的一种层次式结构,最内层是硬件系统,最外层是使用计算机系统的人,人与硬件系统之间是软件系统。

    二、 硬件环境

    (1)CPU和外设的并行工作

    (2)I/O中断的作用

    (3)存储结构

    • 主存储器CPU能直接访问的唯一的存储空间,任何程序和数据都必须被装入主存储器之后,CPU才能对它进行操作。主存储器以“字节(BYTE)”为单位进行编址,若干字节组成一个“字(WORD)”。中央处理器可以按地址读出主存储器中的一个字节或一个字的内容。
    • 辅助存储器解决了主存储器容量不足,以及主存储器无法保存信息的问题。辅助存储器的优点是容量大且能永久保存信息,缺点是无法被中央处理器直接访问,必须通过主存储器才能访问。
    • 中央处理器存储信息的速度依次为:存取寄存器中的信息速度最快;通过系统总线存取主存储器的速度居中;使用辅助存储器的信息速度最慢。

        寄存器用来存放临时的工作信息和系统必须的控制信息。

        主存储器中存放操作系统的核心部分,以及当前需执行的程序和数据。

        辅助存储器是存放操作下的非核心部分和其他程序和数据。

        磁盘的信息可随机存取,磁带上的信息只能顺序存取。

    (4)硬件保护

        在资源共享的计算机系统中,只有有了必要的保护措施,才能使个别的错误不致影响其他程序。

    三、操作系统结构

    层次结构的最大特点是把整体问题局部化。把一个大型复杂的操作系统分解成若干单向依赖的层次,由各层的正确性来保证整个操作系统的正确性。

    采用层次结构,能使结构清晰,便于调试,有利于功能的增、删和修改,正确性容易得到保证,也提高了系统的可维护性和可移植性。

    操作系统的一种层次结构如下图所示:

    作业管理
    文件管理 
    设备管理
    存储管理
    处理器管理
    硬件

    >> 操作系统原理3 —— 多道程序

    通过本章学习应该掌握多道程序设计是如何提高计算机系统效率的;进程与程序有什么区别;进程的基本状态以及状态变化;进程队列及进程调度策略;中断的作用。

    一、 进程

    1. 进程的定义:把一个程序在一个数据集上的一次执行称为一个“进程”。
    2. 进程是由程序、数据集和进程控制块三部分组成。我们举一个例子,比如在有一个用户程序notepad.exe(记事本),当它存放在磁盘上时,就是一个程序,在windows操作系统下运行它时,就会在内存中建立一个记事本程序的进程,而我们在记事本中编辑的当前文字就是这个进程的数据集,操作系统会为当前的进程设置一个进程控制块。如果我们再打开一个记事本程序的窗口,就会建立另一个进程,此时运行的是同一个程序,但存在两个进程,第二个窗口中的编辑内容就是第二个进程的数据集
    3. 进程与程序 的区别及关系。程序是静止的,进程是动态的。进程包括程序和程序处理的对象(数据集),进程能得到程序处理的结果。进程和程序并非一一对应的,一个程序运行在不同的数据集上就构成了不同的进程。通常把进程分为“系统进程”和“用户进程”两大类,把完成操作系统功能的进程称为系统进程,而完成用户功能的进程则称为用户进程。

    二、 进程状态

    通常,根据进程执行过程中不同时刻的状态,可归纳为三种基本状态:

    1.  等待态 :等待某个事件的完成;
    2.  就绪态 :等待系统分配处理器以便运行;
    3.  运行态 :占有处理器正在运行。

    进程的状态变化:

    进程在执行中状态会不断地改变,每个进程在任何时刻总是处于上述三种基本状态的某一种基本状态,进程状态之间转换关系如下图所示:

    运行态→等待态 往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。

    等待态→就绪态 则是等待的条件已满足,只需分配到处理器后就能运行。

    运行态→就绪态 不是由于自身原因,而是由外界原因使运行状态的进程让出处理器,这时候就变成就绪态。例如时间片用完,或有更高优先级的进程来抢占处理器等。

    就绪态→运行态 系统按某种策略选中就绪队列中的一个进程占用处理器,此时就变成了运行态。

    三、 进程队列

           1、 进程队列的链接。

      在多道程序设计的系统中往往会同时创建多个进程。在单处理器的情况下,每次只能让一个进程运行,其他的进程处于就绪状态或等待状态。为了便于管理,经常把处于相同状态的进程链接在一起,称“进程队列”,由于进程控制块能标志进程的存在和动态刻画进程的特性,因此,进程队列可以用进程控制块的连接来形成。链接的方式有两种:单向链接和双向链接。

           2、 进程基本队列

      就绪队列 :由若干就绪进程按一定次序链接起来的队列。

      等待队列 :把等待资源或等待某些事件的进程排列的队列。

           3、进程的入队和出队。

      出队和入队 :当发生的某个事件使一个进程的状态发生变化时,这个进程就要退出所在的某个队列而排入到另一个队列中去。

      出队 :一个进程从所在的队列退出的操作称为出队

      入队 :一个进程排入到一个指定的队列的操作称为入队。

      系统中负责进程入队和出队的工作称为队列管理

           无论单向链接还是双向链接,解决入,出队问题,都是首先找到该队列的队首指针,沿链找出要入队的进程以及它要插入的位置,或找出要出队的进程,然后修改本进程指针(入队情况)和相邻进程的有关指针值即可。

    四、 中断优先级和中断屏蔽

           1、 中断优先级是硬件设计时确定的。中断装置按预定的顺序来响应同时出现的中断事件,这个预定的顺序称为“中断优先级”。中断优先级是按中断事件的重要性和紧迫程度来确定的 ,是由硬件设计时固定下来的。一般情况下,优先级的高低顺序依次为: 硬件故障中断自愿中断 程序性中断 外部中断 和 输入输出中断 

           2、中断的嵌套处理

           3、中断屏蔽的作用。中断优先级只是规定了中断装置响应同时出现的中断的次序,当中断装置响应了某个中断后中断处理程序在进行处理时,中断装置也可能去响应另一个中断事件。因此会出现优先级低的中断事件的处理打断优先级高的中断事件的处理,使得中断事件的处理顺序与响应顺序不一致,而且会形成多重嵌套处理,使多现场保护、程序返回等工作变的复杂。

    中断屏蔽技术就是为了解决上述问题而提出的在一个中断处理没有结束之前不响应其他中断事件,或者只响应比当前级别高的中断事件。于是,当中断装置检查到有中断事件后,便去查看PSW中中断屏蔽标志,如果没有屏蔽就响应该中断;否则,暂时不响应该中断,待屏蔽标志消除后再响应。自愿中断是不能屏蔽的。


    >> 操作系统原理4 —— 存储管理

    本章考核知识点:1、重定位 2、固定分区存储管理 3、可变分区存储管理 4、页式存储管理 5、段式存储管理 6、虚拟存储器

    操作系统的存储管理如同一个大地主,管着一个大庄园,当有农户需要租用田地时,地主就给分配一块地让他种(用户区分配)。等到地里长出了果实,结果出来后,地主还得来收回这块地(去配)。

    为了管好这片田地,地主还要管好庄园的门,凡是要进去种地的,都得由地主根据他的需要让他到位置确定实际的田地上去干活。(把逻辑地址转换成物理地址)

    庄园里还有一些大家共同可以使用的地方,比如地主的花园,工具房等,大家可以进去,也可以使用,但是不许改变任何现有的东东,还有,每个农户只能在自己的地里刨食吃,如果有人胆敢到别人地里或地主的花园里摘花偷食,可要当心他们养的狼狗跳出来哦。(共享和保护)

    当然,再大的地也是不够多的,地主为了多赚些钱,当所有的地都租出去的时候,他想办法把有些种田人暂时不种的那块地里的东东连地皮一起挖出来放到仓库里先堆着。把地腾出来租给别人种(这一招可够绝的,不过地主说啦,这就是“虚拟存储”。)

    一、 页式存储管理

           1、如何分页和分块

      页式存储管理中有两个名词:“ 页 ”和“ 块 ”,其中的“块”是针对硬件来说的,就是把存储器分成若干相等大小的区,每个区就称为一个块。对应的,在程序中,逻辑地址进行“分页”,其大小和每个块相一致。

      事实上,页面的大小是由块的大小自然决定的。对于程序来说,其逻辑地址还是和原来一样采用连续的地址。只是 按照块的位数取其前面数位做为页号 .

      分配空间时,根据作业长度可以确定它的页面数,根据这个页面数在主存中分配相应的块数,只要是空闲块就可以放入,即使不是相邻的。并把分配情况记在“页表”中,根据页表可以找到相对应的页号与块号,就得出绝对地址了。

      2、采用页式管理,使主存空间充分利用,页不必为了得到连续空间而进行移动。 可以提高系统效率。

      3、页表的构造与作用

      每个被装入主存的作业都有一张 页表 ,指出该作业逻辑地址中的页号与所占用的主存块号之间的对应关系。页表的长度由作页拥有的页面数决定,行号对应为页号,行中记录的是主存中的块号。

      页表是硬件进行地址转换的依据,每执行一条指令时按逻辑地址中的页号查找页表并转换成绝对地址。

      在多道程序设计系统中,进入主存的每个作业都有一张页表,由一个硬件“页表控制寄存器”来记录每个作业的页表所在位置和长度以便作业转换时同时转换页表。

      4、快表的构造与作用

      快表 就是页表的一部分克隆,每行中有页号及其对应的块号,整个快表存放在一个小容量的高速缓存中,访问时快表和内存同时进行查找,因为快表速度很快,而常用的页都登记在快表中,因此可以大大加快执行速度。

      5、采用页式管理的地址转换过程

      (为什么不直接用块分配表来记录而要用位示图呢,因为主存块很多,这样可以节省空间,提高效率。位示图就是用一个位(0或1)来表示一个块的使用状态,一个字32位,可以表示32块。按顺序排列,只需一小段内存就可以记录主存中大量的块状态)

      6、利用位示图实现页式存储空间的分配和回收

      页式存储管理把主存空间分成大小固定的许多块,在装业作业时,如何知道主存中哪些块已使用,哪些还未用,可以用位示图来表示。

      块号=字号×字长+位号

      字号=[i/字长](即块号i除以字长取整)

      位号=i mod 字长(即块号i除以字长取余)。


    >> 操作系统原理5 —— 文件管理

    文件和文件名 :在计算机系统中,把逻辑上具有完整意义的信息集合称为“文件”,每个文件都要用一个名字作标识,称为“文件名”。

    用户请求使用文件的操作步骤

      1)读文件:打开文件→读文件→关闭文件

      2)写文件:建立文件→写文件→关闭文件

      3)删除文件:关闭文件→删除文件


    >> 操作系统原理6 —— 设备管理

    要求了解设备管理与文件管理的合作,文件管理实现文件存取的准备工作,而文件的物理存取由设备管理实现。理解怎样实现独占设备的分配和磁盘的驱动调度;怎样实现虚拟设备。

    一、 独占设备和共享设备

    独占设备好比是你家的抽水马桶,当你坐上去的时候,大家就是想用也得等你完事了站起来才可以用上。

    共享设备呢,就像是我家的水龙头,我在洗手的时候,可以把手移开让我妈来打盆水。然后我又继续洗手。

      1、 独占设备 是指每次只能供一个作业执行期间单独使用的设备。如输入机、磁带机、打印机等。

      2、 共享设备 是指允许几个作业执行期间可同时使用的设备。

      3、共享设备的“同时使用”的含义是指多个作业可以交替启动共享设备,当一个用业正在使用设备时其他作业暂不能使用,即每一时刻仍只有一个作业占用,但当一个作业正在使用设备时其他作业就可使用。


    >> 操作系统原理7 —— 作业管理

    理解计算机系统中把用户要求处理的一项工作称为一个作业,作业可分为批处理作业和交互式作业两大类;掌握操作系统是如何实现作业调度和控制作业执行的;理解作业高度与进程调度之间的关系以及各自的职责。

    一、 作业和作业步

           1、 作业 :我们把用户要求计算机系统处理的一个问题称为一个“作业”

           2、 作业步 :任何一个作业都要经过若干加工步骤才能得到结果,我们把作业的每一个加工步聚称为一个“作业步”。


    >> 操作系统原理8 —— CPU管理,进程

    本章考核知识点 :1、进程的顺序性与并发性 2、与时间有关的错误 3、相关临界区 4、进程的互斥 5、进程的同步 6、进程通信 7、线程的概念

    理解“进程”是操作系统中的基本执行单位,在多道程序设计的系统中往往同时有许多进程存在,它们要轮流占用处理器。这些交叉执行的并发进程相互之间可能是无关,也可能是相关的。当并发进程竞争共享资源时会出现与时间有关的错误,因此,应采用进程同步与互斥手段使其合理使用共享资源,以保证系统安全。当进程间必须通过信息交换进行协作时,可用进程通信的方式达到目的。

    一、 进程的顺序性与并发性

    有人说,在程序中不是有跳转语句和重复语句,怎么就是顺序执行?注意,这里是指进程在处理器中的执行,因为处理器每次只能执行一个操作,因此每条指令必须按顺序进入CPU执行,假使有一条指令是跳转的,那么执行本指令后,会取出跳转目的地址的指令进入CPU运行,这个顺序是程序规定的。所以对CPU而言,进程总是按顺序执行

    进程是一个程序在一个数据集合上的一次执行,同一个程序和同一个数据集的运行结果必然是相同的。这就是可再现性。

    同时执行并不是真的同时,因为任一时刻CPU中只能有一个进程运行。

           1、进程的顺序性 :任何进程在顺序的处理器上的执行是严格按照顺序进行的,这就是进程的顺序性。当一个进程独占处理器顺序执行时,具有两个特性: 一、封闭性 ;二、可再现性 。

      2、进程的同时执行 :在多道程序设计系统中,一个进程的工作没有全部完成之前,另一个进程就可以开始工作,它们的执行在时间上重迭的,我们把它们称为是“可同时执行的”。

      3、进程的并发性 :若系统中存在一组可同时执行的进程,则说该组进程具有并发性,并把可同时执行的进程称为“并发进程” 。

      4、并发进程间的关系:并发进程相互之间可能是无关的,也可能是交往的。如果一个进程的执行不影响其他进程的执行,且与其他进程的进展情况无关,即它们是各自独立的,则这些并发进程相互之间是无关的。如果一个进程的执行依赖其他进程的执行,则这些并发进程之间是有交往的。

    二、 与时间有关的错误

           1、并发进程的执行速度取决于自身和进程调度策略。一个进程运行时会被中断,且断点是不固定的,一个进程被中断后,哪个进程可以运行,被中断的进程什么时候占用处理器,是与进程调度策略有关的。因此进程的执行速度不能由自己决定。

           2、并发进程交替使用共享资源时会出现与时间有关的错误。 由于共享资源的原因,加上进程并发执行的随机性,一个进程对另一个进程的影响是不可预测的。造成不正确的因素与进程占用处理器的时间、执行的速度以及外界的影响有关。因此被称为与时间有关的错误。

    三、 相关临界区

           1、 临界区的定义:并发进程中与共享变量有关的程序段称为“临界区”

      2、什么是相关临界区 : 相关临界区是指并发进程中涉及到相同变量的那些程序段 

      3、对相关临界区的管理要求。

      1) 一次最多让一个 进程在临界区执行,当有进程在临界区时其他想进入临界区执行的进程必须等待。

      2)任何一个进入临界区执行的进程必须在有限的时间内退出临界区,即任何一个进程都不应该无限地逗留在自己的临界区。

      3)不能强迫一个进程无限地等待进入它的临界区,即有进程退出时应让一个等待进入临界区的进程进入它的临界区。

    四、 进程的互斥

    1) 进程互斥的含义:进程的互斥是指当有若干进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用,其他要使用该资源的进程必须等待,直到占用资源者释放了该资源。

    PV操作是两个过程,由他们两个来控制一个信号S,假设S是红灯的个数。

    每个进程进入临界区前都要先执行P操作退出临界区执行V操作。用下面的比喻很容易理解:

           临界区门前有棵树(S)

      用来挂红灯

      进程想进CPU的门

      先得上树取盏灯(调用一次P操作)

      取下一个去敲门(S=S-1)

      如果树上没灯取(S≤0)

      树说欠你一盏灯(S为负时)

      没辙只好外边排队等( W ait (S))

      得灯进程续运行

      运行完了要出门(调用一次V操作)

      马上还回一盏灯(S=S+1)

      若有进程在催债(S≤0)

      放个进去事完成( Release (S))

    2) 实现进程互斥的工具——PV操作。

    PV操作是由两个操作,即P操作和V操作组成。P操作和V操作是两个在信号量上进行操作的过程。假定用S表示信号量则把这两个过程记作P(S)和V(S),它们的定义如下: 

    Procedue P(Var S: Semaphore);
    begin S:=S-1;
    if S<0 
    then W(S) 
    end;
    {P} 
    
    Procedue V(Var S: Semaphore);
    begin S:=S+1;
    if S<=0 
    then R(S) 
    end;
    {V}

    为了确保PV操作自身的正确执行,因此P(S)和V(S)操作中不可中断,这种 不可被中断的过程称为“原语 ”。

    3) 用PV操作管理相关临界区的一般形式

    一个信号量与一组涉及共享变量的相关临界区联系起来,信号量的初值定为“1”。

    任何一个进程要进入临界区前先调用P操作,执行临界区的操作后,退出临界区时调用V操作。

    由于信号量的初值为“1”,P操作起到了限制一次只有一个进程进入临界区的作用,其余进程欲进入临界区必须符合对临界区管理的第一个要求,即一次最多让一个进程在临界区执行。进程退出后执行V操作,若有进程在等待则释放一个进程,这样就达到了对临界区管理的第二个和第三个要求(即不能无限逗留也不能无限等待)。


    >> 操作系统原理9 —— 死锁

    本章考核知识点 :1、死锁的产生 2、死锁的防止 3、死锁的避免4、死锁的检测

    一、 死锁的产生

    话说狼GG和狼MM面对面走上一根独木桥。

    狼GG说:呵呵,小MM,我已经占领了这座桥的一半,你不如退出去让我先过去吧。

    狼MM说,哼哼,老兄,我也占了这座桥的一半,你咋不让给我?

    狼GG和狼MM互不相让,都在等对方先让步。结果两个都过不了河。等着猎人来处理后事了。

           1、什么叫死锁 : 若系统中存在一组进程(两个或多个进程),它们中的每一个进程都占用了某种资源而又都在等待其中另一个进程所占用的资源,这种等待永远不能结束,则说系统出现了“死锁”。或说这组进程处于“死锁”状态。

      2、引起死锁的因素:死锁的出现除了与资源的分配策略有关外,也与并发进程的执行速度有关,即操作系统对资源管理不得当或没有顾及进程并发执行时可能出现的情况,则就可能形成死锁。

    二、 死锁的防止

    我们把桥的一半看作一个资源的话,那么,当狼MM占用了其中一个资源后,狼GG就只好等待了。

           狼GG狼MM各自占有了一段资源又在等另外的资源,又不肯放弃自己占有的资源。

      他们又不能把对方踢下河去,把另一段资源抢过来自己用。

      只好互相等待了。

    这4个条件是必要条件而不是充分条件,意思是,只要发生死锁,那么这四个条件必然都成立。反之则不然,有时候即使四个条件都满足,那也不一定发生死锁。(从资源分配图中可以分析得到,即使形成循环等待资源,也不一定形成死锁。)

    1、系统出现死锁必然同时保持的四个必要条件:

      1)互斥使用资源

      2)占有并等待资源

      3)不可抢夺资源

      4)循环等待资源

    2、死锁的防止策略 :要防止死锁形成,只要采用的资源分配策略能使上述4个条件中有一个条件不成立就可以了。

           1)破坏互斥使用资源的条件经常是行不通的。因为资源本身特性就是互斥使用的

      2)要破坏“占有并等待条件”则可以采取两种办法: 静态分配 和 释放已占资源 .

      静态分配 也称为 预分配资源 ,要求每一个进程在开始执行前就申请它所需要的全部资源,仅当系统能满足进程的资源申请要求且把资源分配给进程后,该进程才能开始执行。

      释放已占资源 就是指进程申请资源时必须没有占用资源,如果已经占用了资源就要先归还所占的资源再申请。

      3)实现 可抢夺式分配 :如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足(已被其它进程占用)必须等待时,系统可以抢夺该进程已占有的资源。

      4)实现 按序分配 :把系统中所有资源排一个顺序,对每一个资源给一个确定的编号,规定任何一个进程申请两个以上的资源时,总是先申请编号小的资源,再申请编号大的资源。

    三、 死锁的避免

    死锁的避免不同于死锁的防止,死锁的防止是采用某种分配策略后,系统就不会产生死锁,这好比是你打过了某种预防针,再也不会得那种病。而死锁的避免是没有打预防针,但是通过其他办法,避免得病。因此有“安全状态”的说法,对应的,当然也有不安全状态。就像人都有得病的可能,不必任何病都打预防针。只要注意防病,仍然可以安全健康的生活。

           1、 安全状态 :如果操作系统能保证所有的进程在 有限的时间 内得到需要的 全部资源 ,则称系统处于“安全状态”。

      2、区分死锁的 避免 与死锁的 防止 :当采用了防止死锁的资源分配策略后,系统中就不会形成死锁。但是可以防止死锁的资源分配策略中,有的只适用于对某些资源的分配,有的会影响资源的使用效率。这时可用使用死锁的避免。

    死锁的避免是解决死锁的另一种方法,它不同于死锁的防止。在系统中不采用防止死锁的资源分配策略,而是估计到可能有死锁发生时避免死锁的发生。

      3、银行算法是怎样避免死锁的:

      银行家算法是这样的

      1)当一个用户对资金的最大的需求量不超过银行家现有的资金时就可以接纳该用户。

      2)用户可以分期贷款,但贷款的总数不能超过最大需求量。

      3)当银行家现有的资金不能满足用户的尚需贷款时,对用户的贷款可推迟支付,但总能使用户在有限的时间里得到贷款。

      4)当用户得到所需的全部资金后,一定能在有限的时间里归还所有资金。

      我们把操作系统看作是银行家,操作系统管理的资源相当于是银行家管理的资金,则银行家算法就是:

      1)当一个进程首次申请资源时,测试该进程对资源的最大的需求量,如果不超过系统现存资源时就可以按他的当前申请量为其分配资源。 否则推迟分配。

      2)进程执行中继续申请资源时,测试该进程占用资源和本次申请资源总数有没有超过最大需求量。超过就不分配,没超过则再测试现存资源是否满足进程还需要的最大资源量,满足则按当前申请量分配,否则也推迟分配。

    总之,银行家算法要保证分配资源时系统现存资源一定能满足至少一个进程所需的全部资源。这样就可以保证所有进程都能在有限时间内得到需要的全部资源。这就是安全状态。

    四、 死锁的检测

    就是既不打预防针,也不去避免得病,而是经常去体检,如果发现有病了就治疗。这是一种事后解决的办法,也算是解决死锁问题的一条途径。但这毕竟要付出较大代价。

      1、什么是 死锁的检测 :对资源的申请和分配不加限制,只要有剩余的资源就可把资源分配给申请者。这样可能会出现死锁,系统定时运行一个“死锁检测程序”,如果检测到死锁发生,则必须先解除死锁再继续工作。

      2、怎样实现死锁的检测:1、每个资源当用中只有一个资源 2、资源类中含有若干个资源。

      3、 死锁的解除 :一般采用两种方式来解除死锁,一种是终止一个或几个进程的执行以破坏循环等待;另一种是从涉及死锁的进程中抢夺资源。

      检测死锁和解除死锁都要付出很大代价。所以用死锁检测的方法解决死锁问题只适用于 不经常发生死锁 的系统中。

    展开全文
  • 现代操作系统原理

    热门讨论 2012-04-18 15:54:11
    现代操作系统原理
  • 操作系统原理.pdf

    热门讨论 2011-08-11 16:03:42
    本书用通俗的语言、生动的图片、丰富的例题介绍了操作系统经典的设计原理和最新的发展成果,还结合主流操作系统平台,组织了多个丰富而有趣的实验内容,安排了大量各种难度的练习题,并附有参考答案,以便于自学、选...
  • 操作系统的童鞋们,操作系统课后习题一定要做呀,这是我做的课后习题,仅作参考,可以在评论中指正错误~~
  • 操作系统原理总结

    万次阅读 多人点赞 2018-07-10 23:15:47
    转载:https://blog.csdn.net/yanglingwell/article/details/53745758 操作系统原理总结made by @杨领well (yanglingwell@sina.com)一、基础知识点1. 操作系统的资源管理技术资源管理解决物理资源数量不足和合理...

    转载:https://blog.csdn.net/yanglingwell/article/details/53745758 


    操作系统原理总结

    made by @杨领well (yanglingwell@sina.com)

    一、基础知识点

    1. 操作系统的资源管理技术

    资源管理解决物理资源数量不足合理分配资源这两个问题。
    PM2VM
    操作系统虚拟机为用户提供了一种简单、清晰、易用、高效的计算机模型。虚拟机的每种资源都是物力资源通过复用虚拟抽象而得到的产物。
    虚拟机提供进程运行的逻辑计算环境。从概念上来说,一个进程运行在一台虚拟机上,可以认为一个进程就是一台虚拟机,一台虚拟机就是一个进程。

    • 复用空分复用共享时分复用共享
      a. 空分复用共享(space-multiplexed sharing): 将资源从“空间”上分割成更小的单位供不同进程使用。在计算机系统中,内存和外存(磁盘)等是空分复用共享的。
      b. 时分复用共享(time-multiplexed sharing): 将资源从“时间”上分割成更小的单位供不同进程使用。在计算机系统中,处理器和磁盘机等是时分复用共享的。

    • 虚拟:对资源进行转化、模拟或整合,把一个物理资源转变成多个逻辑上的对应物,也可以把多个物理资源变成单个逻辑上的对应物,即创建无须共享独占资源的假象,或创建易用且多于实际物理资源的虚拟资源假象,以达到多用户共享一套计算机物理资源的目的。虚拟技术可用于外部设备(外部设备同时联机操作(SPOOLing)),存储资源(虚拟内存)和文件系统(虚拟文件系统(Virtual File System, VFS))中。

      复用和虚拟相比较,复用所分割的是实际存在的物理资源,而虚拟则实现假想的同类资源。虚拟技术解决某类物理资源不足的问题,提供易用的虚拟资源和更好的运行环境。

    • 抽象:通过创建软件来屏蔽硬件资源的物理特性和实现细节,简化对硬件资源的操作、控制和使用。

      复用和虚拟的主要目标是解决物理资源数量不足的问题,抽象则用于处理系统复杂性,重点解决资源易用性。

    2. 系统调用

    • 系统调用: 为给应用程序的运行提供良好环境,内核提供了一系列具有预定功能的服务例程,通过一组称为系统调用(System Call)的接口呈现给用户,系统调用把应用程序的请求传送至内核,调用相应的服务例程完成所需处理,将处理结果返回给应用程序。
      OS_System_Call

      注:系统调用的编号称为功能号

    • 系统调用的执行过程: 当CPU执行程序中编写的由访管指令(supervisor, 也称自陷指令(trap)或中断指令(interrupt), 指引起处理器中断的机器指令)实现的系统调用时会产生异常信号,通过陷阱机制(也称异常处理机制,当异常或中断发生时,处理器捕捉到一个执行线程,并且将控制权转移到操作系统中某一个固定地址的机制),处理器的状态由用户态(user mode, 又称目态或普通态)转变为核心态(kerbel mode, 又称管态或内核态),进入操作系统并执行相应服务例程,以获得操作系统服务。当系统调用执行完毕时,处理器再次切换状态,控制返回至发出系统调用的程序。

    • 系统调用是应用程序获得操作系统服务的唯一途径

    系统调用的作用
    1. 内核可以基于权限和规则对资源访问进行裁决,保证系统的安全性。
    2. 系统调用对资源进行抽象,提供一致性接口,避免用户在使用资源时发生错误,且编程效率大大提高。

    系统调用与函数调用的区别
    1. 调用形式和实现方式不同。功能号 VS 地址; 用户态转换到内核态 VS 用户态。
    2. 被调用代码的位置不同。 动态调用 + 操作系统 VS 静态调用 + 用户级程序。
    3. 提供方式不同。 操作系统 VS 编程语言。

    3. 操作系统内核

    • 内核: 是一组程序模块,作为可信软件来提供支持进程并发执行的基本功能和基本操作,通常驻留在内核空间,运行于内核态,具有直接访问硬件设备和所有内存空间的权限,是仅有的能够执行特权指令的程序。

    • 内核的功能:
      a. 中断处理。中断处理是内核中最基本的功能,也是操作系统赖以活动的基础。
      b. 时钟管理。时钟管理是内核的基本功能。
      c. 短程调度。短程调度的职责是分配处理器,按照一定的策略管理处理器的转让,以及完成保护和恢复现场工作。
      d. 原语管理。 原语是内核中实现特定功能的不可中断过程。

    内核是操作系统对裸机的第一次改造,内核和裸机组成了第一层虚拟机,进程在虚拟机上运行。


    4. 处理器状态: 内核态和用户态

    • 仅在内核态下才能使用的指令称为特权指令,执行这些指令不仅影响运行程序自身,而且还会干扰其他程序及操作系统。 非特权指令在内核态和和用户态下都能工作。

    现代计算机为处理器建立硬件标志位,称处理器状态位,通常是程序状态字(Program Status Word, PSW)中的一位,来将处理器的状态设置为内核态或用户态。

    • 用户态向内核态转换的情况:
      a. 程序请求操作系统服务, 执行系统调用。
      b. 在程序运行时产生中断事件(如I/O操作完成),运行程序被中断,转向中断处理程序处理。
      c. 在程序运行时产生异常事件(如在目态下执行特权指令),运行程序被打断,转向异常处理程序工作。

    以上三种情况都是通过中断机制发生,可以说中断和异常是用户态到内核态转换的仅有途径。

    • 用户栈和核心栈
      a. 用户栈是用户进程空间中的一块区域。用于保存应用程序的子程序(函数)间相互调用的参数,返回值,返回点和子程序的局部变量。
      b. 核心栈是内存中操作系统空间的一块区域。用于保存中断现场和保存操作系统程序(函数)间相互调用的参数,返回值,返回点和程序的局部变量。

    5. 中断(Interupt)

    • 中断:程序执行过程中遇到急需处理的事件时,暂时终止现行程序在CPU上的运行,转而执行相应的事件处理程序,待处理完成后再返回断点或调度其他程序的执行过程。

    • 中断的分类:
      a. 外中断(又称中断或异步中断): 来自处理器之外的中断信号,如,时钟中断、键盘中断等。外中断可分为可屏蔽中断和非可屏蔽中断。
      b. 内中断(又称异常或同步中断),来自处理器内部的中断信号,如,访管中断,硬件故障中断,程序性中断等。内中断不能被屏蔽

    • 中断和异常的响应: 发现中断源 → 保护现场 → 转向中断/异常事件处理程序执行 → 恢复现场

    6. 进程

    • 进程:具有独立功能的程序在某个数据集合上的一次运行活动,也是操作系统进行资源分配和保护的基本单位。
      a. 从原理角度看,进程是支持程序执行的一种系统机制,它对处理器上运行程序的活动进行抽象。
      b. 从实现角度看,进程是一种数据结构,用来准确地刻画运行程序的状态和系统动态变化状况。

    • 进程状态的七态模型

      OS_SEVEN

      a. 新建态(new): 进程被创建,尚未进入就绪队列。
      b. 就绪态(ready): 进程具备运行条件,等待系统分配处理器。
      c. 挂起就绪态(ready suspend):进程具备运行条件,但目前在外存中。
      d. 运行态(running): 进程占有处理器正在运行。
      e. 终止态(exit): 进程达到正常结束点或被其他原因所终止,下一步将被撤销。
      f. 等待态(wait): 又称阻塞态或休眠态。进程正在等待某个事件完成,目前不具备运行条件。
      g. 挂起等待态(blocked suspend): 进程正在等待某个事件完成,并且在外存中。

    • 程序和数据刻画进程的静态特征,称为进程控制块的一种数据结构刻画进程的动态特征。进程映像(process image)包括进程控制块、进程程序块、进程核心块、进程数据块等要素。

    • 进程控制块(Process Control Block, PCB):进程存在的唯一标识,操作系统掌握进程的唯一资料结构和管理进程的主要依据。包括标识信息、现场信息和控制信息等信息。

    • 进程队列(process queue):处于同一状态的所有进程的PCB链接在一起的数据结构。 有两种队列组织方式:链接方式和索引方式。

    • 进程切换必定在内核态而非用户态发生。

    • 进程可以分为两部分,资源集合和线程集合。进程要支撑线程运行,为线程提供虚拟地址空间和各种资源。进程封装管理信息,线程封装执行信息。

      OS_MultiThread

    7. 处理器调度

    • 处理器调度层次:
      OS_Scheduling
      a. 高级调度: 又称作业调度、长程调度。从输入系统的一批作业(job, 用户提交给操作系统计算的一个独立任务)中按照预定的调度策略挑选若干作业进入内存,为其分配所需资源并创建对应作业的用户进程。
      b. 中级调度: 又称平衡调度,中程调度。根据内存资源情况决定内存所能容纳的进程数目,并完成外存和内存中进程对换工作。
      c. 低级调度:又称进程调度/线程调度,短程调度。根据某种原则决定就绪队列中那个进程/线程先获得处理器,并将处理器出让给它使用。

    • 低级调度算法:
      a. 先来先服务(First Come First Server, FCFS)算法
      b. 最短作业优先(Shortest Job First, SJF)算法
      c. 最短剩余时间优先(Shortest Remaining Time First, SRTF)算法: 假设当前某进程/线程正在运行,如果有新进程/线程移入就绪队列,若它所需的CPU运行时间比当前运行的进程/线程所需的剩余CPU时间还短,抢占式最短作业优先算法强行剥夺当前执行者的控制权,调度新进程/线程执行。
      d. 最高响应比优先(Highest Response Ratio First, HRRF)算法:非剥夺式算法。其中,响应比 = (作业已等待时间 + 作业处理时间) / 作业处理时间。
      e. 优先级调度算法:优先级高的选择进程/线程优先选择。
      f. 轮转调度(Round-Robin, RR)算法: 也称时间片调度。就绪队列的进程轮流运行一个时间片。
      g. 多级反馈队列(Multi-Level Feedback Queue, MLFQ)算法

      衡量调度算法的性能指标:
      a. 资源利用率: CPU利用率 = CPU有效工作时间/(CPU有效工作时间 + CPU空闲等待时间)
      b. 吞吐率: 单位时间内CPU处理作业的个数。
      c. 公平性: 确保每个进程都能获得合理的CPU份额和其他资源份额,不会出现饥饿现象。
      d. 响应时间: 从交互式进程提交一个请求(命令)直到获得响应之间的时间间隔。
      e. 周转时间: 批处理用户从向系统提交作业开始到作业完成为止的时间间隔。
      平均周转时间:T = (ni=1ti∑i=1nti ) / n , 其中 titi 表示作业i的周转时间。
      平均带权作业周转时间: T = (ni=1wi∑i=1nwi) / n, 其中 wi=ti/tkwi=ti/tktiti 表示作业i的周转时间。 tktk 表示作业i的运行时间。

    8. 进程的交互

    • 进程互斥(Mutual Exclusion): 若干进程因相互抢夺独占型资源而产生的竞争制约关系。
    • 进程同步(Synchronization): 为完成共同任务的并发进程基于某个条件来协调其活动,因为需要在某些位置上排定执行的先后次序而等待、传递信息或消息所产生的协作制约关系。

      资源竞争会引发两个控制问题:
      a. 死锁: 一组进程因争夺资源陷入永远等待的状态。
      b. 饥饿: 一个可运行进程由于由于其他进程总是优先于它,而被调度程序无限期地拖延而不能被执行。

    9. 临界区管理

    • 并发进程中与共享变量有关的程序段称为临界区(Critical Section)。共享变量所代表的资源称为临界资源(Critical Resource),即一次仅能供一个进程使用的资源。

    • 临界区调度原则:
      a. 择一而入。 一次之多只有一个进程进入临界区内执行。
      b. 忙则要等。 如果已有进程在临界区中, 试图进入此临界区的其他进程应等待。
      c. 有限等待。 进入临界区内的进程应在有限时间内退出。

    • 临界区管理的软件算法:Peterson算法
      为每个进程设置标志,当标志值为 true 时表示该进程要求进入临界区,另外再设置一个指示器 turn 以指示可以由哪个进程进入临界区,当 turn = i 时则可由 Pi 进入临界区。

      /* Peterson 算法 */
      
      bool inside[2];
      inside[0] = false;
      inside[1] = false;
      enum { 0, 1 } turn;
      
      /* 进程0 */
      process P0(){
          inside[0] = true;               //请求...
          turn = 1;
          while(inside[1] && turn == 1) ; //等待...
      
          /*临界区 */
      
          inside[0] = false;              //归还...
      }
      
      /* 进程1 */
      process P1(){
          inside[1] = true;               //请求...
          turn = 0;
          while(inside[0] && turn == 0) ; //等待...
      
          /*临界区 */
      
          inside[1] = false;              //归还...
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28

      Peterson算法满足临界区管理的三个原则。

    • 临界区管理的硬件设施:
      a. 关中断。 在进程进入临界区时关中断,进程退出临界区时开中断。
      b. 测试并设置指令。 利用机器指令TS(Test and Set)实现临界区的上锁和开锁原语操作。
      c. 对换指令。 利用对换指令实现临界区的上锁和开锁原语操作。

    10. 信号量(samaphore)和PV操作

    PV操作都是原语操作, 不可中断。

    • 信号量和PV操作

      // 信号量
      typedef struct semaphore {
          int value;                 // 信号量值
          struct pcb* list;          // 指向“等待该信号量的进程队列”的指针
      };  
      
      // P操作
      void P(semaphore s){
          s.value--;                 // 信号量值减一
      
          // 如果信号量值小于0, 执行P操作的进程调用sleep(s.list)阻塞自己,
          // 被置成“等待信号量s”状态,并移入s信号量队列,转向进程调度程序。
          if(s.value < 0) sleep(s.list);
      }
      
      // V操作
      void V(semaphore s){
          s.value++;                 // 信号量值加一
      
          // 如果信号量小于等于0, 则调用wakeup(s.list)释放一个等待信号量s的进程,
          // 并转换成就绪态, 进程则继续执行。
          if(s.value <= 0) wakeup(s.list);
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23

      a. 若信号量值 s.value 为正值, 此值等于在封锁进程之前对信号量 s 可施行P操作的次数,即,s所代表的实际可用的资源数。
      b. 若信号量值 s.value 为负值, 其绝对值等于登记在 s 信号量队列中的等待进程的数目。
      c. 通常P操作意味着请求一个资源,V操作意味着释放一个资源。在一定条件下,P操作也可表示挂起进程的操作,V操作代表唤醒被挂起进程的操作。

    • 信号量实现互斥

      semaphore mutex;
      mutex = 1;
      
      //进程Pi, i = 12 ..., n
      process Pi(){
          P(mutex);
      
          /* 临界区 */
      
          V(mutex);
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

    11. 管程

    • 管程(monitor):代表共享资源的数据结构及并发进程在其上执行的一组构成就构成管程,管程被请求和释放资源的进程锁调用。

      OS_manitor

      a. 条件变量。 管程内的一种数据结构。只有在管程中才能被访问,进程可以在条件变量上等待或被唤醒。只能通过 wait()signal() 原语操作来控制。
      b. wait() 原语。 挂起调用进程并释放管程,直至另一个进程在条件变量上执行 signal()
      c. signal() 原语。如果有其他的进程因对条件变量执行 wait() 而被挂起,便释放之。 如果没有进程在等待,那么相当于空操作,信号不被保存。

    12. 死锁

    • 死锁的主要解决方法: 死锁防止、死锁避免、死锁检测和恢复。

    • 死锁产生的必要条件:
      a. 互斥条件。 临界资源是独占资源,进程应互斥且排他地使用这些资源。
      b. 占有和等待条件。 进程在请求资源得不到满足而等待时,不释放已占有的资源。
      c. 不剥夺条件。已获资源只能由进程资源释放,不允许被其他程序剥夺。
      d. 循环等待条件。 存在循环等待链,其中每个进程都在等待下一个进程所持有的资源。

      死锁的防止就是去破坏死锁产生的必要条件。 如,使资源可同时使用(破坏互斥条件)、静态分配资源(破坏占有和等待条件)、剥夺调度(破坏不剥夺条件)、层次分配策略(循环等待条件)等。

    • 死锁避免: 银行家算法 (额…自己百度去吧。 = =!)

    • 死锁检测和恢复: 进程-资源分配图(额…还是去百度吧。)
      a. 如果进程-资源分配图中无环路,此时系统没有死锁。
      b. 如果进程-资源分配图中有环路,且每个资源类中只有一个资源,则系统发生死锁。
      c. 如果进程-资源分配图中有环路,且所涉及的资源类有多个资源,则不一定会发生死锁。

    13. 可变分区存储管理

    • 可变分区存储分配算法:
      a. 最先适应分配算法。从未分配区的开始位置开始扫描,在找到的第一个能满足长度要求的空闲区上分配存储空间。
      b. 下次适应分配算法。从未分配区上次扫描结束处开始顺序查找,在找到的第一个能满足长度要求的空闲区上分配存储空间。
      c. 最优适应分配算法。扫描整个未分配区,选择能满足用户进程要求的最小分区分配存储空间。
      d. 最坏适应分配算法。扫描整个未分配区,选择能满足用户进程要求的最大分区分配存储空间。
      e. 快速适应分配算法。为经常用到的长度的空闲区设立单独的空闲区链表。

    14. 分页存储管理

    • 基本概念:
      a. 页面进程逻辑地址空间分成大小相等的区,每个区称为页面或页。(@杨领well注: 页面的本质是逻辑地址空间)
      b. 页框(kuàng, 0.0)。 又称页帧。内存物理地址空间分成大小相等的区,其大小和页面大小相等,每个区就是一个页框。(@杨领well注: 页框的本质是物理地址空间)
      c. 逻辑地址。分页存储器的逻辑地址由页号和页内偏移两部分组成。

      OS_PageOffset

      d. 内存页框表。页框表的表项给出物理块使用情况:0为空闲,1为占用。
      e. 页表。页表是操作系统为进程建立的,是程序页面和内存页框的对照表,页表的每一栏指明程序中的某一页面和分得的页框之间的关系。

    • 分页存储管理的地址转换

      OS_PageTable

    • 翻译快表:也称转换后援缓冲(Translation Look_aside Buffer, TLB)。用来存放进程最近访问的部分页表项。(@杨领well注: 翻译快表之于页表类似于Cache之于存储器)

    • 二级页表:把整个页表分割成许多小页表,每个称为页表页,每个页表页含有若干个页表表项。页表页允许分散对应不连续的页框。为了找到页表页,应建立地址索引,称为页目录表,其表项指出页表页起始地址。

    • 二级页表实现逻辑地址到物理地址转换的过程: 由硬件“页目录表基址寄存器”指出当前运行进程的页目录表的内存起始地址,加上“页目录位移”作为索引,可找到页表页在内存的起始地址,再以“页目录位移”作为索引,找到页表页在内存的起始位置,再以“页表页位移”作为索引,找到页表页的表项,此表项中包含一个页面对应的页框号,由页框号和页内偏移便可生成物理地址。

      OS_TwoLvPageTable

      @杨领well注: 类比于书的目录,找某一段内容的时候,先在目录上找到对应的章节,再在对应的章节下面找具体的知识点。比如,我要在《操作系统原理》中查“多级页表”。首先我知道它是在存储管理一章的,于是就找到了“第四章 存储管理”(类似于找到了页目录表)。 然后在第四章下面找“多级页表”(类似于在页目录表下面找具体的页表页)。最后找到“多级页表”对应的页码(类似于在页表页中找到其对应的页框)。最后查阅对应的章节页码(类似于读取对应页框的数据)。

    15. 分段存储管理

    OS_Segment

    分段和分页的比较:
    a. 分段是信息的逻辑单位,由源程序的逻辑结构及含义所决定,是用户可见的,段长由用户根据需要来确定,段起始地址可以从任何内存地址开始。引入的目的是满足用户模块化程序设计的需要
    b. 分页是信息的物理单位,与源程序的逻辑无关,是用户不可见的,页长由系统(硬件)决定,页面只能从页大小的整数倍地址开始。引入目的是实现离散分配并提高内存利用率

    16. 虚拟存储管理

    • 虚拟存储管理的基本思路:

      OS_VirtualMemory

      把磁盘空间当做内存的一部分,进程的程序和数据部分放在内存中,部分放在磁盘上。程序运行时,它执行的指令或访问的数据在哪里由存储管理负责判断,并针对情况采取响应的措施。

    • 请求分页虚存管理: 将进程信息副本存放在外存中,当它被调度投入运行时,程序和数据没有全部装进内存,仅装入当前使用页面,进程执行过程中访问到不在内存的页面时,产生缺页异常,再由系统自动调入。

    • 全局页面替换策略(页面替换算法的作用范围是整个系统,不考虑进程的属主)
      a. 最佳页面替换算法(Optimal Replacement, OPT)。 淘汰不再访问的页或者距现在最长时间后才访问的页。
      b. 先进先出页面替换算法(First in First Out Replacement, FIFO)。淘汰在内存中驻留时间最长的页。
      c. 最近最少使用页面替换算法(Least Recently Used Replacement, LRU)。 淘汰最近一段时间内最久未被使用的页面。
      d. 第二次机会页面替换算法(Second Chance Replacement, SCR)。 首先检查FIFO页面队列中的队首,这是最早进入内存的页面,如果其“引用位”为0,那么它最早进入且未被引用,此页被淘汰。如果其“引用位”为1,说明虽然它最早进内存,但最近仍在使用,于是将“引用位”清零,并把这个页面移到队尾,把它看做新调入的页面,再给它一次机会。
      e. 时钟页面替换算法(Clock Policy Replacement, Clock)。与SCR算法思路一致。只是用循环队列来构造页面队列,队列指针指向可能被淘汰的页面。如果队列指针指向的页的“引用位”为1,则将其置为0,同时队列指针指向下一个页。

    • 局部页面替换算法(页面替换算法的作用局限于进程自身,要为进程维护称为工作集的一组页面)
      a. 局部最佳页面替换算法(Local Minimum Replacement, MIN)。 在t时刻时,若页面P在未来(t, t+delta)时间段内未被引用,则它被淘汰。
      b. 工作集置换算法。 在t时刻时,若页面P在未来(t-delta, t)时间段内未被引用,则它被淘汰。
      c. 模拟工作集替换算法
      d. 缺页频率替换算法

    17. 请求段页式虚拟内存管理

    OS_SegmentPage

    • 虚地址以程序的逻辑结构划分为段。
    • 实地址划分为位置固定、大小相等的页框(块)。
    • 逻辑地址分为三个部分:段号s、段内页号p、页内位移d。对于用户而言,段式虚拟地址应该由段号s和段内位移d’组成,操作系统内部自动把d’解释成段内页号p和页内位移号d。

    18. I/O硬件原理:I/O控制方式

    • 轮询方式: 又称程序直接控制方式。使用查询指令测试设备控制器的忙闲状态位,确定内存和设备是否能能交换数据。(@杨领well注:所谓轮询,就好比,老湿依次问每一个童鞋:“有问题没?”, 如果没问题,就继续问下一个童鞋。如果这个童鞋有问题,这个老湿就停下了解决这个问题。然后又继续询问下一个童鞋。)
    • 中断方式: 要求CPU和设备控制器及设备之间存在中断请求线,设备控制器的状态寄存器有相应的中断允许位。
      a. 进程发出启动I/O指令。
      b. 设备控制器检查状态寄存器的内容,执行相应的I/O操作,一旦传输完成,设备控制器通过中断请求线发出I/O中断信号。
      c. CPU收到并响应I/O中断后,转向设备的I/O中断处理程序执行。
      d. 中断处理程序执行数据读取操作,将I/O缓冲寄存器的内容写入内存。操作结束后退出中断程序恢复之前的状态。
      e. 执行中断前之前运行的进程。
      (@杨领well注: 类似于老湿在上面讲课,有童鞋问问题时,老湿就记录下自己讲到的位置,然后取回答童鞋的问题,回答完之后,又回到刚刚讲课的地方继续讲课)

    • DMA(Direct Memory Access, 直接存储器存取)方式: 内存和设备之间有一条数据通路成块的传输数据,无须CPU干9预,实际数据传输操作由DMA直接完成。

    • 通道方式: CPU在执行主程序时遇到I/O请求,启动在指定通道上选址的设备,一旦启动成功,通道开始控制设备进行操作,这时CPU就可以执行其他任务并与通道并行工作,直到I/O操作完成;当通道发出I/O操作结束中断时,处理器才响应并停止当前工作,转而处理I/O操作结束时间。

    19. I/O软件原理

    • I/O中断处理程序: 通常是设备驱动程序的组成部分之一。检查设备状态寄存器内容,判断产生中断原因,根据I/O操作的完成情况进行相应处理。若数据传输有错,应向上层软件报告设备出错信息,实施重新执行;若正常结束,应唤醒等待传输的进程,使其转换为就绪态;若有等待传输的I/O命令,应通知相关软件启动下一个I/O请求。
    • I/O设备驱动程序:设备驱动程序是设备专有的。把用户提交的逻辑I/O请求转化为物理I/O的启动和执行。同时监督设备是否正确执行,管理数据缓冲区,进行必要的纠错处理。
    • 独立于设备的I/O软件
    • 用户空间的I/O软件

    20. 缓冲技术

    • 缓冲技术的基本思想: 当进程执行写操作输出数据时,先向系统申请一个输出缓冲区,然后将数据送至缓冲区,若是顺序写请求,则不断地把数据填入缓冲区,直至装满为止,此后进程可以继续计算,同时,系统将缓冲区的内容写在设备上。当进程执行读操作输入数据时,先向系统申请一个输入缓冲区,系统将设备上的一条物理记录读至缓冲区,根据要求把当前所需要的逻辑记录从缓冲区中选出并传送给进程。
    • 单缓冲: 是最简单的缓冲技术,每当有I/O请求时,操作系统就在内存的系统区中开设一个缓冲区。不允许多个进程同时对一个缓冲器操作。

      OS_SingleBuffer

    • 双缓冲: CPU可把输出到设备的数据放入其中一个缓冲器(区)、让设备慢慢处理;然后,它又可以从另一个为终端设置的缓冲器(区)中读取所需要的输入数据。

      OS_TwoBuffer

    • 多缓冲: 是把多个缓冲区连接起来组成两部分,一部分专门用于输入,另一部分专门用于输出的缓冲结构。

      OS_MultiBuffer

    21. 驱动调度技术

    • 磁盘的物理结构:
      OS_DISK
      磁盘包括多个盘面,每个盘面有一个读写磁头,所有的磁头都固定在唯一的移动臂上同时移动。一个盘面上的读写磁头的轨迹称为磁道,读写磁头下的所有磁道形成柱面,一个磁道又可以划分为多个扇区。在磁盘上定位某个物理记录需要知道其柱面号磁头号以及扇区号。定位物理记录时,磁头到达指定扇区的时间称为查找时间, 选择磁头号并旋转至指定扇区的时间称为搜索延迟
    • 磁道(柱面)的搜索定位算法:
      a. 先来先服务算法(First Come First Server algorithm, FCFS)
      b. 最短查找时间优先算法: 总是执行查找时间最短的请求。
      c. 扫描算法: 移动臂来回的扫过所有柱面,扫描处遇到I/O请求便进行处理。
      d. 分步扫描算法: 将I/O请求分为长度为N的子队列,按FIFO算法依次处理每个队列,而每个子队列采用扫描算法,处理完一个后再服务下一个队列。
      e. 电梯调度算法: 又称LOOK算法。
      OS_Elevator
      磁头号由外向内递增。
      f. 循环扫描算法: 移动臂总是从0号柱面至最大号柱面顺序扫描,然后直接返回0号柱面重复进行,归途中不提供服务(而扫描算法归途是要提供服务的)。

    22. 设备独立性

    • 设备独立性: 用户通常不指定物理设备,而是指定逻辑设备,使得用户作业和物理设备分离开来,再通过其他途径建立逻辑设备和物理设备之间的映射,设备的这种特性称为设备独立性。

    23. 虚拟设备

    • 外部设备同时联机操作(Simultaneous Peripheral Operations On Line, SPPPLing)
      OS_SPOOLing

      a. 预输入程序。 控制信息从输入设备至输入井,填写预输入表以便在作业执行过程中要求输入信息时可以随时找到其存放位置。
      b. 井管理程序。 作业执行过程中要求启动某台设备进程I/O操作时,作业控制程序截获这个要求并调用井管理程序控制从相应输入井读取信息,或将信息送至输出井。
      c. 缓输出程序。 当处理器空闲时,操作系统调用缓输出程序执行缓输出,它查看缓输出表是否有输出打印的文件,文件打印前还可能组织作业或文件标题,也可能对从输出井中读出的信息进行格式加工。

    24. 文件逻辑结构

    • 文件的逻辑结构的两种形式:
      a. 流式文件。 一种无结构的文件,文件内的数据不再组成记录,只是一串顺序的信息集合,称为字节流文件。
      b. 记录式文件。 一种有结构的文件,包含若干逻辑记录,逻辑记录是文件中按信息在逻辑上独立含义所划分的信息单位。

    25. 文件物理结构

    • 文件物理结构: 文件的物理结构和组织是指逻辑文件在物理存储空间中的存放方法和组织关系。
    • 常见组织方式:顺序文件、连接文件、直接文件和索引文件。

    二、Q&A

    1. 什么是操作系统?操作系统在计算机系统中的主要作用是什么?

    • 定义: 操作系统尚无严格的定义。 一般可把操作系统定义为: 管理系统资源、控制程序执行、改善人机界面、提供各种服务,并合理组织计算机工作流程和为用户方便有效地使用计算机提供良好的运行环境的一种软件系统。

    • 作用:
      a. 服务用户。 操作系统作为用户接口和公共服务程序。
      b. 进程交互。 操作系统作为进程执行的控制者和协调者。
      c. 系统实现。 操作系统作为扩展机或虚拟机。
      d. 资源管理。 操作系统作为资源的管理者和控制者。

    2. 什么是多道程序设计?多道程序设计有什么特点?

    • 多道程序设计(multiprogramming): 允许多个作业(程序)同时进入计算机系统的内存并启动交替计算的方法。

    • 多道程序设计的特点: 从宏观上看是并行的,从微观上看是串行的。

    3. 计算机操作系统为什么引入进程?

    • 刻画程序的并发性。
    • 解决资源的共享性。

    4. 在分时系统中,什么是响应时间?它与哪些因素有关?

    • 从交互式进程提交一个请求(命令)直到获得响应之间的时间间隔称为响应时间
    • 影响分时操作系统的响应时间的因素很多,如,CPU的处理速度、联机终端的数目、所用时间片的大小、系统调度开销和对换信息量的多少等。

    5. 解释并发性与并行性

    • 计算机操作系统中把并行性和并发性明显区分开,主要是从微观的角度来说的,具体是指进程的并行性(多处理机的情况下,多个进程同时运行)和并发性(单处理机的情况下,多个进程在同一时间间隔运行的)。
    • 并行性是指硬件的并行性,两个或多个事件在同一时刻发生。
    • 并发性是指进程的并发性,两个或多个事件在同一时间段内发生。

    6. 试述存储管理的基本功能。

    • 存储分配
    • 地址映射
    • 存储保护
    • 存储共享
    • 存储扩充

    7. 何谓地址转换(重定向)?哪些方法可以实现地址转换?

    • 地址重定位: 又称地址转换,地址映射。 可执行程序逻辑地址转换(绑定)为物理地址的过程。
    • 实现方法:
      a. 静态地址重定位。 由装载程序实现装载代码模块的加载和地址转换,把它装入分配给进程的内存指定区域,其中的所有逻辑地址修改成内存物理地址。
      b. 动态地址重定位

      OS_Dynamic

      由装载程序实现装载代码模块的加载和地址转换,把它装入分配给进程的内存指定区域,但对链接程序处理过的应用程序的逻辑地址则不做任何修改,程序内存起始地址被置于硬件专用寄存器 —— 重定位寄存器。程序执行过程中,每当CPU引用内存地址(访问程序和数据)时,由硬件截取此逻辑地址,并在它被发送到内存之前加上重定位寄存器的值,以便实现地址转换。
      c. 运行时链接地址重定位

      程序链接的三种方式:
      a. 静态链接。在程序装载到内存和运行前,就已将它的所有目标模块及所需要的库函数进行链接和装配成一个完整的可执行程序且此后不可拆分。
      b. 动态链接。在程序装入内存前并未事先进行程序各目标模块的链接,而是在程序装载时一边装载一边链接,生成一个可执行文件。
      c. 运行时链接。 将某些目标模块或库函数的链接 推迟到执行时才进行。

    8. 什么是文件的共享?介绍文件共享的分类和实现思想。

    • 文件共享: 不同进程共同使用同一个文件。
    • 文件共享的分类:
      a. 静态共享。 两个或多个进程通过文件链接(一个文件同时属于多个目录,但实际上仅有一处物理存储)达到共享同一个文件的目的,无论进程是否运行,其文件的链接关系都是存在的,因此称为静态共享。
      b. 动态共享。 系统不同的应用程序或同一用户的不同进程并发地访问同一文件,这种共享关系只有当进程存在时才可能出现,一旦进程消亡,其共享关系也就随之消失。
      c. 符号链接共享

    展开全文
  • 文章目录目录操作系统的起源操作系统和高级编程语言使硬件抽象化 操作系统的起源 在操作系统尚不存在的年代,人们通过各种按钮来控制计算机,这一过程非常麻烦。于是,有人开发出了仅仅具有加载和运行功能的监控程序...

    目录

    操作系统的起源

    在操作系统尚不存在的年代,人们通过各种按钮来控制计算机,这一过程非常麻烦。于是,有人开发出了仅仅具有加载和运行功能的监控程序(Supervisor),这就是操作系统的原型。

    通过监控程序,程序员可以根据需要将各种应用程序加载到内存中运行。虽然仍旧比较麻烦,但现在开发的工作量得到了很大的缓解。
    在这里插入图片描述

    随着时代的发展,人们在使用监控程序编写程序的过程中发现了很多程序都具有公共的部分。例如:通过键盘进行文字输入,显示器进行数据展示等。如果每编写一个新的应用程序都需要进行相同重复工作的话,那真是太浪费时间了。因此,部分可重用的程序就被追加到了监控程序中。操作系统的原型就是这样诞生的。

    在这里插入图片描述

    逐渐的,人们又发现有更多的应用程序可以追加到监控程序中,比如:硬件控制程序,编程语言处理器(汇编、编译、解析)以及各种应用程序等,结果就形成了和现在差异不大的操作系统,也就是说,其实操作系统是多个程序的集合体。

    在这里插入图片描述

    操作系统和高级编程语言使硬件抽象化

    通过使用操作系统提供的系统调用,程序员不必直接编写控制硬件的程序,而且,通过使用高级编程语言,有时也无需考虑系统调用的存在,系统调用往往是自动触发的,操作系统和高级编程语言能够使硬件抽象化,并诞生了程序员这一职业。

    #include <stdio.h>
    
    void main(){
    
      // 打开文件
      FILE *fp = fopen("MyFile.txt","w");
    
      // 写入文件
      fputs("你好", fp);
    
      // 关闭文件
      fclose(fp);
    }
    

    在上面代码中,物理磁盘被操作系统中的文件系统和 C 语言中的函数抽象化了。

    在这里插入图片描述

    展开全文
  • 计算机操作系统原理与设计.pdf 下载

    计算机操作系统原理与设计.pdf 下载

    展开全文
  • 计算机操作系统是计算机专业必修的专业基础课程,是考研的必考科目。它的特点是概念多、较抽象和涉及面广,所以无论是大学学习还是考研,很多同学都把它当做一块硬骨头,其实只要我们掌握正确的学习方法,操作系统...
  • 计算机操作系统原理

    千次阅读 2018-09-29 16:42:50
    最近准备i面试,抽时间回顾一下计算机操作系统原理. -2018.10.1 1、硬件基础 计算机的构成: 处理器(CPU):主要包括运算器、控制器 内存(主存储器) 输入输出设备 详细的讲,CPU内部包括: 存储器地址寄存器...
  • 操作系统原理1-3章答案 黑新宏 胡元义主编

    千次阅读 多人点赞 2019-09-04 10:12:33
    只有在作业调度程序将作业装入内存后才能参与进程调度,本题的批处理系统为两道作业系统,即内存中最多允许有两道作业。 10:00时,作业A到达并且投入运行; 10:20时,作业B达到且优先级高于作业A,所以进程调度...
  • 操作系统原理基础知识

    万次阅读 多人点赞 2018-04-19 01:36:38
    操作系统原理我们每天都同操作系统打交道,了解一些操作系统原理上的知识是绝对有必要的,它可以让你了解操作系统内部是怎么工作的,为什么会出现这样那样的问题,为我们解决这些问题提供思路。 本文完全是为普通...
  • 计算机相关专业必修课程操作系统原理(第四版)课后练习题答案,欢迎大家下载~~~
  • 漫谈如何学习操作系统原理

    千次阅读 多人点赞 2016-03-02 10:36:55
    本人学习计算机技术至今,对于如何学习操作系统原理有一点自己的看法,现在写出来,希望对大家能有所助!  操作系统怎么学,首先要想操作系统是怎么来的,在没有操作系统的年代里,人们是怎么编程的。这是首要...
  • 5个批处理作业A~E到达系统的时间、需要运行的时间及各自的优先级如下表所示,分别采用先来先服务算法、最短作业优先算法、最短作业优先算法、最短剩余时间优先算法、抢占式优先数算法、时间片轮转算法(每个作业获得...
  • 一、概述 从计算机系统组成观点来看,操作系统就是一系列系统软件组成的。 软件:应用软件、系统软件(操作系统、语言处理系统和常用的例行服务程序)
  •  非常感谢。 《Linux操作系统原理与应用》作者...虽然我不觉得《深入理解Linux内核》翻译得很好,但是从作者这种为推广Linux内核而努力的精神还是挺佩服的,因此,这里无私分享出学习《Linux操作系统原理与应用》的
  • 操作系统原理学习总结

    千次阅读 2015-08-08 16:21:11
    1.操作系统本质上属于软件的范畴,是一种比较特殊的,系统级的应用软件,所以,我们就可以用应用软件开发的普遍原理来理解操作系统操作系统从字符界面到图形界面的进化和发展过程,就是就是不断满足用户需求的过程...
  • 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。...
  • 三大操作系统是什么,各自的主要特点是什么   大题: 基于分页或分段机制,给出逻辑地址计算物理地址 P,V 信号量操作 银行家算法 磁盘调度算法 内存...
  • Linux操作系统原理与应用(陈莉君)

    千次阅读 2017-07-05 16:32:19
    《Linux操作系统原理与应用》作者陈莉君是翻译《深入理解Linux内核》的作者。 虽然我不觉得《深入理解Linux内核》翻译得很好,但是从作者这种为推广Linux内 核而努力的精神还是挺佩服的,因此,这里无私分享出学习...
  • 操作系统原理好书推荐

    千次阅读 2014-11-17 19:18:11
    《现代操作系统》,《操作系统设计与实现》,我选择的是现代操作系统,没什么说的,有了前面的基础,读着很轻松,顺便说一句,如果对黑客非常感兴趣可以仔细看下安全那章,对不同的系统攻击,病毒,木马的原理都有所...
  • 【Windows】操作系统原理

    千次阅读 2016-04-05 20:41:36
    上篇文章谈到Windows操作系统32位和64位的区别,现在来瞧瞧操作系统原理的一些知识运行视图 系统库(lib)可调用操作系统,执行硬件指令 应用程序可以调用lib和操作系统,执行硬件指令 操作系统的作用 管理系统中...
  • 嵌入式FreeRTOS操作系统原理

    千次阅读 2016-09-23 10:48:21
    1、FreeRTOS操作系统功能 作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS内核支持优先级调度算法,每个...
  • 操作系统原理:动态内存分配

    千次阅读 2017-04-12 23:21:13
    操作系统调用本质就是调整这些VMA, 是 mmap 家族的一个特例, sbrk 则是glibc针对brk的基础上实现的。详细可以看Linux kernel和glibc的的源码。 /* 大致的结构 */ struct mm_struct { struct vm_area_...
  • 操作系统原理实验报告+源代码,哲学家就餐问题有界面,且能在死锁与不死锁情况下运行,生产者与消费者问题也有界面···
  • 操作系统原理)死锁原理

    千次阅读 2017-03-17 15:43:38
    死锁原理

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,056,062
精华内容 422,424
关键字:

操作系统原理