操作系统常见面试题

信号量是一个整型变量,根据控制对象的不同被赋予不同的值。信号量分为如下两类:

1、公用信号量:实现进程间的互斥,初值为1或资源的数目。

2、私用信号量:实现进程间的同步,初值为0或某个正整数。

信号量的物理意义:信号量为正,代表某资源的可用数;信号量为负,其绝对值表示阻塞队列中等待该资源的进程数。

 

OPT:Optimal page replacement algorithm最佳页面替换算法。

LRU:Least Recently Used 近期最少使用算法。

MFU:Most Frequently Used最常使用页面置换算法

LFU:Least Frequently Used最近最不常使用算法。

 

文件是按块存储的,如果取更大的块,一次读取时会得到更多的数据,即磁盘吞吐率提高;但大块也会导致有时数据装不满,从而磁盘利用率下降 。

 

某单CPU系统中有输入和输出设备各1台,现有3个并发执行的作业,每个作业的输入、计算和输出时间均分别为2ms、3ms和4ms,且都按输入、计算和输出的顺序执行,则执行完3个作业需要的时间最少是 

按流水线执行时所需时间最短。

流水线计算公式为:1条指令执行时间+(指令条数-1)*流水线周期。

1条指令执行时间是完整的输入+计算+输出时间,也就是2ms+3ms+4ms=9ms

流水线的周期为执行时间最长的一段,也就是4ms

所以按流水线执行后所需的时间为9+(3-1)*4 = 17ms

 

现在有3个同时到达的作业J1、J2和J3,他们的执行时间分别是T1、T2和T3,且T1

系统按照单道方式运行且采用短作业优先算法,所以它们的执行顺序为:T1->T2->T3,
它们各自的周转时间为:
T1:T1;
T2:T1+T2;
T3:T1+T2+T3;
所以它们的平均周转时间为:

(3T1+2T2+T3)/3

 

A,内存泄露是程序设计的bug,不是操作系统的问题

B,内存泄露跟线程数无关

C,内存泄露是进程申请了内存却没有释放。导致占用内存无限上升

D,进程退出之前释放申请的内存,不代表进程运行过程中没有内存泄露

E,java是自动管理内存的,但是也会有内存泄露,比如加入HashMap的对象hash值改变了就无法从HashMap中remove,这就造成了内存泄露

 

 

某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有33个微命令,构成5个互斥类,分别包含7、3、12、5和6个微命令,则操作控制字段至少有()。

大概是7、3、12、5、6分别至少需要23、22、24、23、23,所以3+2+4+3+3=15

 

以下( )设备适合采用 DMAI/O 控制方式:

DMA的英文拼写是"Direct Memory Access",汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。因此D磁盘符合

 

操作系统常见面试题_第1张图片

 

时间片轮转就是保证每个都能得到等概率的执行

 

虚拟内存 是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存 (一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片, 还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。 与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易, 对真正的物理内存(例如RAM)的使用也更有效率。

缺页中断 一个页(Page)是一个固定容量的内存区块,是物理内存和外部存储(如硬盘等) 传输的单位。当一个程序访问一个映射到地址空间却实际并未加载到物理内存的页(page)时, 硬件向软件发出的一次中断(或异常)就是一个缺页中断或叫页错误(page fault)。

抖动 在分页存储管理系统中,内存中只存放了那些经常使用的页面, 而其它页面则存放在外存中,当进程运行需要的内容不在内存时, 便启动磁盘读操作将所需内容调入内存,若内存中没有空闲物理块, 还需要将内存中的某页面置换出去。也就是说,系统需要不断地在内外存之间交换信息。 若在系统运行过程中,刚被淘汰出内存的页面,过后不久又要访问它, 需要再次将其调入。而该页面调入内存后不久又再次被淘汰出内存,然后又要访问它。 如此反复,使得系统把大部分时间用在了页面的调入/换出上, 而几乎不能完成任何有效的工作,这种现象称为抖动。

 

 

计算机的存储系统一般指主存储器和辅助存储器,即为内存和硬盘。

 

操作系统常见面试题_第2张图片

 

操作系统常见面试题_第3张图片

计算进程会占用大量的cpu时间,而i/o大的会占用较少的cpu资源,相当于短作业,所以应该优先权更高。

 

多道批处理主要的特点:

1.系统的吞吐量大

2.资源的利用率高

但由于多道批处理是整批的作业在运行,因此有时候要等很长时间才能运行完,所以效率很重要。

这里需要注意的是:多道批处理还不具有交互性。

 

 

  1. 处理机管理:进程管理应该是属于处理机管理的一部分,不同类型的操作系统将针对不同情况来采取不同的调度策略。如先来先服务、优先级调度、分时轮转等调度策略,来提高系统资源的利用率。
  2. 存储器管理:主要是指针对计算机的主存管理。
  3. 设备管理:主要涉及对系统中的各种输入/输出设备等的管理和控制问题。
  4. 文件管理:又称信息管理或文件系统,在现代计算机操作系统中,将各种信息资源组织成文件存储在计算机的硬盘或者磁带上。文件管理就是对这些信息资源进行存储、检索和保护,以便用户能方便、安全地访问它们。



在一个请求页式存储管理中,一个程序的页面走向为4, 3, 2, 1, 3, 5, 4, 3, 2, 1, 5,并采用LRU算法。假设分配给该程序的存储块M分别为3和4,则该访问中发生的缺页次数F分别是?

 

①程序。作用:描述进程要完成的功能。
②数据。作用:程序在执行时所需要的数据和工作区。
③ PCB。作用:包含进程的描述信息和控制信息。它是进程存在的唯一标志。 进程控制块

 

并发是同一个时刻发生,并行是在同一个时间段内发生

 

量的使用wait 和signal 两种原子操作,使其分布在各个进程中,会给系统的管理带来麻烦,是的过程不可控,不可控则就容易造成结果无法预料。也不知道会对整个系统带来什么麻烦

 

操作系统常见面试题_第4张图片

 

 

银行家算法:

参与者有客户,银行家以及资金。   客户相当于是申请资源的进程,银行家相当于是操作系统,而资金就相当于是资源。

银行家给客户分配资源之前,会预先估计资金分配的安全性。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。否则,就不给顾客分配。

 

DMA 的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。

 

虚地址通常指的是逻辑地址,而程序执行所要访问的内存地址指的是物理地址!!!

 

线程占有的都是不共享的,其中包括:栈、寄存器、状态、程序计数器

线程间共享的有:堆,全局变量,静态变量;

进程占有的资源有:地址空间,全局变量,打开的文件,子进程,信号量、账户信息。

 

死锁是进程的互相等待

 

分布式系统是将任务分布到多台处理机上运行,通过合理调度,提高并行度。

 

设计实时操作系统时,首先应该考虑系统的实时性和可靠性。

 

在总线结构中,所有的数据都需经过总线传送,总线若出现故障则整个网络就会瘫痪。而且一次仅能一个端用户发送数据,其它端用户必须等待到获得发送权。数据传输率不高,一般适用于微机系统。

 

操作系统常见面试题_第5张图片

 

A:一个进程由 程序、数据和进程控制块三部分组成

B:引入线程后,进程依然是可独立分配资源的基本单位(线程是处理器调度和分派的基本单位)

D:同一进程中的所有线程可共享该进程中所有的资源和变量

 

动态链接也要以段为单位进行管理。

 

封闭性:指的是程序一但开始执行,其计算结果就取决于程序本身,不受外界因素影响。

 

可再现性:是指当程序重复执行多次时,必将得到相同结果。

 

事实:程序并发执行的时候可能失去封闭性和可再现性(即 一个多道程序可能具有封闭性和可再现性)

 

时间片用完后,进程进入就绪队列,为了防止它一直占用CPU,这时可以降低其优先级。

 

首次适应算法:

最自然的过程,只是按照 空闲分区表(空闲区链)中的空闲分区的地址从低到高找到第一个可以满足需要的空闲分区即可。

 

进程间通信: 1,管道(Pipe)及命名管道(Named pipe) 2,信号(Signal) 3,消息队列(Message queue) 4,共享内存(Shared memory) 5,套接字(Socket) 6,信号量(Semaphore)

 

 

 

 

1、fork

一个程序一调用fork函数,系统就为一个新的进程准备了前述三个段,首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于数据段和堆栈段,系统则复制一份给新的进程,这样,父进程的所有数据都可以留给子进程,但是,子进程一旦开始运行,虽然它继承了父进程的一切数据,但实际上数据却已经分开,相互之间不再有影响了,也就是说,它们之间不再共享任何数据了。而如果两个进程要共享什么数据的话,就要使用另一套函数(shmget,shmat,shmdt等)来操作。现在,已经是两个进程了,对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零,这样,对于程序,只要判断fork函数的返回值,就知道自己是处于父进程还是子进程中。事实上,目前大多数的unix系统在实现上并没有作真正的copy。一般的,CPU都是以“页”为单位分配空间的,象INTEL的CPU,其一页在通常情况下是4K字节大小,而无论是数据段还是堆栈段都是由许多“页”构成的,fork函数复制这两个段,只是“逻辑”上的,并非“物理”上的,也就是说,实际执行fork时,物理空间上两个进程的数据段和堆栈段都还是共享着的,当有一个进程写了某个数据时,这时两个进程之间的数据才有了区别,系统就将有区别的“页”从物理上也分开。系统在空间上的开销就可以达到最小。

 

 2、exec

一个进程一旦调用exec类函数,它本身就“死亡”了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。不过exec类函数中有的还允许继承环境变量之类的信息,这个通过exec系列函数中的一部分函数的参数可以得到。

 

多进程可以在不同的核上运行,但是线程不可以跨机器迁移,因为线程是存在于单一的进程之中,只能在一个核上运行

 

并行性是指两个或多个事件在同一时刻发生

并发性是指两个或多个事件在同一时间间隔内发生

 

A错,进程拥有独立的地址空间;
B错,主线程和子线程是并行关系的时候,并没有依赖关系。父进程和子进程中,子进程是父进程的一个副本,创建子进程后,子 进程会有自己的空间,然后把父进程的数据拷贝到子进程的空间里。运行时,谁先运行是不确定的,这由系统决定;
C错,多线程和多进程都会引起死锁,一般说的 死锁指的是进程间的死锁。

 

两个并发的进程,其中一个进程对另一个进程的影响常常是不可预期的,甚至是无法再现的。这是因为两个并发进程执行的相对速度无法相互控制,交往的并发进程的速率不仅处理器调度的影响,而且还受到与这两个交往的并发进程无关的其它进程的影响,所以一个进程的速率通常无法为另一个进程所知。因此交往的并发进程的执行就可能产生各种与时间有关的错误。

       那么一个进程被中断后,哪个进程可以运行呢?被中断的进程什么时候能再去占用处理器呢?这是与进程调度策略有关的.所以,进程执行的相对速度不能由进程自己来控制,还与进程调度策咯有关。

 

关中断 :首先要知道中断是指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。 
关中断是指在此中断处理 完成前,不处理其它中断

 

死锁是多个进程或者多线程竞争互斥资源时长见的问题,假如两个进程a,b,进程a占据了资源S1,申请访问资源S2,进程b占据了资源S2,申请访问S1,两个进程互不相让,都在等待对方进程释放该资源,这就造成了死锁

 

1.当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞
2.当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行加锁的线程将会被阻塞
3.当读写锁在读模式的锁状态时,如果有另外的线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁的请求,这样可以避免读模式锁长期占用,而等待的写模式锁请求则长期阻塞。

 

线程五大状态:new(新建),ready(就绪),running(运行),blocked(阻塞),dead(死亡)

 

首次适应法:从空闲 分区表 的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高 地址空间 保留大的空闲区。

最佳适应算法:从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区的一种计算方法,这种方法能使碎片尽量小。

最坏适应分配算法:要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。

循环首次适应算法: 该算法是首次适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。

 

 

 

 

你可能感兴趣的:(操作系统常见面试题)