学习内核总是觉得很盲目,感觉无从下手,当入门一段时间后自己感觉仿佛什么都知道又什么都不知道。哎~~
下面提供一些内核边缘性问题,而且使得你所了解的内核是一个系统的整体,如果能够很顺利的回答出来,证明你已经入门了。
1 在i386中应用程序运行在什么保护级别?
2 在i386体系结构中,每个程序可以使用的页目录中最多含有多少个目录项?每个页表
最多含有多少个页表项?页表项所指向的内存页叫做什么?
3 如果init进程创建的一个子进程退出了,init进程为执行同样的功能,可以按需要再创建一个新的子进程,但这要求在一个文件中事先定义才行,这个文件叫什么名字?在什么目录下?
4 进程的主要特征是什么?
5 0号进程来自那里?在系统启动正常运行后,0号进程在什么情况下才被调度执行?
6 什么是僵尸进程?内核怎样处理僵尸进程?
7 请编写一段C语言代码,使之创建一个进程扇。如题14图所示。
1 2 3 4
题7图
8 你认为在用户空间编写的守护进程与内核态的守护进程有什么相同之处和不同之处?后台进程都属于守护进程吗?
9 你认为操作系统执行并发进程的最关键需求是什么?
10 下面是用C语言实现的一个“忙等待”操作的代码段:
int tas(int *lock)
{
int retval;
retval=*lock;
*lock=1;
return retval;
}
题7.4图
如果将*lock的初值设置为1,那么下列语句的执行结果是什么?
while(tas(&lock))
下列代码是按照TestAndSet来实现的信号量,试分析它是否会引起死锁?
void down(semaphore_t *s){ void up(semaphore_t *s){
for(;;){ while(tas(&lock))
while(tas(&lock)) ;
; *(s)++;
if(*s>0){ lock = 0;
*(s)--; }
break;
}
lock = 0;
}
lock = 0;
}
题10图
程序中的函数tas(&lock)就是第9题给出的tas(&lock)函数。
11 进程怎样确定一个时间片时值的大小?是越长越好呢?还是越短越好?
12 操作系统设置系统调用的目的是什么?如何实现在内核中添加新的系统调用?
13 什么是重定位?存储器管理为什么需要重定位技术?
14 假定进程以读方式打开一个文件后,再执行fork,父进程和子进程将都可以读这个文件。这两个进程的读操作和写操作各有何关系?
15为什么用户在第一次访问任何文件之前,都必须先调用open()系统调用来打开指定的文件,然后才能对该文件执行读、写以及修改操作,在对文件操作结束必须关闭文件。
16 将设备和普通文件统一命名的好处是什么?
17 如果在进程处理第一个收到的信号之前,又收到了若干个同样信号将怎样处理?对这种情况还会有其他更好的处理方法吗?