Java面试操作系统篇

来源:互联网 发布:零售批发软件 编辑:程序博客网 时间:2024/05/29 17:38

1.进程间的通信方式

# 管道( pipe ):管道是一种半双工的通信方式数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 信号量( semophore )信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ): 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 共享内存( shared memory ):共享内存就是映射一段能被其他进程所访问的内存这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

2.关于系统调用的一些知识

统调用把应用程序的请求传输给系统内核执行

利用系统调用能够得到操作系统提供的多种服务

是操作系统提供给编程人员的接口

系统调用给用户屏蔽了设备访问的细节

系统调用保护了一些只能在内核模式执行的操作指令

调用程序是运行在用户态,而被调用的程序是运行在系统态


3.在动态分区分配方案中,系统回收主存,合并空闲空间时需修改空闲区表,以下哪种情况空闲区会减1?

  • 只要回收主存,空闲区数就会减一
  • 空闲区数和主存回收无关
  • 无上邻空闲区,也无下邻空闲区
  • 有上邻空闲区,但无下邻空闲区
  • 有下邻空闲区,但无上邻空闲区
  • 有上邻空闲区,也有下邻空闲区
    在分区分配方案中,回收一个分区时有几种不同的邻接情况,在各种情况下应如何处理? 答:有四种:上邻,下邻,上下相邻,上下不相邻。 
    (1)回收分区的上邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。 
    (2)回收分区的下邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。 
    (3)回收分区的上、下邻分区都是空闲的(空闲区个数为2),需要将三个空闲区合并成一个更大的空闲区(空闲区个数为1 ),然后修改空闲区表、 
    (4)回收分区的上、下邻分区都不是空闲的,则直接将空闲区记录在空闲区表中。

分析:

A:错误,因为回收主存时,要根据相邻分区空闲情况决定空闲分区个数,如果不考虑合并的话,空闲分区个数增加一个,因为可能发生合并情况,所以可能- ,可能不变;
B:由上知,错误;
C:无上邻空闲区,也无下邻空闲区,不需要合并空闲分区,空闲分区个数加1;
D:有上邻空闲区,但无下邻空闲区,需要将刚刚的空闲分区表的起始地址修改为上邻空闲区的起始地址和空闲分区大小,但是空闲分区个数不变;
E:有下邻空闲区,但无上邻空闲区,刚刚的空闲分区表起始位置不用改变,空闲分区大小改变,空闲分区个数不变;
F:有上邻空闲区,也有下邻空闲区,假设原来是2个空闲分区,新回收一个,发现前后都是空闲的,将三个合并为1个,最后结果为1个空闲分区,空闲分数个数减1

4.常见的调度算法:
1.先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。 

2.短作业优先调度算法 (SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。  

3.最高响应比优先算法(HRN)FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。

4. 基于优先数调度算法(HPF)每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。


5.锁的问题

在使用锁保证现场安全时可能会出现 活跃度 失败的情况主要包括 饥饿、丢失信号、和活锁、死锁 等。【多线程除了死锁之外遇到最多的就是活跃度问题了】

饥饿 :指线程需要访问的资源 被永久拒绝 ,以至于不能再继续进行。解决饥饿问题需要平衡线程对资源的竞争,如线程的优先级、任务的权重、执行的周期等。

活锁 :指线程虽然没有被阻塞,但由于某种条件不满足,一直尝试重试却始终失败。解决活锁问题需要对 重试机制 引入一些随机性。例如如果检测到冲突,那么就暂停随机的一定时间进行重试,这会大大减少碰撞的可能性。


6.系统感知进程的唯一实体是
进程控制块(PCB)是操作系统用来记录进程详细状态好相关信息的基本数据结构,它和进程一一对应,是进程的唯一标识。
进程控制块记录了进程的标识信息/状态信息/控制信息。
(1)标识信息:唯一标识一个进程。
(2)状态信息:记录进程使用处理器时的各种现场信息,主要有CPU通用寄存器的内容,CPU状态寄存器的内容以及栈指针。
(3)控制信息:操作系统对进程进行调度管理时用到的信息。

7.下列关于文件索引结构的叙述中,哪些是正确的?
  • 系统为每个文件建立一张索引表
  • 采用索引结构会引入存储开销
  • 从文件控制块中可以找到索引表或索引表的地址
  • 采用索引结构,逻辑上连续的文件存放在连续的物理块中
为了提高文件的检索效率,可以采用索引方法组织文件。采用索引这种结构,逻辑上连续的文件可以存放在若干不连续的物理块中,但对于每个文件,在存储介质中除存储文件本身外,还要求系统另外建立一张索引表,索引表记录了文件信息所在的逻辑块号和与之对应的物理块号。索引表也以文件的形式存储在存储介质中,索引表的物理地址则由文件说明信息项给出。

    在很多情况下,有的文件很大,文件索引表也就较大。如果索引表的大小超过了一个物理块,可以采用间接索引(多重索引),也就是在索引表所指的物理块中存放的不是文件信息,而是装有这些信息的物理块地址。这样,如果一个物理块可装下n个物理块地址,则经过一级间接索引,可寻址的文件长度将变为n×n块。如果文件长度还大于n×n块,还可以进行类似的扩充,即二级间接索引。

    不过,大多数文件不需要进行多重索引,也就是说,这些文件所占用的物理块的所有块号可以放在一个物理块内。如果对这些文件也采用多重索引,则显然会降低文件的存取速度。因此,在实际系统中,总是把索引表的头几项设计成直接寻址方式,也就是这几项所指的物理块中存放的是文件信息;而索引表的后几项设计成多重索引,也就是间接寻址方式。在文件较短时,就可利用直接寻址方式找到物理块号而节省存取时间。
    索引结构既适用于顺序存取,也适用于随机存取,并且访问速度快,文件长度可以动态变化。索引结构的缺点是由于使用了索引表而增加了存储空间的开销。另外,在存取文件时需要至少访问存储器两次以上,其中,一次是访问索引表,另一次是根据索引表提供的物理块号访问文件信息。由于文件在存储设备的访问速度较慢,因此,如果把索引表放在存储设备上,势必大大降低文件的存取速度。一种改进的方法是,当对某个文件进行操作之前,系统预先把索引表放入内存,这样,文件的存取就可直接在内存通过索引表确定物理地址块号,而访问存储设备的动作只需要一次。当文件被打开时,为提高访问速度将索引表读入内存,故又需要占用额外的内存空间。


8.虚拟存储
根据程序执行的互斥性和局部性两个特点,我们允许作业装入的时候只装入一部分,另一部分放在磁盘上当需要的时候再装入到主存,这样以来,在一个小的主存空间就可以运行一个比它大的作业。同时,用户编程的时候也摆脱了一定要编写小于主存容量的作业的限制。也就是说,用户的逻辑地址空间可以比主存的绝对地址空间要大。对用户来说,好像计算机系统具有一个容量很大的主存储器,称为“虚拟存储器”。
虚拟存储(Storage Virtualization)是指将多个不同类型、独立存在的物理存储体,通过软、硬件技术,集成转化为一个逻辑上的虚拟的存储单元,集中管理供用户统一使用。这个虚拟逻辑存储单元的存储容量是它所集中管理的各物理存储体的存储量的总和,而它具有的访问带宽则在一定程度上接近各个物理存储体的访问带宽之和。
通俗的说就是为了在内存空间中运行超过内存容量的作业,操作系统把当前使用的部分留在内存,而把其他部分保存在磁盘,并在需要时在内存和磁盘之间动态交换。 

       虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的"虚拟内存";Linux的"交换空间"等。

虚存容量不是无限的,最大容量受内存和外存可利用的总容量限制 , 虚存搜索实际容量受计算机总线地址结构限制。

9.设计文件系统时应尽量减少访问磁盘的次数,以提高文件系统的性能.下列各种措施中,哪些可以减少磁盘服务时间?
  • 块高速缓存
  • 磁盘驱动调度
  • 目录项分解法
  • 异步I/O技术(错)
10.设有5个可用的某类资源,由4个进程共享,每个进程最多可申请()个资源而使系统不会死锁?

   设临界资源为m.共享进程为n个,个进程最多可申请x个资源
那么当m>n时,m>n*(x-1)时 使系统不会死锁,
          m<=n时,x=1 使系统不会死锁

设每个进程最多申请x个资源而不产生死锁。
4 *(x-1)+ 1 = 5
x = 2
解析:
每个进程申请(x-1)个资源时,各个进程都需要等待其他进程释放资源,此时共 4 *(x-1)个资源,系统 会产生死锁;
只要再多一个资源,就可以打破死锁的僵局。

11.某系统有 n 台互斥使用的同类设备,3 个并发进程需要 3,4,5 台设备,可确保系统不发生死锁的设备数 n 最小为()
假设3个进程分别为A,B,C,那么需要的最大的情况为:2,3,4此时再多一个资源就可以打破死锁的环境,所以为2+3+4+1=10
原创粉丝点击