习题:

1. 通过一个程序的执行过程说明程序和进程两个概念的区别

2. 为什么要引入进程?

3. 什么是进程控制块?它包含哪些基本信息。打开源代码,查看sched.h文件中对task_struct的定义,确认一下你已经认识哪些域。

4. Linux内核的状态有哪些?请画出状态转换图,查看最新源代码,以确认有哪些状态。

5. 自己定义一个进程控制块,其中只包含状态信息、标识符及进程的亲属关系信息,写两个函数,一个函数向进程树中插入一个进程,另一个函数从进程树中删除一个进程。

6. Linux的进程控制块如何存放?为什么?假设esp中存放的是栈顶指针,请用三句汇编语句描述如何获得current的PCB的地址。

7. PCB的组织方式有哪几种?为什么要采取这些组织方式?

8. 请编写内核模块,打印系统中各进程的名字以及pid, 同时统计系统中进程的个数。

9. 一个好的调度算法要考虑哪些方面?为什么?

10. 查看,2.4内核中shed.c文件中的schedule( )的实现代码 ,画出实现schedule( )的流程图。

11. 什么是写时复制技术,这种技术在什么情况下最能发挥其优势?

12. 查看fork.c中fork的实现代码,画出实现fork()的流程图。

13. 0号进程在什么时候被创建?在什么情况下才被调度执行?

14. init内核线程与init进程是一回事吗?它们有什么本质的区别?

15. 用fork写一个简单的测试程序,从父进程和子进程中打印信息。信息应该包括父子进程的PID。执行程序若干次,看两个信息是否以同样的次序打印。

16. 把wait()和exit()系统调用加到前一个练习中,使子进程返回退出状态给父进程,并将它包含在父进程的打印信息中。执行若干次,观察结果。

17. 根据3.7节给出的例子,自己写出一个完整的程序,其中调用了进程相关的系统调用。

results matching ""

    No results matching ""