深入理解LINUX 内核 之 进程学习

来源:互联网 发布:前端解析json 编辑:程序博客网 时间:2024/04/29 17:03

1.什么是进程

2.进程在内核中的表示task_struct

3.进程有哪些状态(7种)

4.怎样标志一个进程进程标示符process ID与进程一一对应,同一个进程组中的进程使用相同的PID

5.进程按照优先级不同被分配到不同的链表中(140个队列)拿空间换时间

6.进程间的关系:父子关系,兄弟关系。其中进程0和进程1是内核创建的,进程0是所有进程的父进程

7.根据进程的不同状态对进程进行分类,从而产生不同的进程队列。比如等待队列,等待队列上的每一个元素都是一个睡眠进程,在这些进程中,有的进程是互斥进程,可能需要访问临界资源,有的是非互斥的

8.进程资源限制,比如地址空间限制,使用cpu时长限制,文件锁数量限制等

9.进程切换:内核挂起正在CPU上执行的程序,并恢复以前挂起的程序,也叫做上下文切换。所有的进程共享CPU寄存器,因此在进行进程切换时,需要首先把需要执行进程的相应数据装入到CPU寄存器中,这些数据叫做“硬件上下文”。Linux2.6之后采用了软件切换的方式,注意:进程切换只发生在内核态。

10.创建进程:传统的Unix使用复制父进程的方式创建子进程,即复制父进程整个地址空间,但很多时候是复制之后立即清空父进程之前的数据,这显然效率不高。现代的UNIX内核引入了三种不同机制解决进程复制问题:A写时复制B轻量级进程C .vfork() 系统调用系统调用fork()和vfork()是无参数的,而clone()则带有参数。fork()是全部复制,vfork()是共享内存,而clone()是则可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。另外,clone()返回的是子进程的pid。http://blog.sina.com.cn/s/blog_7673d4a5010103x7.html

11.内核线程:只允许在内核态,因此寻址范围有限制,只在大于PAGE_OFFSET的线性空间寻址,普通进程既可以运行在内核态又可以运行在用户态,并且可以寻址的范围始终是4GB 的内存空间,即整个内存空间。Kernel_thread( ) 函数创建一个新的内核线程。

12.进程0和进程1

13.撤消进程:exit()

14.进程终止:exit_group( ) ,exit( ),所有进程的终止都是由do_exit() 函数来处理的。

15.Schedule( ) 选址一个新的进程运行。

16.进程删除:(父)进程创建一个子进程执行相应的任务,父进程可以随时检测子进程的状态,通过调用诸如wait( )这样的一些库函数检查子进程是否终止。如果子进程终止,函数会告诉父进程任务是否已经完成。为了遵循这个原则,不允许Unix 内核进程一终止后就立即丢弃该进程的描述符,只有父进程发出了比如wait( ) 类系统调用之后才允许释放。因此就会产生僵死进程:即从技术上说,该进程已结束,但是必须保存它的描述符,直到父进程得到通知。如果父进程在子进程结束之前已经结束,那就会产生很多僵死进程,为了防止僵死进程,需要将这样的进程的父进程全部设置成  init 进程,即进程1.

0 0
原创粉丝点击