Linux内核-进程管理

进程管理

进程调度

抢占

脱离原本的轨道,重新调度

用户抢占

内核抢占

《linux内核设计与实现》4.6.2

进程创建

  1. 找到进程空位,存放要创建的进程:find_empty_process()

  1. 复制0号或者当前进程的结构体tast_struct , 并初始化子进程结构体。copy_process()

  1. 拷贝老进程的代码段和数据段到新进程。copy_mem()

  1. 如果父进程打开了某些文件,那么子进程同样也打开。(子进程会继承父进程的许多属性)

  1. 设置新进程的tss(进程的状态描述符, 进程运行过程中CPU需要知道的进程状态标志(段属性、位属性等))和ldt(局部描述符,包括两个东西,一个是数据段(全局变量静态变量等),另一个是代码段,不过这里面存的都是指针)

  1. 新进程设为运行状态,返回新进程的PID

进程切换

进程创建后,如何进一步调度

void schedule(void)进程调度函数

  1. 将进程设为running模式,

  1. 循环task列表 找出最大的counter时间片,如果找到不为0,说明当前进程链表中,还有一些进程的时间片没用完。直接切换进程

  1. 如果为0,说明时间片已用完。进行时间片的重分配,counter = counter/2 + priority

  1. 切换进程

切换进程switch to

将TSS寄存器中的地址换为新进程的TSS描述符,将CPU中保存的TSS段存到原TSS中,将新TSS存到CPU中。

sleep on()当某个进程想访问CPU资源,但是CPU资源被占用访问不到,就会休眠

进程销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值