linux 内核设计与实现(第二章笔记)

来源:互联网 发布:软件多开器安卓版 编辑:程序博客网 时间:2024/04/29 14:47

   1、linux进程理解

        对于linux 的进程一直是linux系统的亮点,linux系统的高效率、并发性很大程度上都与其任务(进程)有很大的关系,而对于linux进程,很久以前理解为就是程序的一次执行,但是其实他还包括了太多的东西,并不仅仅是一个程序的执行,它包含了程序计数器、进程站、寄存器等相关的资源。也正是进程的两种虚拟技术(虚拟处理器和虚拟内存)让用户感觉自己独占处理器或者一块内存。

        linux下的进创建很简单,调用fork函数就可的到一个子进程(注意linux 进程默认返回两个数值,一个是返回到子进程,一个是返回到父进程),并且在一般情况下,进程的创建和exec系列函数联系在一起。

        对于fork函数,需要注意:

        a、fork一个子进程系统会进行怎么样的资源配备。

        b、fork函数调用在所执行的系统调用。

        c、fork函数退出所经过的步骤,特别要注意防止僵尸进程的出现,一般处理僵尸进程的方法(如父进程等待子进程结束、父进程提前退出,让init进程接管子进程)。

        d、用户调用fork函数与vfork函数的区别。

   2、进程中的重要数据结构与实现机制

       a、 进程有唯一标识符:进程ID,同时理解进程时最重要的是进程描述符(struct task_struct ),该描述符包含了进程执行时的状态、优先级、进程ID等重要信息。

       b、分配进程描述符。进程在分配进程描述符时采用了slab机制,保证了资源分配的快速性,同时理解进程中thread_info与struct task_struct 之间的关系。

       c、进程状态。系统中的进程有五种状态:TASK_RUNNING、TASK_INTERRUPTIBLE(可中断)、TASK_UNINTERRUPTIBLE(不可中断)、TASK_ZMBIE(僵死)、TASK_STOPPED(停止),各种状态通过不同的调用实现状态的跳转:


        

      

3、进程上下文

     进程处于上下文中,此时进程当前指针corrent是可用的,系统调用或者异常可以使进程陷入内核执行。

     内核进程的访问,使用list_for_each可以访问进程循环队列的每一个进程,任何一个进程都是init进程的后代。



 

  

0 0