操作系统面试_操作系统面试题 - CSDN
精华内容
参与话题
  • 常见面试题整理(操作系统

    万次阅读 多人点赞 2018-03-08 20:47:11
    进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位。线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程可以有...

    (一)请分别简单说一说进程和线程以及它们的区别。

    • 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位。
    • 线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
    • 一个进程可以有多个线程,多个线程也可以并发执行

    如果你对进程或者线程不太熟悉,建议阅读:进程与线程的一个简单解释

    (二)线程同步的方式有哪些?


    • 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
    • 信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
    • 事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

    经两位大大的指正,现已删除临界区。感谢:@真姬酱@安阳

    如果你对线程同步的方式不太熟悉,建议阅读:线程同步的几种方式

    (三)进程的通信方式有哪些?

    主要分为:管道、系统IPC(包括消息队列、信号量、共享存储)、SOCKET

    管道主要分为:普通管道PIPE 、流管道(s_pipe)、命名管道(name_pipe

    • 管道是一种半双工的通信方式,数据只能单项流动,并且只能在具有亲缘关系的进程间流动,进程的亲缘关系通常是父子进程
    • 命名管道也是半双工的通信方式,它允许无亲缘关系的进程间进行通信
    • 信号量是一个计数器,用来控制多个进程对资源的访问,它通常作为一种锁机制。
    • 消息队列是消息的链表,存放在内核中并由消息队列标识符标识。
    • 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    • 共享内存就是映射一段能被其它进程访问的内存,这段共享内存由一个进程创建,但是多个进程可以访问。

    如果你对进程的通信方式不太熟悉,建议阅读: 进程间的几种通信方式

    (四)什么是缓冲区溢出?有什么危害?其原因是什么?

    缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。

    危害有以下两点:

    • 程序崩溃,导致拒绝额服务
    • 跳转并且执行一段恶意代码

    造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。

    如果你想深入了解缓冲区溢出,推荐阅读:缓冲区溢出攻击

    (五)什么是死锁?死锁产生的条件?

    在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。

    死锁产生的四个条件(有一个条件不成立,则不会产生死锁)

    • 互斥条件:一个资源一次只能被一个进程使用
    • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放
    • 不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺
    • 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系

    如果对死锁还不是太熟悉,建议阅读:死锁产生的原因和解锁的方法

    (六)进程有哪几种状态?

    • 就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源
    • 运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数
    • 阻塞状态: 进程等待某种条件,在条件满足之前无法执行

    如果你对进程的几种状态以及中间的装换不太了解,建议阅读:进程的三种状态及转换

    (七)分页和分段有什么区别?


    • 段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的 ;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。
    • 段的大小不固定,有它所完成的功能决定;页大大小固定,由系统决定
    • 段向用户提供二维地址空间;页向用户提供的是一维地址空间
    • 段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制。

    如果你对分页和分段还不太了解,建议阅读:分段和分页

    (八) 操作系统中进程调度策略有哪几种?

    FCFS(先来先服务),优先级,时间片轮转,多级反馈

    如果你想深入的了解这几种调度策略,推荐阅读:几个常用的操作系统进程调度算法

    (九)说一说进程同步有哪几种机制。

    原子操作、信号量机制、自旋锁管程、会合、分布式系统

    如果你想深入的了解这几种机制,推荐阅读: 进程同步的几种机制

    (十)说一说死锁的处理基本策略和常用方法。

    解决死锁的基本方法如下:

    预防死锁、避免死锁、检测死锁、解除死锁

    解决四多的常用策略如下:

    鸵鸟策略、预防策略、避免策略、检测与解除死锁

    如果你对死锁的处理策略不是太熟悉,推荐阅读:产生死锁的原因和必要条件+解决死锁的基本方法

    本文参考文献和文章:

    「1」操作系统常见面试题总结 - youngchang的开发博客

    「2」 操作系统面试题 - iWan

    「3」进程间的几种通信方式

    「4」操作系统各大公司笔试题汇总

    「5」解决死锁的基本方法


    学习编程,欢迎关注专栏:学习编程 - 知乎专栏
    展开全文
  • 操作系统面试问题汇总(超详细)

    千次阅读 多人点赞 2019-12-14 12:17:35
    操作系统的组成 1、驱动程序是最底层的、直接控制和监视各类硬件的部分,它们的职责是隐藏硬件的具体细节,并向其他部分提供一个抽象的、通用的接口。 2、内核是操作系统之最内核部分,通常运行在最高特权级,负责...

    操作系统的组成
    1、驱动程序是最底层的、直接控制和监视各类硬件的部分,它们的职责是隐藏硬件的具体细节,并向其他部分提供一个抽象的、通用的接口。

    2、内核是操作系统之最内核部分,通常运行在最高特权级,负责提供基础性、结构性的功能。

    3、支承库是一系列特殊的程序库,它们职责在于把系统所提供的基本服务包装成应用程序所能够使用的编程接口(API),是最靠近应用程序的部分。例如,GNU C运行期库就属于此类,它把各种操作系统的内部编程接口包装成ANSI C和POSIX编程接口的形式。

    4、外围是指操作系统中除以上三类以外的所有其他部分,通常是用于提供特定高级服务的部件。例如,在微内核结构中,大部分系统服务,以及UNIX/Linux中各种守护进程都通常被划归此列。


    操作系统中的缓存
    缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,可以进行高速数据交换的存储器,它先于内存与CPU交换数据。


    进程和线程
    定义:
      进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
      线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
    (1)进程是对运行时程序的封装,是系统进行资源调度和分配的基本单位,实现操作系统的并发。

    (2)线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发。

    (3)一个程序至少有一个进程,一个进程至少有一个线程,线程依赖进程的存在。

    (4)进程执行过程中拥有独立的内存单元,而多个线程共享进程的内存。


    进程间的通信的几种方式

    管道(pipe)及命名管道(named pipe): 管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

    信号(signal): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;

    消息队列: 消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息;

    共享内存: 可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等;

    信号量: 主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段;

    套接字: 这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
    几种方式的比较:
    管道:速度慢、容量有限
    消息队列:容量收到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
    信号量:不能传递复杂信息,只能用来同步。
    共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全。


    线程间通信

    (1)同步
    多个线程通过synchronized通讯,类似于共享内存

    (2)while轮询
    线程A不断改变条件,线程B不断查看条件是否满足需求(比方说=5),从而实现通讯。
    效率不高,因为B一直在查看,没做别的

    (3)wait/notify
    进入阻塞,而不是像轮询一样一直占用CPU资源

    (4)管道通信
    通过管道,将一个线程的消息发送个另一个线程


    什么是死锁?死锁产生的条件?

    1). 死锁的概念

      在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲,就是两个或多个进程无限期的阻塞、相互等待的一种状态。

    2). 死锁产生的四个必要条件

    • 互斥:至少有一个资源必须属于非共享模式,即一次只能被一个进程使用;若其他申请使用该资源,那么申请进程必须等到该资源被释放为止;

    • 占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有;

    • 非抢占:进程不能被抢占,即资源只能被进程在完成任务后自愿释放

    • 循环等待:若干进程之间形成一种头尾相接的环形等待资源关系

    3). 死锁的处理基本策略和常用方法

      解决死锁的基本方法主要有 预防死锁、避免死锁、检测死锁、解除死锁 、鸵鸟策略 等。

      (1). 死锁预防
      
      死锁预防的基本思想是 只要确保死锁发生的四个必要条件中至少有一个不成立,就能预防死锁的发生,具体方法包括:

    • 打破互斥条件:允许进程同时访问某些资源。但是,有些资源是不能被多个进程所共享的,这是由资源本身属性所决定的,因此,这种办法通常并无实用价值。

    • 打破占有并等待条件:可以实行资源预先分配策略(进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行;只有当系统能满足当前进程所需的全部资源时,才一次性将所申请资源全部分配给该线程)或者只允许进程在没有占用资源时才可以申请资源(一个进程可申请一些资源并使用它们,但是在当前进程申请更多资源之前,它必须全部释放当前所占有的资源)。但是这种策略也存在一些缺点:在很多情况下,无法预知一个进程执行前所需的全部资源,因为进程是动态执行的,不可预知的;同时,会降低资源利用率,导致降低了进程的并发性。

    • 打破非抢占条件:允许进程强行从占有者哪里夺取某些资源。也就是说,但一个进程占有了一部分资源,在其申请新的资源且得不到满足时,它必须释放所有占有的资源以便让其它线程使用。这种预防死锁的方式实现起来困难,会降低系统性能。

    • 打破循环等待条件:实行资源有序分配策略。对所有资源排序编号,所有进程对资源的请求必须严格按资源序号递增的顺序提出,即只有占用了小号资源才能申请大号资源,这样就不回产生环路,预防死锁的发生。

      (2). 死锁避免的基本思想
      
      死锁避免的基本思想是动态地检测资源分配状态,以确保循环等待条件不成立,从而确保系统处于安全状态。所谓安全状态是指:如果系统能按某个顺序为每个进程分配资源(不超过其最大值),那么系统状态是安全的,换句话说就是,如果存在一个安全序列,那么系统处于安全状态。资源分配图算法和银行家算法是两种经典的死锁避免的算法,其可以确保系统始终处于安全状态。其中,资源分配图算法应用场景为每种资源类型只有一个实例(申请边,分配边,需求边,不形成环才允许分配),而银行家算法应用于每种资源类型可以有多个实例的场景。

      (3). 死锁解除

      死锁解除的常用两种方法为进程终止和资源抢占。所谓进程终止是指简单地终止一个或多个进程以打破循环等待,包括两种方式:终止所有死锁进程和一次只终止一个进程直到取消死锁循环为止;所谓资源抢占是指从一个或多个死锁进程那里抢占一个或多个资源,此时必须考虑三个问题:

      (I). 选择一个牺牲品
      (II). 回滚:回滚到安全状态
      (III). 饥饿(在代价因素中加上回滚次数,回滚的越多则越不可能继续被作为牺牲品,避免一个进程总是被回滚)


    进程有哪几种状态?

    • 就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源;

    • 运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数;

    • 阻塞状态: 进程等待某种条件,在条件满足之前无法执行;

    在这里插入图片描述


    线程有几种状态?

    1. 新建(NEW):新创建了一个线程对象。

    2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。

    3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。
    4. 阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种: 

    (一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
    (二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
    (三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

    5. 死亡(DEAD):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。

    在给定的时间点上,一个线程只能处于一种状态。

    在这里插入图片描述


    分页和分段有什么区别(内存管理)?

      段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)

      页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。

    两者的不同点:

    • 目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息;

    • 大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;

    • 地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间;

    • 信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;

    • 内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。


    操作系统中进程调度策略有哪几种?

    • FCFS(先来先服务,队列实现,非抢占的):先请求CPU的进程先分配到CPU

    • SJF(最短作业优先调度算法):平均等待时间最短,但难以知道下一个CPU区间长度

    • 优先级调度算法(可以是抢占的,也可以是非抢占的):优先级越高越先分配到CPU,相同优先级先到先服务,存在的主要问题是:低优先级进程无穷等待CPU,会导致无穷阻塞或饥饿;解决方案:老化

    • 时间片轮转调度算法(可抢占的):队列中没有进程被分配超过一个时间片的CPU时间,除非它是唯一可运行的进程。如果进程的CPU区间超过了一个时间片,那么该进程就被抢占并放回就绪队列。

    • 多级队列调度算法:将就绪队列分成多个独立的队列,每个队列都有自己的调度算法,队列之间采用固定优先级抢占调度。其中,一个进程根据自身属性被永久地分配到一个队列中。

    • 多级反馈队列调度算法:与多级队列调度算法相比,其允许进程在队列之间移动:若进程使用过多CPU时间,那么它会被转移到更低的优先级队列;在较低优先级队列等待时间过长的进程会被转移到更高优先级队列,以防止饥饿发生。


    进程同步与互斥

    互斥:指某一个资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的
    同步:是指在互斥的基础上(大多数情况下),通过其它机制实现访问者对资源的有序访问。大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
    同步:体现的是一种协作性。互斥:体现的是排它性。


    进程同步有哪几种机制:

    1.信号量机制
    一个信号量只能置一次初值,以后只能对之进行p操作或v操作。 由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。

    2.自旋锁

    旋锁是为了保护共享资源提出的一种锁机制。 调用者申请的资源如果被占用,即自旋锁被已经被别的执行单元保持,则调用者一直循环在那里看是否该自旋锁的保持着已经释放了锁,自旋锁是一种比较低级的保护数据结构和代码片段的原始方式,可能会引起以下两个问题;
    (1)死锁
    (2)过多地占用CPU资源

    3.管程
    信号量机制功能强大,但使用时对信号量的操作分散,而且难以控制,读写和维护都很困难。因此后来又提出了一种集中式同步进程——管程。其基本思想是将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。

    4.会合

    进程直接进行相互作用

    5.分布式系统

    由于在分布式操作系统中没有公共内存,因此参数全为值参,而且不可为指针。


    线程同步的方式

    • 互斥量 Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问

    • 信号量 Semphare:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量

    • 事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作


    什么是虚拟内存?

    1).内存的发展历程

      没有内存抽象(单进程,除去操作系统所用的内存之外,全部给用户程序使用) —> 有内存抽象(多进程,进程独立的地址空间,交换技术(内存大小不可能容纳下所有并发执行的进程)
    )—> 连续内存分配(固定大小分区(多道程序的程度受限),可变分区(首次适应,最佳适应,最差适应),碎片) —> 不连续内存分配(分段,分页,段页式,虚拟内存)

    2).虚拟内存

      虚拟内存允许执行进程不必完全在内存中。虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻进行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令。这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块(称为帧,通常页和帧大小相等),还有一些没加载在内存中的对应在硬盘上,如图5所示。
    注意,请求分页系统、请求分段系统和请求段页式系统都是针对虚拟内存的,通过请求实现内存与外存的信息置换。

                       这里写图片描述

      由图可以看出,虚拟内存实际上可以比物理内存大。当访问虚拟内存时,会访问MMU(内存管理单元)去匹配对应的物理地址(比如图5的0,1,2)。如果虚拟内存的页并不存在于物理内存中(如图5的3,4),会产生缺页中断,从磁盘中取得缺的页放入内存,如果内存已满,还会根据某种算法将磁盘中的页换出。

    3). 页面置换算法

    • FIFO先进先出算法:在操作系统中经常被用到,比如作业调度(主要实现简单,很容易想到);

    • LRU(Least recently use)最近最少使用算法:根据使用时间到现在的长短来判断;

    • LFU(Least frequently use)最少使用次数算法:根据使用次数来判断;

    • OPT(Optimal replacement)最优置换算法:理论的最优,理论;就是要保证置换出去的是不再被使用的页,或者是在实际内存中最晚使用的算法。

    4). 虚拟内存的应用与优点

      虚拟内存很适合在多道程序设计系统中使用,许多程序的片段同时保存在内存中。当一个程序等待它的一部分读入内存时,可以把CPU交给另一个进程使用。虚拟内存的使用可以带来以下好处:

    • 在内存中可以保留多个进程,系统并发度提高

    • 解除了用户与内存之间的紧密约束,进程可以比内存的全部空间还大


    颠簸

      颠簸本质上是指频繁的页调度行为,具体来讲,进程发生缺页中断,这时,必须置换某一页。然而,其他所有的页都在使用,它置换一个页,但又立刻再次需要这个页。因此,会不断产生缺页中断,导致整个系统的效率急剧下降,这种现象称为颠簸(抖动)。

      内存颠簸的解决策略包括:

    • 如果是因为页面替换策略失误,可以修改替换算法来解决这个问题;

    • 如果是因为运行的程序太多,造成程序无法同时将所有频繁访问的页面调入内存,则要降低多道程序的数量;

    • 否则,还剩下两个办法:终止该进程或增加物理内存容量。


    局部性原理

    (1). 时间上的局部性:最近被访问的页在不久的将来还会被访问;

    (2). 空间上的局部性:内存中被访问的页周围的页也很可能被访问。


    中断和轮询

    中断的定义
    指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程

    轮询的定义
    定时对各种设备轮流询问一遍有无处理要求


    临界区和冲突解决
    临界资源的定义:
    一次仅允许一个进程使用的资源

    临界区的定义:
    每个进程中访问临界资源的那段程序

    解决冲突:
    如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入
    任何时候,处于临界区内的进程不可多于一个
    进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区
    如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象


    缓冲区溢出
    缓冲区溢出的定义:
    指当计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上

    缓冲区溢出的危害:
    程序崩溃导致拒绝服务、跳转并且执行一段恶意代码

    缓冲区溢出的原因:
    程序中没有仔细检查用户输入的参数


    如果你觉得还行,可以看看我其他面试问题汇总:


    操作系统面试问题汇总,你想知道的都在这

    计算机网络面试问题汇总,你想知道的都在这

    数据库面试问题汇总,你想知道的都这

    Linux常见面试问题指令汇总,你想知道的都在这

    Spring面试问题汇总,你想知道的都在这

    SpringMVC面试问题汇总,你想知道的都在这

    Mybatis面试问题汇总,你想知道的都在这

    展开全文
  • 操作系统常见面试题总结

    万次阅读 多人点赞 2012-09-23 17:24:20
    1、什么是进程(Process)和线程(Thread)?有何区别? ...线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的
    
    

    1、什么是进程(Process)和线程(Thread)?有何区别?

      进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

      进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。

      2、Windows下的内存是如何管理的?

      Windows提供了3种方法来进行内存管理:虚拟内存,最适合用来管理大型对象或者结构数组;内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据;内存堆栈,最适合用来管理大量的小对象。

      Windows操纵内存可以分两个层面:物理内存和虚拟内存。

      其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G地址空间,而内存分配是通过堆进行的。对于每个进程都有自己的默认堆,当一个堆创建后,就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内存,系统消耗很小)。当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是可扩充的,则扩充堆大小),为这个空闲块所包含的所有内存页提交物理对象(在物理内存上或硬盘的交换文件上),这时就可以访问这部分地址。提交时,系统将对所有进程的内存统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。

      如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状态即可。如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一个软件异常。此外,有些内存页可以设置各种属性。如果是只读,向内存写也会产生软件异常。

      3、Windows消息调度机制是?

      A)指令队列;B)指令堆栈;C)消息队列;D)消息堆栈

      答案:C

      处理消息队列的顺序。首先Windows绝对不是按队列先进先出的次序来处理的,而是有一定优先级的。优先级通过消息队列的状态标志来实现的。首先,最高优先级的是别的线程发过来的消息(通过sendmessage);其次,处理登记消息队列消息;再次处理QS_QUIT标志,处理虚拟输入队列,处理wm_paint;最后是wm_timer。

      4、描述实时系统的基本特性

      在特定时间内完成特定的任务,实时性与可靠性。

      所谓“实时操作系统”,实际上是指操作系统工作时,其各种资源可以根据需要随时进行动态分配。由于各种资源可以进行动态分配,因此,其处理事务的能力较强、速度较快。

      5、中断和轮询的特点

      对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的,则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询要比I/O设备的速度要快得多,所以一般不会发生不能及时处理的问题。当然,再快的处理机,能处理的输入输出设备的数量也是有一定限度的。而且,程序轮询毕竟占据了CPU相当一部分处理时间,因此,程序轮询是一种效率较低的方式,在现代计算机系统中已很少应用。

      程序中断通常简称中断,是指CPU在正常运行程序的过程中,由于预先安排或发生了各种随机的内部或外部事件,使CPU中断正在运行的程序,而转到为响应的服务程序去处理。

      轮询——效率低,等待时间很长,CPU利用率不高。

      中断——容易遗漏一些问题,CPU利用率高。

    6、什么是临界区?如何解决冲突?

      每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不允许其他进程进入。

      (1)如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入;

      (2)任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待;

      (3)进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区;

      (4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

      7、说说分段和分页

      页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。

      段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。

      页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。

      分页的作业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

      8、说出你所知道的保持进程同步的方法?

      进程间同步的主要方法有原子操作、信号量机制、自旋锁、管程、会合、分布式系统等。

      9、Linux中常用到的命令

      显示文件目录命令ls        如ls

      改变当前目录命令cd        如cd /home

      建立子目录mkdir           如mkdir xiong

      删除子目录命令rmdir       如rmdir /mnt/cdrom

      删除文件命令rm            如rm /ucdos.bat

      文件复制命令cp            如cp /ucdos /fox

      获取帮助信息命令man      如man ls

      显示文件的内容less        如less mwm.lx

      重定向与管道type          如type readme>>direct,将文件readme的内容追加到文direct中

    10、Linux文件属性有哪些?(共十位)

      -rw-r--r--那个是权限符号,总共是- --- --- ---这几个位。

      第一个短横处是文件类型识别符:-表示普通文件;c表示字符设备(character);b表示块设备(block);d表示目录(directory);l表示链接文件(link);后面第一个三个连续的短横是用户权限位(User),第二个三个连续短横是组权限位(Group),第三个三个连续短横是其他权限位(Other)。每个权限位有三个权限,r(读权限),w(写权限),x(执行权限)。如果每个权限位都有权限存在,那么满权限的情况就是:-rwxrwxrwx;权限为空的情况就是- --- --- ---。

      权限的设定可以用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:

      一个文件aaa具有完全空的权限- --- --- ---。

      chmod u+rw aaa(给用户权限位设置读写权限,其权限表示为:- rw- --- ---)

      chmod g+r aaa(给组设置权限为可读,其权限表示为:- --- r-- ---)

      chmod ugo+rw aaa(给用户,组,其它用户或组设置权限为读写,权限表示为:- rw- rw- rw-)

      如果aaa具有满权限- rwx rwx rwx。

      chmod u-x aaa(去掉用户可执行权限,权限表示为:- rw- rwx rwx)

      如果要给aaa赋予制定权限- rwx r-x r-x,命令为:

      chmod u=rwx,go=rx aaa

      11、makefile文件的作用是什么?

      一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”。一旦写好,只需要一个make命令,整个工程完全自动编译,极大地提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具。一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

      12、简术OSI的物理层Layer1,链路层Layer2,网络层Layer3的任务。

      网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。

      链路层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。

      物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。

      13、什么是中断?中断时CPU做什么工作?

      中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。

      14、你知道操作系统的内容分为几块吗?什么叫做虚拟内存?他和主存的关系如何?内存管理属于操作系统的内容吗?

      操作系统的主要组成部分:进程和线程的管理,存储管理,设备管理,文件管理。虚拟内存是一些系统页文件,存放在磁盘上,每个系统页文件大小为4K,物理内存也被分页,每个页大小也为4K,这样虚拟页文件和物理内存页就可以对应,实际上虚拟内存就是用于物理内存的临时存放的磁盘空间。页文件就是内存页,物理内存中每页叫物理页,磁盘上的页文件叫虚拟页,物理页+虚拟页就是系统所有使用的页文件的总和。

    15、线程是否具有相同的堆栈?dll是否有独立的堆栈?

      每个线程有自己的堆栈。

      dll是否有独立的堆栈?这个问题不好回答,或者说这个问题本身是否有问题。因为dll中的代码是被某些线程所执行,只有线程拥有堆栈。如果dll中的代码是exe中的线程所调用,那么这个时候是不是说这个dll没有独立的堆栈?如果dll中的代码是由dll自己创建的线程所执行,那么是不是说dll有独立的堆栈?

      以上讲的是堆栈,如果对于堆来说,每个dll有自己的堆,所以如果是从dll中动态分配的内存,最好是从dll中删除;如果你从dll中分配内存,然后在exe中,或者另外一个dll中删除,很有可能导致程序崩溃。

      16、什么是缓冲区溢出?有什么危害?其原因是什么?

      缓冲区溢出是指当计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。

      危害:在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。

      造成缓冲区溢出的主原因是程序中没有仔细检查用户输入的参数。

      17、什么是死锁?其条件是什么?怎样避免死锁?

      死锁的概念:在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是两个或多个进程被无限期地阻塞、相互等待的一种状态。

      死锁产生的原因主要是:? 系统资源不足;? 进程推进顺序非法。

      产生死锁的必要条件:

      (1)互斥(mutualexclusion),一个资源每次只能被一个进程使用;

      (2)不可抢占(nopreemption),进程已获得的资源,在未使用完之前,不能强行剥夺;

      (3)占有并等待(hold andwait),一个进程因请求资源而阻塞时,对已获得的资源保持不放;

      (4)环形等待(circularwait),若干进程之间形成一种首尾相接的循环等待资源关系。

      这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

      死锁的解除与预防:理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。

      死锁的处理策略:鸵鸟策略、预防策略、避免策略、检测与恢复策略。

     1、程序和进程

      进程由两个部分组成:1)操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。2)地址空间。它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。

     

    定义

    使用系统运行资源情况

    程序

    计算机指令的集合,它以文件的形式存储在磁盘上。程序是静态实体passive Entity),在多道程序系统中,它是不能独立运行的,更不能与其他程序并发执行。

    不使用【程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源】。

     

    进程

    通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。

    定义:进程是进程实体(包括:程序段、相关的数据段、进程控制块PCB)的运行过程,是系统进行资源分配和调度的一个独立单位。

    使用【进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源。】

      2、进程与线程

      如果说操作系统引入进程的目的是为了提高程序并发执行,以提高资源利用率和系统吞吐量。那么操作系统中引入线程的目的,则是为了减少进程并发执行过程中所付出的时空开销,使操作系统能很好的并发执行。

      进程process定义了一个执行环境,包括它自己私有的地址空间、一个句柄表,以及一个安全环境;线程则是一个控制流,有他自己的调用栈call stack,记录了它的执行历史。

      线程由两个部分组成:1)线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。2)线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。当创建线程时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。

      进程与线程的比较如下:

    比较

    进程

    线程

    活泼性

    不活泼(只是线程的容器)

    活泼

    地址空间

    系统赋予的独立的虚拟地址空间(对于32位进程来说,这个地址空间是4GB

    在进程的地址空间执行代码。线程只有一个内核对象和一个堆栈,保留的记录很少,因此所需要的内存也很少。因为线程需要的开销比进程少

    调度

    仅是资源分配的基本单位

    独立调度、分派的基本单位

    并发性

    仅进程间并发(传统OS

    进程间、线程间并发

    拥有资源

    资源拥有的基本单位

    基本上不拥有资源

    系统开销

    创建、撤销、切换开销大

    仅保存少量寄存器内容,开销小。

      3、进程同步

      进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

      同步机制遵循的原则:

      (1)空闲让进;

      (2)忙则等待(保证对临界区的互斥访问);

      (3)有限等待(有限代表有限的时间,避免死等);

      (4)让权等待,(当进程不能进入自己的临界区时,应该释放处理机,以免陷入忙等状态)。

    4、进程间的通信是如何实现的?

      进程通信,是指进程之间的信息交换(信息量少则一个状态或数值,多者则是成千上万个字节)。因此,对于用信号量进行的进程间的互斥和同步,由于其所交换的信息量少而被归结为低级通信。

      所谓高级进程通信指:用户可以利用操作系统所提供的一组通信命令传送大量数据的一种通信方式。操作系统隐藏了进程通信的实现细节。或者说,通信过程对用户是透明的。

      高级通信机制可归结为三大类:

      (1)共享存储器系统(存储器中划分的共享存储区);实际操作中对应的是“剪贴板”(剪贴板实际上是系统维护管理的一块内存区域)的通信方式,比如举例如下:word进程按下ctrl+c,在ppt进程按下ctrl+v,即完成了word进程和ppt进程之间的通信,复制时将数据放入到剪贴板,粘贴时从剪贴板中取出数据,然后显示在ppt窗口上。

      (2)消息传递系统(进程间的数据交换以消息(message)为单位,当今最流行的微内核操作系统中,微内核与服务器之间的通信,无一例外地都采用了消息传递机制。应用举例:邮槽(MailSlot)是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输。邮槽是一种单向通信机制,创建邮槽的服务器进程读取数据,打开邮槽的客户机进程写入数据。

      (3)管道通信系统(管道即:连接读写进程以实现他们之间通信的共享文件(pipe文件,类似先进先出的队列,由一个进程写,另一进程读))。实际操作中,管道分为:匿名管道、命名管道。匿名管道是一个未命名的、单向管道,通过父进程和一个子进程之间传输数据。匿名管道只能实现本地机器上两个进程之间的通信,而不能实现跨网络的通信。命名管道不仅可以在本机上实现两个进程间的通信,还可以跨网络实现两个进程间的通信。

     

    同一机器两个进程间通信

    跨网络通信

    剪贴板Clipboard

    可以

    不可以

    匿名管道Pipe

    可以

    不可以

    命名管道(点对点单一通信,数据量可较大)Namedpipe

    可以

    可以

    邮槽(一对多,数据量较小,424字节以下)Mailslot

    可以

    可以

      5、线程同步

      根据用户模式及内核模式下的同步方式的不同,分类及对比如下:

     

    内核对象/

    非内核对象

    含义

    缺点

    适用

    关键代码段(临界区)CriticalSection

    非内核对象,工作在用户方式下,为用户模式对象

    从程序代码的角度来控制线程的并发性

    1.因为在等待进入关键代码段时无法设定超时值,所以其很容易进入死锁状态。2.不能跨进程使用。

    单个进程中线程间的同步(同步速度快)

    事件对象Event

    内核对象

    所有内核对象中最基本的。

    速度较慢(相比用户模式实现线程同步)

    多个进程间的各个线程间实现同步

    互斥对象Mutex

    内核对象

    代表对一个资源的独占式访问

    信号量

    Semaphore

    内核对象

    使用计数器来控制程序对一个共享资源的访问

      由于进程同步产生了一系列经典的同步问题“生产者-消费者”问题,“哲学家进餐”问题,“读者-写者”问题。


    常见的操作系统使用的文件系统整理

    文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

      【FAT】:

      常PC机使用的文件系统是FAT16。像基于MS-DOS,Win 95等系统都采用了FAT16文件系统。在Win 9X下,FAT16支持的分区最大为2GB。我们知道计算机将信息保存在硬盘上称为“簇”的区域内。使用的簇越小,保存信息的效率就越高。在FAT16的情况下,分区越大簇就相应的要大,存储效率就越低,势必造成存储空间的浪费。并且随着计算机硬件和应用的不断提高,FAT16文件系统已不能很好地适应系统的要求。在这种情况下,推出了增强的文件系统FAT32。同FAT16相比,FAT32主要具有以下特点:

      1、同FAT16相比FAT32最大的优点是可以支持的磁盘大小达到32G,但是不能支持小于512MB的分区。

      *基于FAT32的Win 2000可以支持分区最大为32GB;而基于 FAT16的Win 2000支持的分区最大为4GB。

      2、由于采用了更小的簇,FAT32文件系统可以更有效率地保存信息。如两个分区大小都为2GB,一个分区采用了FAT16文件系统,另一个分区采用了FAT32文件系统。采用FAT16的分区的簇大小为32KB,而FAT32分区的簇只有4KB的大小。这样FAT32就比FAT16的存储效率要高很多,通常情况下可以提高15%。

      3、FAT32文件系统可以重新定位根目录和使用FAT的备份副本。另外FAT32分区的启动记录被包含在一个含有关键数据的结构中,减少了计算机系统崩溃的可能性。

      【NTFS】:

      NTFS文件系统是一个基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。使用非常广泛的Windows NT 4.0采用的就是NTFS 4.0文件系统,相信它所带来的强大的系统安全性一定给广大用户留下了深刻的印象。Win 2000采用了更新版本的NTFS文件系统??NTFS 5.0,它的推出使得用户不但可以像Win 9X那样方便快捷地操作和管理计算机,同时也可享受到NTFS所带来的系统安全性。

      NTFS 5.0的特点主要体现在以下几个方面:

      1、NTFS可以支持的分区(如果采用动态磁盘则称为卷)大小可以达到2TB。而Win 2000中的FAT32支持分区的大小最大为32GB。

      2、NTFS是一个可恢复的文件系统。在NTFS分区上用户很少需要运行磁盘修复程序。NTFS通过使用标准的事物处理日志和恢复技术来保证分区的一致性。发生系统失败事件时,NTFS使用日志文件和检查点信息自动恢复文件系统的一致性。

      3、NTFS支持对分区、文件夹和文件的压缩。任何基于Windows的应用程序对NTFS分区上的压缩文件进行读写时不需要事先由其他程序进行解压缩,当对文件进行读取时,文件将自动进行解压缩;文件关闭或保存时会自动对文件进行压缩。

      4、NTFS采用了更小的簇,可以更有效率地管理磁盘空间。在Win 2000的FAT32文件系统的情况下,分区大小在2GB~8GB时簇的大小为4KB;分区大小在8GB~16GB时簇的大小为8KB;分区大小在16GB~32GB时,簇的大小则达到了16KB。而Win 2000的NTFS文件系统,当分区的大小在2GB以下时,簇的大小都比相应的FAT32簇小;当分区的大小在2GB以上时(2GB~2TB),簇的大小都为4KB。相比之下,NTFS可以比FAT32更有效地管理磁盘空间,最大限度地避免了磁盘空间的浪费。

      5、在NTFS分区上,可以为共享资源、文件夹以及文件设置访问许可权限。许可的设置包括两方面的内容:一是允许哪些组或用户对文件夹、文件和共享资源进行访问;二是获得访问许可的组或用户可以进行什么级别的访问。访问许可权限的设置不但适用于本地计算机的用户,同样也应用于通过网络的共享文件夹对文件进行访问的网络用户。与FAT32文件系统下对文件夹或文件进行访问相比,安全性要高得多。另外,在采用NTFS格式的Win 2000中,应用审核策略可以对文件夹、文件以及活动目录对象进行审核,审核结果记录在安全日志中,通过安全日志就可以查看哪些组或用户对文件夹、文件或活动目录对象进行了什么级别的操作,从而发现系统可能面临的非法访问,通过采取相应的措施,将这种安全隐患减到最低。这些在FAT32文件系统下,是不能实现的。

      6、在Win 2000的NTFS文件系统下可以进行磁盘配额管理。磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。设置磁盘配额后,可以对每一个用户的磁盘使用情况进行跟踪和控制,通过监测可以标识出超过配额报警阈值和配额限制的用户,从而采取相应的措施。磁盘配额管理功能的提供,使得管理员可以方便合理地为用户分配存储资源,避免由于磁盘空间使用的失控可能造成的系统崩溃,提高了系统的安全性。

      7、NTFS使用一个“变更”日志来跟踪记录文件所发生的变更。

    【Ext2】:

      Ext2是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。

      其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的 x86 电脑系统中,簇最大为 4KB,则单一文件大小上限为 2048GB,而文件系统的容量上限为 16384GB。

      但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,实际上能使用的文件系统容量最多也只有 2048GB。

      至于Ext3文件系统,它属于一种日志文件系统,是对ext2系统的扩展。它兼容ext2,并且从ext2转换成ext3并不复杂。

      【Ext3】:

      Ext3是一种日志式文件系统,是对ext2系统的扩展,它兼容ext2。日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机。

      如果在文件系统尚未shutdown前就关机 (如停电) 时,下次重开机后会造成文件系统的资料不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的资料都不会流失。

      为了克服此问题,使用所谓‘日志式文件系统 (Journal File System) ’。此类文件系统最大的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。

      由于资料的写入动作包含许多的细节,像是改变文件标头资料、搜寻磁盘可写入空间、一个个写入资料区段等等,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要重整。

      然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回溯并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间。

      【Ext4】:

      Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:

      1、与 Ext3 兼容。执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。

      2、更大的文件系统和更大的文件。较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。

      3、无限数量的子目录。Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。

      4、Extents。Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。

      5、多块分配。当写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。

      6、延迟分配。Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。

      7、快速 fsck。以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。

      8、日志校验。日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。

    9、“无日志”(No Journaling)模式。日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。

      10、在线碎片整理。尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。

      11、inode 相关特性。Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes reservation)。

      12、持久预分配(Persistent preallocation)。P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。

      13、默认启用 barrier。磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 “mount -o barrier=0” 命令禁用该特性。)

      【ZFS】:

      ZFS源自于Sun Microsystems为Solaris操作系统开发的文件系统。ZFS是一个具有高存储容量、文件系统与卷管理概念整合、崭新的磁盘逻辑结构的轻量级文件系统,同时也是一个便捷的存储池管理系统。ZFS是一个使用CDDL协议条款授权的开源项目。

      【HFS】:

      1、HFS文件系统概念

      分层文件系统(Hierarchical File System,HFS)是一种由苹果电脑开发,并使用在Mac OS上的文件系统。最初被设计用于软盘和硬盘,同时也可以在在只读媒体如CD-ROM上见到。

      2、HFS文件系统开发过程

      HFS首次出现在1985年9月17日,作为Macintosh电脑上新的文件系统。它取代只用于早期Mac型号所使用的平面文件系统Macintosh File System(MFS)。因为Macintosh电脑所产生的数据,比其它通常的文件系统,如DOS使用的FAT或原始Unix文件系统所允许存储的数据更多。苹果电脑开发了一种新式更适用的文件系统,而不是采用现有的规格。例如,HFS允许文件名最多有31个字符的长度,支持metadata和双分支(每个文件的数据和资源支分开存储)文件。

      尽管HFS象其它大多数文件系统一样被视为专有的格式,因为只有它为大多数最新的操作系统提供了很好的通用解决方法以存取HFS格式磁盘。

      在1998年,苹果电脑发布了HFS Plus,其改善了HFS对磁盘空间的地址定位效率低下,并加入了其它的改进。当前版本的Mac OS仍旧支持HFS,但从Mac OS X开始HFS卷不能作为启动用。

      3、构成方式

      分层文件系统把一个卷分为许多512字节的“逻辑块”。这些逻辑块被编组为“分配块”,这些分配块可以根据卷的尺寸包含一个或多个逻辑块。HFS对地址分配块使用16位数值,分配块的最高限制数量是65536。

      组成一个HFS卷需要下面的五个结构:

      1)卷的逻辑块0和1是启动块,它包含了系统启动信息。例如,启动时载入的系统名称和壳(通常是Finder)文件。

      2)逻辑块2包含主目录块(Master Directory Block,简称MDB)。

      3)逻辑块3是卷位图(Volume Bitmap)的启动块,它追踪分配块使用状态。

      4)总目录文件(Catalog File)是一个包含所有文件的记录和储存在卷中目录的B*-tree。

      5)扩展溢出文件(Extent Overflow File)是当最初总目录文件中三个扩展占用后,另外一个包含额外扩展记录的分配块对应信息的B*-tree。

    内核怎样管理你的内存

    在分析了进程的虚拟地址布局,我们转向内核以及他管理用户内存的机制。下图是gonzo的例子:

      Linux进程在内核中是由task_struct进程描述符实现的,task_struct的mm字段指向内存描述符mm_struct,他是进程的一个内存执行摘要。如上图所示,mm_struct存储了内存各个段的开始和结束地址、进程所使用的内存页面数(rss代表常驻集合大小)、使用的虚拟地址空间总数等等。在内存描述符中我们也可以找到两个用于管理进程内层的字段:虚拟内存集合和页表。Gonzo的内存区域如下图:

      每个虚拟内存区域(VMA)是一个虚拟地址空间上连续的区域;这些区域不会彼此覆盖。Vm_area_struct结构描述了一个内存区域,包括他的开始和技术地址、flags字段指定了他的行为和访问权限,vm_file字段指定了该区域映射的实际文件。一个没有映射文件的VMA成为匿名的。除了内存映射段以外,上面的每个内存段(堆、栈等等)相当于一个单独的VMA。这不是必须的,尽管在x86机器上通常是这样。VMA不会关心他在哪个段里面。

      一个进程的所有VMA以两种方式存储在他的内存描述符中,一种是以链表的方式存放在mmap字段,以开始虚拟地址进行了排序,另一种是以红黑树的方式存放,mm_rb字段为这颗红黑树的根。红黑树可以让内核根据给定的虚拟地址快速地找到内存区域。当我们读取文件/proc/pid_of_process/maps,内核仅仅是通过进程VMA的链接同时打印出每一个。


    展开全文
  • 面试/笔试第二弹 —— 操作系统面试问题集锦

    万次阅读 多人点赞 2017-11-16 20:10:40
    本文对面试/笔试过程中经常会被问到的一些关于操作系统的问题进行了梳理和总结,一方面方便自己温故知新,另一方面也希望为找工作的同学们提供一个复习参考。关于这块内容的初步了解和整体掌握,建议大家读一读...

    写在前面:

      找工作告一段落,期间经历了很多事情,也思考了许多问题,最后也收获了一些沉甸甸的东西 —— 成长和一些来自阿里、百度、京东(sp)、华为等厂的Offer。好在一切又回到正轨,接下来要好好总结一番才不枉这段经历,遂将此过程中笔者的一些笔试/面试心得、干货发表出来,与众共享之。在此特别要感谢CSDN以及广大朋友的支持,我将坚持记录并分享自己所学、所想、所悟,央请大家不吝赐教,提出您宝贵的意见和建议,以期共同探讨提高。


    摘要:

      本文对面试/笔试过程中经常会被问到的一些关于操作系统的问题进行了梳理和总结,一方面方便自己温故知新,另一方面也希望为找工作的同学们提供一个复习参考。关于这块内容的初步了解和整体掌握,建议大家读一读《操作系统概念》(高教版)一书。


    版权声明:

      本文原创作者:书呆子Rico
      作者博客地址:http://blog.csdn.net/justloveyou_/


    1、进程和线程以及它们的区别

    • 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;

    • 线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的 实时性,实现进程内部的并发;

    • 一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程而存在;

    • 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。
        
      更多关于 操作系统历史及进程/线程由来 的相关介绍请见笔者博文《Java 并发:并发背景》


    2、进程间的通信的几种方式

    • 管道(pipe)及命名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

    • 信号(signal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;

    • 消息队列:消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息;

    • 共享内存:可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等;

    • 信号量:主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段;

    • 套接字:这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。


    3、线程同步的方式

    • 互斥量 Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问

    • 信号量 Semphare:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量

    • 事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作


    4、什么是死锁?死锁产生的条件?

    1). 死锁的概念

      在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲,就是两个或多个进程无限期的阻塞、相互等待的一种状态。


    2). 死锁产生的四个必要条件

    • 互斥:至少有一个资源必须属于非共享模式,即一次只能被一个进程使用;若其他申请使用该资源,那么申请进程必须等到该资源被释放为止;

    • 占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有;

    • 非抢占:进程不能被抢占,即资源只能被进程在完成任务后自愿释放

    • 循环等待:若干进程之间形成一种头尾相接的环形等待资源关系


    3). 死锁的处理基本策略和常用方法

      解决死锁的基本方法主要有 预防死锁、避免死锁、检测死锁、解除死锁 、鸵鸟策略 等。

      (1). 死锁预防
      
      死锁预防的基本思想是 只要确保死锁发生的四个必要条件中至少有一个不成立,就能预防死锁的发生,具体方法包括:

    • 打破互斥条件:允许进程同时访问某些资源。但是,有些资源是不能被多个进程所共享的,这是由资源本身属性所决定的,因此,这种办法通常并无实用价值。

    • 打破占有并等待条件:可以实行资源预先分配策略(进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行;只有当系统能满足当前进程所需的全部资源时,才一次性将所申请资源全部分配给该线程)或者只允许进程在没有占用资源时才可以申请资源(一个进程可申请一些资源并使用它们,但是在当前进程申请更多资源之前,它必须全部释放当前所占有的资源)。但是这种策略也存在一些缺点:在很多情况下,无法预知一个进程执行前所需的全部资源,因为进程是动态执行的,不可预知的;同时,会降低资源利用率,导致降低了进程的并发性。

    • 打破非抢占条件:允许进程强行从占有者哪里夺取某些资源。也就是说,但一个进程占有了一部分资源,在其申请新的资源且得不到满足时,它必须释放所有占有的资源以便让其它线程使用。这种预防死锁的方式实现起来困难,会降低系统性能。

    • 打破循环等待条件:实行资源有序分配策略。对所有资源排序编号,所有进程对资源的请求必须严格按资源序号递增的顺序提出,即只有占用了小号资源才能申请大号资源,这样就不回产生环路,预防死锁的发生。


      (2). 死锁避免的基本思想
      
      死锁避免的基本思想是动态地检测资源分配状态,以确保循环等待条件不成立,从而确保系统处于安全状态。所谓安全状态是指:如果系统能按某个顺序为每个进程分配资源(不超过其最大值),那么系统状态是安全的,换句话说就是,如果存在一个安全序列,那么系统处于安全状态。资源分配图算法和银行家算法是两种经典的死锁避免的算法,其可以确保系统始终处于安全状态。其中,资源分配图算法应用场景为每种资源类型只有一个实例(申请边,分配边,需求边,不形成环才允许分配),而银行家算法应用于每种资源类型可以有多个实例的场景。


      (3). 死锁解除

      死锁解除的常用两种方法为进程终止和资源抢占。所谓进程终止是指简单地终止一个或多个进程以打破循环等待,包括两种方式:终止所有死锁进程和一次只终止一个进程直到取消死锁循环为止;所谓资源抢占是指从一个或多个死锁进程那里抢占一个或多个资源,此时必须考虑三个问题:

      (I). 选择一个牺牲品
      (II). 回滚:回滚到安全状态
      (III). 饥饿(在代价因素中加上回滚次数,回滚的越多则越不可能继续被作为牺牲品,避免一个进程总是被回滚)


    5、进程有哪几种状态?

    • 就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源;

    • 运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数;

    • 阻塞状态: 进程等待某种条件,在条件满足之前无法执行;

                     进程的三种状态.jpg-14.1kB


    6、线程有几种状态?

      在 Java虚拟机 中,线程从最初的创建到最终的消亡,要经历若干个状态:创建(new)、就绪(runnable/start)、运行(running)、阻塞(blocked)、等待(waiting)、时间等待(time waiting) 和 消亡(dead/terminated)。在给定的时间点上,一个线程只能处于一种状态,各状态的含义如下图所示:

              这里写图片描述


      线程各状态之间的转换如下:

                 线程的状态.jpg-59.9kB

      更多关于 线程状态及其转化 的相关叙述,请见笔者博文《 Java 并发:Thread 类深度解析》


    7、分页和分段有什么区别(内存管理)?

      段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)

      页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。

    两者的不同点:

    • 目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息;

    • 大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;

    • 地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间;

    • 信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;

    • 内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。


    8、操作系统中进程调度策略有哪几种?

    • FCFS(先来先服务,队列实现,非抢占的):先请求CPU的进程先分配到CPU

    • SJF(最短作业优先调度算法):平均等待时间最短,但难以知道下一个CPU区间长度

    • 优先级调度算法(可以是抢占的,也可以是非抢占的):优先级越高越先分配到CPU,相同优先级先到先服务,存在的主要问题是:低优先级进程无穷等待CPU,会导致无穷阻塞或饥饿;解决方案:老化

    • 时间片轮转调度算法(可抢占的):队列中没有进程被分配超过一个时间片的CPU时间,除非它是唯一可运行的进程。如果进程的CPU区间超过了一个时间片,那么该进程就被抢占并放回就绪队列。

    • 多级队列调度算法:将就绪队列分成多个独立的队列,每个队列都有自己的调度算法,队列之间采用固定优先级抢占调度。其中,一个进程根据自身属性被永久地分配到一个队列中。

    • 多级反馈队列调度算法:与多级队列调度算法相比,其允许进程在队列之间移动:若进程使用过多CPU时间,那么它会被转移到更低的优先级队列;在较低优先级队列等待时间过长的进程会被转移到更高优先级队列,以防止饥饿发生。


    9、说一说进程同步有哪几种机制

      原子操作、信号量机制、自旋锁管程、会合、分布式系统


    10、什么是虚拟内存?

    1).内存的发展历程

      没有内存抽象(单进程,除去操作系统所用的内存之外,全部给用户程序使用) —> 有内存抽象(多进程,进程独立的地址空间,交换技术(内存大小不可能容纳下所有并发执行的进程)
    )—> 连续内存分配(固定大小分区(多道程序的程度受限),可变分区(首次适应,最佳适应,最差适应),碎片) —> 不连续内存分配(分段,分页,段页式,虚拟内存)


    2).虚拟内存

      虚拟内存允许执行进程不必完全在内存中。虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻进行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令。这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块(称为帧,通常页和帧大小相等),还有一些没加载在内存中的对应在硬盘上,如图5所示。
    注意,请求分页系统、请求分段系统和请求段页式系统都是针对虚拟内存的,通过请求实现内存与外存的信息置换。

                       这里写图片描述

      由图5可以看出,虚拟内存实际上可以比物理内存大。当访问虚拟内存时,会访问MMU(内存管理单元)去匹配对应的物理地址(比如图5的0,1,2)。如果虚拟内存的页并不存在于物理内存中(如图5的3,4),会产生缺页中断,从磁盘中取得缺的页放入内存,如果内存已满,还会根据某种算法将磁盘中的页换出。


    3). 页面置换算法

    • FIFO先进先出算法:在操作系统中经常被用到,比如作业调度(主要实现简单,很容易想到);

    • LRU(Least recently use)最近最少使用算法:根据使用时间到现在的长短来判断;

    • LFU(Least frequently use)最少使用次数算法:根据使用次数来判断;

    • OPT(Optimal replacement)最优置换算法:理论的最优,理论;就是要保证置换出去的是不再被使用的页,或者是在实际内存中最晚使用的算法。


    4). 虚拟内存的应用与优点

      虚拟内存很适合在多道程序设计系统中使用,许多程序的片段同时保存在内存中。当一个程序等待它的一部分读入内存时,可以把CPU交给另一个进程使用。虚拟内存的使用可以带来以下好处:

    • 在内存中可以保留多个进程,系统并发度提高

    • 解除了用户与内存之间的紧密约束,进程可以比内存的全部空间还大


    11、颠簸

      颠簸本质上是指频繁的页调度行为,具体来讲,进程发生缺页中断,这时,必须置换某一页。然而,其他所有的页都在使用,它置换一个页,但又立刻再次需要这个页。因此,会不断产生缺页中断,导致整个系统的效率急剧下降,这种现象称为颠簸(抖动)。

      内存颠簸的解决策略包括:

    • 如果是因为页面替换策略失误,可以修改替换算法来解决这个问题;

    • 如果是因为运行的程序太多,造成程序无法同时将所有频繁访问的页面调入内存,则要降低多道程序的数量;

    • 否则,还剩下两个办法:终止该进程或增加物理内存容量。


    12、局部性原理

    (1). 时间上的局部性:最近被访问的页在不久的将来还会被访问;

    (2). 空间上的局部性:内存中被访问的页周围的页也很可能被访问。


    引用

    分段和分页内存管理
    BAT面试之操作系统内存详解

    展开全文
  • 操作系统常见笔试面试题(一)

    万次阅读 多人点赞 2018-08-07 11:23:51
    本博客内容 一、进程与线程的关系以及区别 二、Windows下的内存是如何管理的 三、中断和轮询的特点 四、什么是临界区、如何解决冲突? 五、分段和分页的区别? 六、进程间通信有哪些方式?...
  • 操作系统常见面试

    万次阅读 多人点赞 2016-09-29 21:29:55
    1. 进程的有哪几种状态,状态转换图,及导致转换的事件。...新建态:刚刚创建的进程,操作系统还没有把它加入到可执行进程组中,通常是进程控制块已经创建但是还没有加载到内存中的进程。 退出态:操作系统从可执行
  • 面试必备-操作系统

    千次阅读 多人点赞 2019-08-03 11:15:34
    操作系统理论性非常强,刚开始学起来非常粗糙。然而,面试过程中经常会被问到计算机网络或者操作系统,有兴趣的同学可以看我这篇有关于计算机网络的文章...
  • 一、概述 ...操作系统通过引入进程和线程,使得程序能够并发运行。 2. 共享 共享是指系统中的资源可以被多个并发进程共同使用。 有两种共享方式:互斥共享和同时共享。 互斥共享的资源称为临界资源,...
  • Java 面试操作系统

    万次阅读 2020-03-26 20:21:02
    Linux常用命令 cd命令:切换目录 ls命令:查看文件与目录 cp命令:复制文件 mv命令:移动文件或文件夹 rm命令:删除文件或文件夹 mkdir命令:创建文件夹 tar命令:文件压缩 / 解压 vim命令:文本编辑 ...
  • 操作系统常见面试和笔试题

    万次阅读 2017-09-06 13:22:36
    操作系统相关知识广泛应用在程序设计、系统调优、问题追查、性能优化等重要场景中,一个不懂操作系统的程序员不可能写出优秀的代码,更不可能设计出优秀的系统架构,所以操作系统知识也是面试中不可或缺的一部分,...
  • 计算机操作系统是计算机专业必修的专业基础课程,是考研的必考科目。它的特点是概念多、较抽象和涉及面广,所以无论是大学学习还是考研,很多同学都把它当做一块硬骨头,其实只要我们掌握正确的学习方法,操作系统...
  • 面试考点——用户态和内核态的区别

    万次阅读 多人点赞 2019-03-28 03:17:07
    系统态(也称为管态或核心态),操作系统在系统态运行——运行操作系统程序 用户态(也称为目态),应用程序只能在用户态运行——运行用户程序 在实际运行过程中,处理机会在系统态和用户态间切换。相应地,现代多数...
  • linux操作系统常用面试题目

    千次阅读 2018-03-17 22:58:00
    请描述一下用多线程怎么实现生产者消费者模型知道nginx的惊群现象吗?怎么解决?请说一下epoll的内核实现,都涉及哪些数据结构?select和epoll的区别?fork()都会做哪些复制?什么是写时拷贝?...
  • iOS进阶面试题----多线程

    万次阅读 2013-11-27 10:34:51
    1 多线程是什么  多线程是个复杂的概念...从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以以便听歌、一边写博客;对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户的
  • 面试题分布式事务了解吗?你们是如何解决分布式事务问题的?面试题剖析一般来说,分布式事务的实现主要有以下 5 种方案:XA 方案TCC 方案本地消息表可靠消息最终一致性方案最大努力通知方案两阶段提交方案/XA方案...
  • 必看书籍:剑指offer、程序员面试宝典 来自:腾讯、搜狐、网易、烽火、百度、大众点评、美团、风行 1. 死锁是什么?什么情况下产生?怎么解决? 2. 设计模式(尤其是单例模式,要会写该模式的...
  • 深信服C++面试回忆

    千次阅读 2018-03-17 21:29:07
    然后面试官就开始疯狂问操作系统了。1.操作系统之内存管理。当时感觉这个问题问的有点大,我首先想到的是内存分配,所以我先答了内存分配的策略,名词也有点想不起来了,我就说,先分配最大的再分配……然后面试官...
  • 答案参考:网络常见面试题 精选IT书籍 面试题 笔试大全 IT导航 系统架构 在线编程1、简单介绍一下HTTP的长连接和短连接?2、简述计算机网络中的七层模型?3、常见的HTTP状态码有哪些?4、TCP的三次握手过程?为...
  • Java面试知识点汇总

    万次阅读 多人点赞 2020-06-26 15:21:23
    为了找到心仪的工作而努力吧 最近在刷各种面经,把学会的知识点汇总一下以便查漏补缺: 未完待续…
  • 技术面试系统设计题(一)

    万次阅读 2018-01-09 09:10:30
    技术面试系统设计题(一) 本文为课程翻译和学习笔记,课程地址System Design for Tech Interviews。 关于课后题,这儿就不公布答案了。应该还是比较简单的。 什么是系统设计题 在面试的时候,面试官经常会...
1 2 3 4 5 ... 20
收藏数 212,562
精华内容 85,024
关键字:

操作系统面试