进程管理

进程管理是所有操作系统的心脏所在

 

  1. 进程(任务  从内核观点所看到的进程

正在执行的程序代码的实时结果,处于执行期的程序及相关资源的总称

包括程序代码【text section】和资源,如挂起的信号内核内部数据处理器状态具有内存映射的内存地址空间执行线程thread of execution)存放全局变量的数据段

 

线程   进程中的活动对象,拥有独立的程序计数器进程栈和一组进程寄存器,线程是内核调度的对象

 Linux的线程实现非常特别:对线程和进程并不特别区分,线程只不过是一种特殊的进程,在线程之间可以共享虚拟内存(包含在同一个进程中的线程),Linux中线程就是与其他进程共享某些资源的进程,只是进程间共享资源的手段

 

fork()系统调用从内核返回两次:一次回到父进程,另一次回到新产生的子进程

调用exec()这组函数,可以创建新的地址空间,并把新的程序载入其中

exit()系统调用退出执行,这个函数会终结进程并释放资源

 

wait4() 系统调用查询子进程是否终结   使得进程拥有了等待特定进程执行完毕的能力

退出后僵死状态,直到父进程调用wait()waitpid()为止


2. 

进程描述符 task_struct

任务队列  task list,进程的列表 双向循环链表,struct task_struct包含一个具体进程的所有信息(32位机器有1.7kB

 

Slab动态分布   struct thread_info   内核栈的尾端分配,通过栈指针计算它的位置,避免使用额外的寄存器专门记录

 

http://blog.chinaunix.net/uid-22548820-id-2125152.html

3.进程描述符的存放

PID                pid_t           为了与老版本的Linux兼容,PID的最大默认值为32768,但也可以修改来提高上限:

4.进程的状态

 

TASK_RUNNING

TASK_INTERRUPTIBLE

TASK_UNINTERRUPTABLE

__TASK_TRACED

__TASK_STOPPED          SIGSTOP  SIGTSTP  SIGTTIN SIGTTO

 

Set_task_state(task,state)

 

 

进程上下文:

系统调用异常处理程序是对内核明确定义的接口,进程只有通过这些接口才能陷入内核执行



5.进程的创建


Fork()/Vfork()    ->   Clone()   ->   copy_process

 

传递给clone()的参数的标志决定了新创建进程的行为方式和父子进程之间共享资源的种类:



6.内核线程

没有独立的地址空间,只在内核空间运行,后台任务如flush任务等

内核线程只能由其他内核线程创建:

kthraed_create  新创建的线程不可运行状态

kthraed_run  = 简单调用   kthraed_create + wake_up_process

 

#define kthread_run(threadfn,data,namefmt,…)\

({

Struct task_struck *k;\

k=kthread_create(threadfn,data,namefmt,##__VA_ARGS__);\

If(!IS_ERR(k))\

wake_up_process(k);\

k;\

})

 

kthraed_stop

    1. 7.进程的终结

    显示、隐式、被动  exit()->do_exit()

     

    exit_files()   exit_fs()

     

    exit_notify()     forget_original_parent ()  find_new_reaper()

    向父进程发送信号,给子进程重新找养父,并把进程的状态设为EXIT_ZOMBIE,不会再被调度,永不返回

     

    调用schedule()切换到新的进程

     

     

    在父进程获得已终结的子进程的信息后,或者通知内核它并不关注哪些信息后,子进程的task_struct结构才被释放

     

               wait()   wait4()     release_task()

     

    init进程会例行调用wait()来检查其子进程,清除所有与其相关的僵死进程。



    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值