操作系统知识点复习

第一章 引言

  1. 计算机软件可以分成系统软件和应用软件,系统软件负责管理计算机本身的运作,而应用软件则负责完成用户所需要的各种功能。其中最基本的系统软件就是操作系统。
  2. 操作系统的功能:扩展机和资源管理。扩展机指的是操作系统提供了各式各样的服务,用户程序可以通过称为系统调用的指令来使用这些服务。
  3. 操作系统的一些概念(1)进程:一个进程就是一个正在执行的程序。每个进程都有自己的地址空间,也就是一组内存地址,在许多操作系统当中,一个进程的所有信息都会放在进程表中。因此,对于一个被挂起的进程,他包含两部分内容,一是进程的地址空间,二是相应的进程表项,包含寄存器值以及其他信息。

第二章 进程

  1. 从概念上说,每个进程都拥有它自己的虚拟CPU,实际上真正的CPU在各进程之间来回切换,是一种伪并行的概念,即宏观上并行,实际串行。
  2. 进程的状态分为运行态,就绪态,阻塞态。运行态是指在该时刻实际占用处理机,就绪态是指可运行,因为其他进程正在运行而暂时被挂起(若有CPU分配,就会立即投入执行),阻塞态是指除非某种外部事件发生,否则不能运行。
  3. 进程的实现,为每个进程创建一个称作是进程控制块(PCB = process control block)的结构,每个进程有且只有一个PCB,PCB保存了当进程失去CPU时各寄存器的值。系统中多数行为,都是通过中断技术实现的。eg(1)时间片是通过时钟中断实现的(2)键盘中断scanf使进程进入阻塞状态,不再占用CPU。当用户敲击键盘的时候,键盘会向CPU发送中断,操作系统执行键盘中断程序,从而唤醒被阻塞以后,当进程被回复执行时,操作系统从该PCB中回复寄存器的值,通过PCB我们就可以实现多进程模型,当然PCB不只是保存了寄存器的值,还保存了程序计数器等等的信息。
  4. 有些时候需要在相同地址空间中有多个控制流而不是单一控制流(进程),就像他们是单独的进程一样(只是共享相同的地址空间),这些控制流通常被称为线程。
  5. 两个或多个进程读写某些共享数据,最后的解决取决于进程运行的精确时序(操作系统对进程的调度顺序)
  6. 要避免一些因为竞争条件产生的错误,关键是要找出某种途径防止多个进程同时访问共享数据。换言之,这里需要的是互斥。这里把对共享内存进行访问的程序片断称为临界区或临界段。对于一个好的方案,需要具备以下四个条件(1)任何两个进程不能同时处于临界区(2)不应对CPU的速度和数目做任何的假设(3)临界区外的进程不得阻塞其他进程(4)不能让进程在临界区外无止境的等待。
  7. 解决竞争条件的一种方法叫做严格交替法,他使用持续检测一个变量知道它具有某一特定值再进入临界区的方法来避免上述问题,同样这种状态也成为忙等待。
  8. 解决忙等待:生产者-消费者问题:需要一个变量count,如果缓冲区最多存放N个数据项,则生产者将首先检查count是否达到N,若是,则生产者睡眠;否则生产者向缓冲区放入一个数据项并将count++。消费者也同样,首先看count是否为0,若是则睡眠。否则从中取走一个数据项并将count的值建1。但是这里是有问题是,因为唤醒信号是有可能丢失的,所以就引入了信号量的概念了。
  9. 信号量是一个整型变量,他是用来累计唤醒次数,以供以后使用,如果为0,表示没有积累下来的唤醒操作,如果为正则表示有一个或多个被积累下来的唤醒操作。
  10. 死锁:由于进程调度顺序不等,使得进程互相等待对方唤醒却不会发生,因为两个进程都被阻塞了。要避免死锁可以用:(1)资源编号:进程按照编号从低到高的顺序申请资源(2)银行家算法:进程调度资源前判断是否会死锁(3)鸵鸟算法:任凭死锁发生,发生之后再检测,若有死锁则将进程杀死。
  1. 哲学家进餐问题:使用一个信息量数组,每个信息量分别对应一个哲学家,当所需叉子被占用时,想进餐的哲学家可以阻塞。

  2. 进程同步指两个以上进程基于某个条件来协调它们的活动。一个进程的执行依赖于另一个协作进程的消息或信号,当一个进程没有得到来自于另一个进程的消息或信号时则需等待,直到消息或信号到达才被唤醒。

  3. 进程间的通讯方式


  4. 中断和系统调用的区别:
    系统调用是应用程序主动向操作系统发出的服务请求
    中断是来自硬件设备的处理请求

第三章 IO设备

  1. 最短寻道算法:总是选择和磁盘臂最接近的柱面请求;电梯算法:保持一个方向运动,直到那个方向没有更远的请求为止。

第四章 存储管理

  1. 单道程序存储管理是最简单的一中存储管理方法,它的基本思路是把整个内存分为两个区域,即系统区和用户区,然后每次把一个应用程序装入到用户区去运行,由它和操作系统来共享整个内存。其中,存放在内存高端的ROM中的系统内容,称为基本输入输出系统。
  2. 单道程序存储管理每次智能运行一个进程,所以基本都没人用了。现在大多数系统都可以“同时”运行多个进程,这个同时的意思是当一个进程由于等待IO操作被阻塞的时,另一个进程可以去使用CPU。所以多道程序增加了CPU的利用率。
  3. 说到多道程序存储管理,就会提到分区。如果是固定分区,操作系统启动期间,将内存划分为若干个分区,每个分区的起始地址和大小是固定不变的,这会造成一些分区的利用率低:可能小分区的输入队列是满的,而大分区的输入队列却是空的。
  4. 基于固定分区的坏处,有一种简单的策略叫做交换技术,它把各个进程完整地调入内存,运行一段时间,然后再放回到磁盘上;还有一种方法是虚拟存储器,这在后面会讲。
  5. 交换技术其实值的就是可变式分区,即系统启动之后只有一个分区,然后随着进程的进进出出,分区的数目进行动态变化,由于分区的大小和个数不再固定,而是根据进程的实际需要来划分,因此这种方式提高了内存的利用率,但同时也使内存的分配、回收和管理变得更加复杂。当然随着进程的进进出出,内存中会出现一些不连续的黑洞,可以使用内存紧缩的技术来把所有进程都尽可能地往内存地址的低端移动,不过需要耗费大量的CPU时间,一般不用。
  6. 解决内存黑洞的方法有几种,这里复习其中两种:最佳匹配法是指搜索整个链表,将能够装下该进程的最小空闲分区分配出去,这样效果并不好,因为每次选择的都是与进程大小最接近的空闲分区,因此分割以后剩余的空闲区域将会很小,甚至无法使用造成浪费。而最坏匹配法则是在每次分配的时候,总是将最大的那个空闲分区切去一部分分配给请求者,当然这种方法当有一个大的进程到来的时候也可能找不到合适的空闲分区。
  7. 操作系统要记录每个分区的状态(占用,空闲)、分区的起始地址和大小,可以通过两种数据结构来实现这个目的:位图和链表。
  8. 虚拟页式存储管理:这是一种叫做分页的技术,它是用来解决分区管理方案的内存碎片问题。它的原理是将进程的地址空间,切分为多个大小相等的单元,每个单元称作是页;物理内存划分为多个大小相等的单元,称作页框,大小和页面相等,页框和页面的大小应该是2的整数次幂。
  9. 地址变换的过程由硬件实现,硬件称作MMU存储管理单元。
  10. 页表:存放页面和页框之间的对应关系,由操作系统简历。
  11. 地址变换的过程:虚拟地址div页面大小,整数部分为页号p,余数为页内偏移r,根据p查找页表,从中取出页框号b,对应物理地址为b*页面大小+r
  12. 因为虚拟内存一般会比物理内存大,所以如果访问到未被映射的虚拟内存的时候,MMU将会引发一个缺页中断,然后操作系统会从内存中挑选一个使用不多的物理页面,把它的内容写回到磁盘从而腾出一个空闲页面,然后把引发缺页中断的那个虚拟页面装入该空闲页面并对地址映射关系进行更新。
  13. 对于页表来说,其实只有一小部分页表项会被经常地访问,而其他的页表项则很少使用,这就是程序局部性原理的一种表现,基于此,人们给计算机增加了一种特殊的快速查询硬件,即TLB或者关联存储器,用来存放那些最重用的页表项,这种硬件能够直接把虚拟页面号映射为相应的物理页面号。
  14. 页面置换算法:当一个缺页中断发生的时候,就需要从内存中选择一个页面,把它置换出去。因此对于一个好的页面置换算法来说,应该尽可能地减少页面的换进换出次数,或者说尽可能地减少缺页中断的次数。(1)最优页面置换算法:当一个缺页中断发生时,对于内存中的每一个虚拟页面,计算在它的下一次访问之前,还需要等待多长的时间,用指令数表示,简单来说就是选择等待时间最长的那个页面,把它作为被置换的页面,但是这个算法是无法实现的,因为无法计算等待的时间。(2)先进先出页面置换算法(FIFO):操作系统维护一个链表,这个链表记录了所有位于内存中的虚拟页面,从链表的排列顺序来看,链首页面的驻留时间最长,链尾页面的驻留时间最短,一旦发生缺页中断,就把链首的页面淘汰出局,并把新的页面添加到李娜表的末尾。当然被淘汰的页面可能是经常要访问的页面,所以这个算法性能也一般。(3)时钟页面置换算法。当一个缺页中断发生时,检查指针所指向的那个页面,如果它的R位(访问位)的值等于0,则淘汰;如果R位的值等于1,则把它清零,并把指针指向下一个页面。(4)最近最久未使用页面置换算法(LRU):LRU算法的策略是根据程序的局部性原理,利用过去、已知的页面访问情况,来预测未来的情况。为了实现LRU,系统必须维护一个页面链表,把刚刚使用过的页面作为首结点,把最久没有使用的页面作为尾结点。然后在每一次内存访问的时候,都对这条链表进行更新。也就是说,从链表找到相应的页面,把他摘下来,移动到开头成为新的头结点。
  15. 请求调页指的是根据进程需要随要随调页面。工作集模型就是确保在进程运行之前,它的工作集就已经在内存中了,它旨在大大减少缺页中断的次数。在一个进程运行之前就预先装入它的页面,叫做预先调页。
  16. 段式存储管理:内存分配时,以段为单位进行内存申请,而不是分区管理中以整个进程的大小申请内存,也不是分页系统中以页面为单元来申请内存。内存分成大小相同的块,每个程序地址空间按照逻辑关系分成若干段,并为每个段赋予另一个段号,每段独立从0寻址。在段式存储管理中,各个表格可以相互独立地增长或缩减。段是一个逻辑实体,在一个段中可能包含一个或多个函数或者是一个数组,或者是一个栈,但它一般不会同时混杂有不同类型的内容。与页式存储管理相比,段式存储管理中的保护更有意义,因为程序员知道每个段所包含的内容。

第四章 文件系统

  1. 组成:(1)主引导记录MBR:开机之后被BIOS读入的第一个扇区,其中的代码对分区表进行分析,在屏幕上显示出有哪些操作系统,由用户选择一个操作系统来启动,将引导块装入内存。(2)分区表:记录磁盘空间被划分成几个分区,每个分区所存放的操作系统类型、起始磁盘地址、分区长度。(3)引导块:具体操作系统的引导程序,它将对应的操作系统从磁盘装入内存,也就是说,完成操作系统的启动。(4)超级块:记录对应操作系统的磁盘分区的结果,通过它可以找到各部分的地址等信息(5)空闲空间管理:用来表示磁盘上空闲的磁盘块,可以用位图,链表等结果实现。(6)i-节点区:i-节点就是文件控制块FCB,每一个文件都对应一个i-节点,i-节点中记录了文件的属性以及文件的磁盘地址。
  2. 记录磁盘块号有三种方法:隐式指针法,显式链接法(文件分配表)和混合索引结构。

你可能感兴趣的:(操作系统知识点复习)