华为内部面试题库---(2)
1.在分页存储管理系统中,从页号到物理块号的地址映射是通过( )实现的。
A.段表
B.页表
C.PCB
D.JCB
答案:B
用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等,可将用户程序的某一页放在内存的一个块中。线性地址包含了页号信息和页内偏移量信息(页大小为4Kbyte时线性地址的低12位为页内偏移量),页表的功能是将一个线性地址的页号转换为某一个物理块的物理地址。得到了物理块的物理地址后通过线性地址中的页内偏移量就可以找到精确的物理地址。
分段是将逻辑地址转换为线性地址,在LINUX中逻辑地址与线性地址是一致的,即LINUX实际上没有使用分段功能。
PCB(进程控制块):进程创建时内核为其分配的一个由结构体task_struct所定义的数据结构,其中包括了管理进程所需的各种信息,进程自身不能对其直接存取。
JCB:作业是用户提交给操作系统计算的一个独立任务,一般每个作业必须经过若干个相对独立又相互关联的顺序加工步骤才能得到结果。为有效管理作业,操作系统为每个作业建立作业控制块JCB(Job Control Block)用于对作业进行管理。JCB通常在批作业进入系统时建立,它是作业存在于系统的标志,作业撤离时,JCB也被撤销。
2.快速排序在( )情况下最易发挥其长处
A.被排序的数据中含有多个相同排序码
B.被排序的数据已基本有序
C.被排序的数据完全无序
D.被排序的数据中的最大值和最小值相差悬殊
答案: C
在快速排序算法中, n个元素被分成三段:左段l e f t,右段r i g h t和中段m i d d l e。中段仅包含一个元素。左段中各元素都小于等于中段元素,右段中各元素都大于等于中段元素。
因此l e f t和r i g h t中的元素可以独立排序,并且不必对l e f t和r i g h t的排序结果进行合并。m i d d l e中的元素被称为支点( pivot )。支点的一种选法是选择待排序段中的第一个元素。
在最坏情况下(被排序的数据已基本有序) l e f t总是为空,快速排序所需的计算时间为O(n^2)。在最好情况下(被排序的数据完全无序), le f t和r i g h t中的元素数目大致相同,快速排序的复杂性为O(nlogn)。
3.采用( )不会产生内部碎片
A.分页存储管理 B.分段存储管理 C.固定分区存储管 D.段页式存储管理
答案: B
在一个分区内部出现的碎片(即被浪费的空间)称做内部碎片,如固定分区法会产生内部碎片.在所有分区之外新增的碎片称做外部碎片.
在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表。
分段管理方式和分页管理方式在实现思路上是很相似的,只不过他们的基本单位不同。分段有段表,也有地址变换机构。
段页式系统的基本原理,是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。在段页式系统中,地址结构由段号、段内页号和页内地址三部分所组成。
分页和分段的主要区别:
1、两者相似之处:两者都采用离散分配方式,且都要通过地址映射机构来实现地址变换。
2、两者不同之处:
(1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
(2)页的大小固定且由系统决定,而段的长度却不固定。
(3)分页的作业地址空间是一维的,即单一的线性地址空间;而分段的作业地址空间则是二维的。
4.下面叙述中正确的是( )。
A.操作系统的一个重要概念是进程,因此不同进程所执行的代码也一定不同
B.为了避免发生进程死锁,各进程只能逐个申请资源
C.操作系统用PCB管理进程,用户进程可以从PCB中读出与本身运行状态有关的信息
D.进程同步是指某些进程之间在逻辑上的相互制约关系
标准答案是 D
A:不同进程可以执行相同的代码,例如动态库。
B:产生死锁的四个必要条件:
(1)互斥条件:一个资源每次只能被一个进程使用。
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
C:个人觉得也算正确,不管是用户进程还是内核线程,只要是在内核态就可以读取自身PCB。问题是目前用户进程进入内核态的方式只能是系统调用和中断处理,而目前操作系统没有提供这种接口给用户进程使用。
D:进程同步指的是进程间逻辑上的直接制约关系,进程异步是进程间逻辑上的间接制约关系。
5.Linux软中断softirq是在什么上下文中运行的?
A.进程上下文
B. 中断上下文
C. 可能是中断上下文也可能是进程上下文
D. 以上都不对
答案:C
softirq 属于中段下半部,一般来说是在中断上下文中执行。但是如果系统中的sofrirq一次执行的次数太多,内核会把softirq转由softirqd内核线程执行,
参与CPU竞争,从而保证sortirq太频繁的情况下,普通进程也能够被执行;
nt max_restart = MAX_SOFTIRQ_RESTART; //最大的softirq执行次数
if (pending && --max_restart) //如果没有到最大次数,继续执行
goto restart;
...
if (pending) //如果在执行上次softirq途中又pending了新的softirq请求并且已经不能再继续执行softirq了,那么唤醒softirqd吧。
wakeup_softirqd();
6. intel x86架构CPU有一种新类型的中断SMI,一下对SMI描述不正确的说法是:
A. SMI中断是x86体系结构的一种新的CPU执行模式;
B. SMI中断又称系统管理中断,由引脚SMI# Pin或者APIC SMI message触发;
C. SMM中断对操作系统透明,操作系统不感知SMM中断的执行
D. SMM中断就是普通中断,只是中断调用号不同而已;
答案:D
CPU的四种运行模式
¡实模式
¡保护模式
¡系统管理模式
¡V86模式
SMM是Intel在386SL之后引入x86体系结构的一种CPU的执行模式。系统管理模式只能通过系统管理中断(System Management Interrupt, SMI)进入,并只能通过执行RSM指令推出。SMM模式对操作系统透明,换句话说,操作系统根本不知道系统何时进入SMM模式,也无法感知SMM模式曾经执行过。为了实现SMM,Intel在其CPU上新增了一个引脚SMI# Pin,当这个引脚上为高电平的时候,CPU会进入该模式。在SMM模式下一切被都屏蔽,包括所有的中断。SMM模式下的执行的程序被称作SMM处理程序,所有的SMM处理程序只能在称作系统管理内存(System Management RAM,SMRAM)的空间内运行。可以通过设置SMBASE的寄存器来设置SMRAM的空间。SMM处理程序只能由系统固件实现。
进入SMM的唯一方法就是通过SMI,也即是系统管理中断(System Management Interrupt)。而触发SMI的唯一方法是将前述的SMI Pin引脚上加一个物理电平。而这个电平是由系统chipset根据不同的物理执行环境(如某些事件到来,某些设备需要特别服务)加到CPU上去的。
7.以下哪一点不是异常的特点:
A.异常与指令执行的是同步的,由指令的异常情况触发;
B. 当异常发生时,CPU将当前指令的地址入栈,在异常返回时,可能会重复执行该指令;
C. 异常发生时,当前执行的程序也会被打断;
D. 异常也可能由CPU的外部引脚所触发;
答案:D
8. 一下哪一点不是中断的特点:
A.中断分为可屏蔽中断和不可屏蔽中断;
B. 当CPU执行关中断执行时,NMI中断不会被屏蔽;
C. 在中断中要打印信息时,必须使用不可睡眠的printk命令;
D. CPU SF寄存器,反映了系统当前对中断的是否屏蔽的状态;
答案:D
同步的中断,也称为异常,之所以称为"同步",是因为这些异常是在程序执行的时候某条语句触发的,比如除0错误,缺页异常等等,有名的段错误也属于其中的一种,这个时候,你的程序不能继续往下走,而必须对这些异常做出回应,也就是处理.
异步的中断,也就是中断,之所以称为"异步",是因为这些中断是在当前指令之外的指令触发的.比如你的程序正在执行,来了一个I/O请求,或者定时器到时间被触发了,等等.也就是说,程序无法预知中断在什么时候到来.
总的来说:中断分为两种,同步的中断叫做异常,一般由程序中的错误触发;异步的中断叫做中断,一般由当前程序外部触发,比如IO请求,定时器等触发.
中断分类:
v可屏蔽中断(Maskable interrupt)
ØI/O设备发出的所有中断请求(IRQ)都可以产生可屏蔽中断。
Ø可屏蔽中断可以处于两种状态:屏蔽的(masked)和非屏蔽的(unmasked)
v非屏蔽中断(Nonmaskable interrupt)
Ø只有几个特定的危急事件才引起非屏蔽中断。如硬件故障或是掉电
中断是否得到响应由两条件决定:一是IF寄存器,为0时,所有可屏蔽中断都不被响应。二是8259上的中断屏蔽寄存器,当其相应位为1,且IF寄存器为1时,中断才可以被响应。
异常分类
v处理器探测异常
Ø由CPU执行指令时探测到一个反常条件时产生,如溢出、除0错等
v编程异常
Ø由编程者发出的特定请求产生,通常由int类指令触发
Ø通常叫做“软中断”
v对于处理器探测异常,根据异常时保存在内核堆栈中的eip的值可以进一步分为:
Ø故障(fault):eip=引起故障的指令的地址
l通常可以纠正,处理完异常时,该指令被重新执行
l例如缺页异常
Ø陷阱(trap):eip=随后要执行的指令的地址。
Ø异常中止(abort):
9. 一下关于中断号共享正确的是:
A. Linux下中断是不能共享的;
B. 中断号共享是只所有的中断号共享一条中断线;
C. 对于共享的中断号,当中断触发时,LInux一定要把所有的共享中断例程都执行一遍;
D. 所有的中断历程都支持中断号共享;
答案:C
共享同一中断号的ISR,通过request_irq中的同一个中断号注册到系统中的同一个中断链表中,而dev_id则用于区分该中断链表中不同的ISR,因此注册时dev_id不能相同,也不能为NULL
共享中断的所有注册,其第3个参数都必须指明IRQF_SHARED,以表示是注册共享中断,中断发生时,系统会顺次调用中断链表中所有的ISR。因此ISR一定要根据自己是否真的发生了中断,来返回IRQ_HANDLED或IRQ_NONE,释放中断free_irq的第2个参数dev_id,正是用来查找中断链表中要被释放的中断。