操作系统易考知识点(九推)

写在前面 :本篇博客是未来九推的软件工程保研做的整理,反复牢记知识点,不断更新新的知识点,删掉熟烂于心的知识点。


PV操作必考!

总结的一些题目链接在此:操作系统 | PV操作


  • 进程间通信方式有哪些?各自有哪些优缺点?
    管道、信号量、信号、消息队列、共享内存、套接字

  • 进程与线程的区别

    • 进程的定义:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。由程序段、相关的数据段和PCB(进程控制块)三部分构成了进程实体(又称进程印像),一般,我们把进程实体就简称为进程。
    • 线程的定义:线程是进程中的一个实体,作为系统调度和分派的基本单位
    • 根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
    • 所属关系:线程只能属于一个进程,而进程可以创建多个线程,且最少创建一个主线程。
    • 系统开销:线程开销小于进程开销,切换效率高于进程。
    • 资源分配:进程维护的是静态资源,线程维护的是动态资源。进程都是拥有系统资源的一个独立单位,他可以拥有自己的资源。一般地说,线程自己不能拥有资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源
    • 通信机制:进程间相互独立,互不打扰;线程之间由于共享进程数据段,所以通过全局变量来实现通信
    • 控制权:子线程终止不会引起其它线程或者进程的终止,但进程(主线程)的终止能够引起所有子线程的终止
  • 死锁:指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

    • 死锁的四个必要条件:
      1.互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放
      2.请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。
      3.不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用
      4.循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。
    • 死锁的预防和避免(银行家算法)
  • 并行和并发的区别:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。

    • 普通解释:
      并发:交替做不同事情的能力
      并行:同时做不同事情的能力
      专业术语:
      并发:不同的代码块交替执行
      并行:不同的代码块同时执行
  • 什么是操作系统?
    计算机系统自上而下大致可分为:硬件、操作系统、应用程序、用户。操作系统是指控制和管理整个计算机系统的硬件和软件资源,合理地组织、调度计算机的工作与资源分配,进而为用户和其他软件提供方便接口与环境的程序集合。操作系统的四个特征包括:并发、共享、虚拟、异步。

  • 操作系统的两个主要功能是什么
    1 控制应用程序的执行
    2 充当应用程序和计算机硬件之间的接口

  • 多道程序设计需要哪些硬件支持
    I/O 中断;直接存储器访问DMA;特权指令;内存保护;定时器

  • 如果一个处于就绪状态的进程被交换到磁盘,则可能的原因是什么?它此时将处于什么状态?
    高优先级的进程准备就绪将要从阻塞态调入就绪态,于是替换出低优先级的就绪进程。
    就绪挂起状态。

  • 什么是系统调用?从操作系统角度看,他们在运行状态上与普通函数有什么区别?
    系统调用:用户程序调用由操作系统提供的函数。
    系统调用需要内核参与,内核状态下进行,因此需要模式切换;而普通函数只是在用户程序中执行,只处在用户模式,因此不会涉及到模式切换。

  • 当终止一个进程的运行后,其中的线程是否仍然可以运行?
    不能,进程终止后会终结进程结构和相应资源其中包括线程。

  • 如果存在死锁是否意味着饥饿,如果饥饿是否意味着存在死锁?
    死锁一定意味着饥饿,饥饿不一定死锁。
    死锁的条件:互斥;占有且等待;非抢占;循环等待。

  • 在一个进程集合里,如果所有的进程都处于阻塞状态,是否发生死锁?如果发生死锁,所有进程是否都处于阻塞状态?为什么?
    如果所有进程阻塞,不一定死锁,无资源依赖关系
    如果发生死锁,不一定处于阻塞状态,死锁可以不阻塞,可能处于忙等待状态

  • 如果进程在临界区的执行时间比分配给他们的运行时间片小得多,那么用什么等待方式比较好?为什么?
    阻塞态,操作系统能将资源分配给其他进程执行,充分利用处理器

  • 挂起表示进程的什么状态?
    当主存中所有进程都处于阻塞态时,操作系统可以将某个进程挂起,并转移到磁盘中去,释放资源,从而将资源分配给另一个进程调用。

  • 如果操作系统具有交换功能,那么它需要“挂起”(suspend)状态吗?
    答:需要“挂起”状态。当主存中的所有进程都处于阻塞态时,操作系统可以把其中一个进程置于挂起态,并将它转移到磁盘,主存中释放的空间可以被调入的另一个进程使 用。

  • 引入挂起态的动机是什么?
    交换,交换是I/O操作,磁盘I/O一般是系统中最快的I/O,交换通常会提高性能

  • TLB与Cache的作用有什么区别?他们的内容可能相同吗?
    TLB使用虚拟地址;Cache使用实际地址
    TLB提高了虚拟内存对存储器的访问速度;Cache加快了存储器访问内存的速度
    二者内容可能相同

  • 如果线程之间的切换导致了进程之间的切换,这样的线程可能是用户级的吗?可能是内核级的吗?为什么?
    不可能,用户级线程切换往往在同一进程内部,或者伴随着进程切换的线程切换;可能是内核级单线程进程。

  • 动态内存分配和分页内存分配的主要缺点是什么?如何解决?
    动态内存通常会造成外部碎片,可利用压缩技术,不断移动进程位置,是进程地址连续。
    分页内存会有一些内部碎片,可减少页大小来减少内部碎片的大小

  • 分页机制有哪些主要优缺点?
    优点:减少了内部碎片,无外部碎片,不需要连续分配内存空间;
    缺点:有内部碎片,一个多线程应用程序不能利用多处理技术
    分页大小固定,一个线程阻塞,其余线程也阻塞

  • 两个内核级的线程之间的切换是否总是比两个进程之间的切换的开销要小?为什么?
    不一定,如果两个内核级线程来自统一进程,则开销会小一些,但是如果两个内核级线程来自不用进程,那么线程的切换会伴随这模式切换和进程切换,开销反而更大。

  • 从切换的开销和并行性比较用户级线程和内核级线程。
    答:切换的开销:用户级线程的管理工作完全由应用程序完成,即在用户模式下进行,线程的切换不涉及到模式的切换。 内核级线程的管理工作由内核完成,即需要在内核模式下进行,线程的切换需要进行模式切换。

  • 如果在用消息传递实现信号量时引入了一个控制进程,那么最少需要几种消息?
    三种,请求wait;请求signal;完成操作

  • 什么是进程的饥饿和死锁
    饥饿:一个可运行的进程能继续执行,但是被调度器无限期忽视,从而不能被调度执行
    死锁:两个或两个以上的进程中的每一个进程都在等待其他进程做完某件事情,而不能继续执行

  • 如果磁盘系统是RAID0时,那么为了有利于多进程读写磁道,磁盘条带应该大些还是小些?为什么?
    大一些,这样一个I/O请求的访问资源更可能在一个磁盘内,多个正在等待 的 I/O请求可以并行地处理,从而减少了每个请求的排队时间。

  • 程序的临界是什么?
    一段代码,这段代码中进程将访问共享资源,当另一个进程已经在这段代码中执行时,当前进程则不能在这段代码中执行。

  • 执行系统调用时需改变进程的执行模式吗?
    需要,系统调用需要内核的参与,内核程序要在内核模式下完成,所以需要模式切换来改变进程的执行模式。

  • 虚拟存储有效性的依据
    局部性原理,描述了一个进程中程序和数据的集簇倾向

  • RAID1和RAID5相比,哪个可靠性更好,哪个写磁盘更快?为什么?
    RAID1更可靠,对于所有的磁盘文件都有一个备份
    RAID1写更快,RAID1写时速度与单个磁盘速度相当,而RAID5写时需要先读取相应位置旧数据,计算新的校验值,再写入数据,再更新校验值

  • 页面尺寸对页面故障率和磁盘效率有什么样的影响?
    页越小,内部碎片的总量越少,但每个进程需要的页的数目就会越多,这就意味着更大的页表。如果页尺寸非常小,页错误率比较低
    当页尺寸增加时,页错误率开始增长,担当页尺寸接近整个进程的大小时,页错误率开始下降,当一个页包含整个进程时,不会发生页错误。

  • 从调度策略上说明多道批处理系统和分时系统的区别?
    多道批处理系统:充分利用处理器(针对进程)
    分时系统:减少响应时间(针对用户)

  • 在使用优先级调度方案时,临界区的互斥用信号量是否存在死锁和饥饿?
    不存在死锁,但可能存在饥饿

  • 阻塞等待一定比忙等待节省CPU时间吗?为什么?
    在一般情况下是这样的,忙等待需要不断检测当前任务是否执行完成,消耗了很多无用的周期指令,但是存在一种特殊情况,当进程执行到某一点结束时,正好满足了忙等待的条件,从而忙等待会立刻有结果,然而阻塞等待会消耗操作系统资源中在进程换入和换出。

  • 为什么需要挂起和退出这两个状态?
    挂起:交换的需要
    退出:取消进程的需要

  • 如果不计数据从系统缓冲区转移到用户存储区的时间,那么有缓冲I/O比无缓冲I/O最多可以减少的运行时间的比例是多少?

  • 分别给出一个使速率单调调度有效码必要条件和充分条件?为什么必要?

  • 在一个UNIX文件系统中,i结点有10个直接地址域和3个间接地址域,一个逻辑快的容量是4K字节,每个磁盘快用4个字节描述,其中3个字节存放物理块号的整数编址,问:一个文件容量的上界是多少?如果文件长度为9000 000字节且文件中不存在空洞,则间接地址所需的附加磁盘存储空间是多少?

  • 饥饿是死锁的充分条件吗?是死锁的必要条件吗?死锁的进程一定处于阻塞状态吗?
    答:饥饿不是死锁的充分条件;饥饿是死锁的的必要条件。 死锁的进程不一定处于阻塞状态。

  • 软件互斥的一种算法是Balery算法
    Choosing[i]; //初值均为false
    Number[ ]; //初值均为0
    While(true)
    {
    Choosind[i] = true;
    Number[i] = 1 + getmax(number[i],n)
    Choosing[i] = false;
    For( int j = 0; j < n; j++ )
    {
    While(choosing[j])
    {};
    While ( ( number[j] != 0) && (number[j],j ) < (number[i], I ) )
    {};
    }
    /critical section/
    Number[i] = 0;
    /remainder/
    }
    (1) 说明for语句里的第一个while语句是必须的
    (2) 证明该算法实现了互斥
    答案:
    1.While语句保证了在比较票号之前没有人正在拿票,即当对number[j]进行写操作时,不允许其他人对number[j] 进行读操作,因此,这里实现了对number[j]的读-写互斥。
    2.该算法实现了两个互斥:A.临界资源的使用互斥 当i在临界区时,j想进入临界区,此时必有(number[i],i)<(number[j],j).
    原因如下:
    1.若j在i进入临界区后才开始拿票准备进入临界区,则根据 Number[j] = 1+getmax(number[],n); 可知,number[j]一定大于number[i],因此i请求进入临界区无法得到满足
    2.若j在i进入临界区前已拿到票,则i能进入临界区说明了(number[i],i)<(number[j],j) B.number[j]的读写互斥 Choosing[j]保证了当对number[j]写时,不允许对其读。

  • 设有3个页框,页面的引用序列为7,0,1,2,0,3,0,4,2,3,0,3,2。采用请调策略,画出执行最优替换算法opt,最久没有使用算法LRU替换算法和时钟替换算法的访问页面的过程。
    在这里插入图片描述

  • 如下表所示,A,B,C,D,E五个作业依次到达一个单一CPU计算机:
    作业名 执行时间 优先级
    A 12 1
    B 6 4
    C 9 2
    D 3 0
    E 13 3

假定他们到达的顺序对调度策略有影响,但是到达时间的差别可以忽略,作业在运行时除了受调度策略影响外,不会被其他事件中断,对下面4种调度,分别确定每个作业的周转时间(忽略切换开销)。
(1) 时间片轮转(1个单位时间)
(2) 优先级(值越小,优先级越高)
(3) FCFS
(4) 最短作业优先

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


计算一个节点使用直接,一次间接块,二次间接块能表示的文件的大小:
前提:每块大小1024字节,每个块号使用32位(4字节)
1,直接快:
使用直接块时,一个块号表示一个块,也就是1K字节

2,一个一次间接块:
一个间接块大小为1024,其能记录的块的数量为1024/4(32位)=256,也就是说一个间接块可以记录256个块的地址,也就是说一个间接块能表示的大小位:256*1024=256K;

3,一个二次间接块:
也就是一个块记录了256个一次间接块,大小也就是256*(一次间接块大小)
=256*256k
=65536K
=64M

4,一个三次间接块大小:
也就是一个块记录了256个二次间接块,大小也就是256*(二次间接块大小)
=256*64M
=16G
在这里插入图片描述

  • 若进程的虚地址v和实地址r之间满足关系 r=v+n*z;其中z为页面大小,n为自然数,问进程物理帧号f与页面号p之间的关系是f=p+n;

最优适应算法:通常将空闲区按长度递增顺序排列。查找时总是从最小一个空闲区开始,直到找到满足要求的分区为止。此算法保证不会分割一个更大的区域,使得装入大作业的要求容易得到满足。
最先适应算法: 通常将空闲区按地址从小到大排列。查找时总是从低地址开始,可使高地址尽量少用,以保持一个大空闲区,有利于大作业的装入;缺点是内存低地址和高地址两端的分区利用不平衡,回收分区较麻烦。
最坏适应算法: 通常将空闲区按长度递减顺序排列 。查找时从最大的一个空闲区开始,总是挑选一个最大的空闲区分割给作业使用,其优点是使剩下的空闲区不致于太小,这样有利于中小型作业,但不利于大作业。
这些都属于可变分区分配算法,当然还有下次适应分配算法和快速适应分配算法。
注:这些算法理解即可。

临界区 是指一个访问共用资源的程序片段,而这些共用资源又无法同时被多个线程访问的特性。
进程进入临界区的调度原则是:
1、如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
2、任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
3、进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
4、如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值