步步高
若有说明:int n=2,*p=&n,*q=p;则以下非法的赋值语句是:
A p=q; B *p=*q; C n=*q; D p=n;
答案: D
在下列说法中,哪个是错误的( )
A若进程A和进程B在临界段上互斥,那么当进程A处于该临界段时,它不能被进程B中断
B虚拟存储管理中采用对换(swapping)策略后,用户进程可使用的存储空间似乎增加了
C虚拟存储管理中的抖动(thrashing)现象是指页面置换(page replacement)时用于换页的时间远多于执行程序的时间
D进程可以由程序、数据和进程控制块(PCB)描述
答案 AC
选项A:
我们将对共享内存进行访问的程序片段称为临界区域(critical region)或临界区,实现临界区互斥的方案如Peterson解法:本质思想当一个进程想进入临界区时,先检查是否允许进入,若不允许,就原地等待直到允许为止。
考虑一台计算机有两个优先级不同的进程,一个H的优先级较高,L较低,调度规则规定只要H处于就绪态就会运行,如果L处于临界区时H变为就绪态,比如刚刚结束了一个I/O操作,由于H就绪时L不会被调度,如果H采用了忙等待,由于L不被调度它将一直处于临界区,而H将一直等待下去,这也就是优先级反转的问题。
如果我们采用另一种策略,在一个进程不能进入临界区的时候将其挂起而不是进行忙等待,直到另一个进程将其wakeup,那么处于临界区的就不会被中断。
个人认为选项A没有介绍互斥的策略,所以是错的。
选项C:
任意时刻,由于程序局部性,往往在一个小的活动页面集合上工作,叫做工作集,如果工作集的大小超过了物理存储器的大小,那么程序将出现thrashing,页面将不断换进换出。
所以C的解释是不准确的。
系统引导的过程一般包括如下几步:a.MBR中的引导装载程序启动;b.用户登录;c.Linux内核运行;d.BIOS自检。正确的顺序是()。
A.d,b,c,a
B.d,a,c,b
C.b,d,c,a
D.a,d,c,b
答案 B
#pragma pack(2)
typedef union {long i; short k[5]; char c;} DATE;
struct data { short cat; DATE cow; double dog;} too;
DATE max;
则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:
答:DATE 是一个 union, 变量公用空间. 里面最大的变量类型是 int[5], 占用 20 个字节. 所以它的大小是 20。
data 是一个 struct, 每个变量分开占用空间. 依次为 int4 + DATE20 + double8 = 32.所以结果是 20 + 32 = 52.
对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()
head==NULL
head->next==NULL
head->next==head
head!=NULL
答案 B
即使是空链表也会有头结点,头结点是不保存有效参数的,只是为了便于搜索到相应的链表,
head->next保存的是首节点(第一个有效节点)的,所以head->next==NULL的话,说明此链表没有首节点,即此链表只有一个头结点,是空链表。
在提供虚拟存储的系统中,用户的逻辑地址空间主要受()的限制
A.内存 B.外存 C.虚存 D.地址空间
答案:D
Linux内核空间地址空间占用范围(RM-32位为例)()
Linux的虚拟地址空间范围为0~4G,Linux内核将这4G字节的空间分为两部分,
将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”。
而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)供各个进程使用,称为“用户空间。
linux 内核锁