免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 746 | 回复: 0
打印 上一主题 下一主题

linux内核系列之进程管理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-19 23:16 |只看该作者 |倒序浏览
进程概念:程序运行起来称之为进程。进程使用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共享内存,信号灯,消息队列:内核数据结构

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21865/showart_187557.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP