linux内核之进程管理论文,linux内核系列之进程管理(转)

本文深入探讨了Linux下的进程管理,包括进程的概念、内核态与用户态的区别、进程状态的切换机制、信号处理方式及进程间的通信手段。此外还介绍了进程的地址空间分配和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux内核系列之进程管理(转)[@more@]  进程概念:程序运行起来称之为进程。进程使用task_struct来表示自身信息。pid,各种链表,状态,内核栈SP,地址空间分配、文件描述符、及其他各种资源分配情况、时间片、进程统计信息等。

内核态和用户态:保护模式下,进程运行状态分为用户态和内核态。进程的地址空间一共有4G(32bitsOS),最高的1G为各进程共享的内核数据映射。用户态进程只能访问用户地址空间数据(小于3G),内核态进程可以访问所有地址空间。进程使用段页管理虚拟内存,GDT中对应内核段的基址(0)与用户段的基址(3G)不同。根据段描述符(CS,DS)的值判断该进程是内核态或用户态进程。用户态进程只能访问进程自己的地址空间,使用用户态堆栈;内核态进程可以访问内核堆栈(与task_struct在同一物理页),同时也可以访问用户态堆栈。

进程状态的切换:从用户态到内核态的转换称为切换。引起的原因有系统调用和中断。系统调用户中断产生时,页表切换为新进程的页表,CS/SP切换为内核态段选择符,IP切换为系统调用的目标地址,通过iRet指令切换。

进程切换:根据调度算法,当从中断或系统调用返回时,如果进程的时间片用尽,会发生进程切换。新选中的进程占领CPU,CS,mm和SS栈更换为新进程的环境。需要说明,在内核态运行的进程不能被切换出去,进城切换的时机只能是当前进程从内核态转到用户态的时候(例如中断和系统调用)

信号:signal的信息保存在task_struct中,发送信号(kill)会更新目标进程的task_struct,但是只有在从内核态返回用户态时,才对进程的信号队列进行检查并进行处理。

进程关系:根据父子关系,进程状态等进程排入到各种链表中。0号进程是init进程,是所有孤儿进程的父进程

进程间通信:信号-直接修改task_struct;文件映射-线性地址映射同样的物理页面;pipe:管道文件系统,通过文件系统API进入内核;系统V共享内存,信号灯,消息队列:内核数据结构

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10617542/viewspace-961960/,如需转载,请注明出处,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值