快速业务通道

Linux原理起步:进程

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-06

Linux原理的学习,我打算由浅入深,从上之下,也就是先了解个大概再逐个深入.先了解一下Linux的进程先.

一、Linux进程上下文

Linux进程上下文,我理解就是进程组成元素的集合.包括进程描述符tast_struct,正文段,数据段,栈,寄存器内容,页表等.

1)tast_struct

它是一种数据结构,存储着进程的描述信息,例如pid,uid,状态,信号项,打开文件表等.是进程管理和调度的重要依据.

2)用户栈和核心栈

顾名思义,用户栈是进程运行在用户态使用的栈,含有用户态执行时候函数调用的参数,局部变量等;核心栈是该进程运行在核心态下用的栈,保存调用系统函数所用的参数和调用序列.这两个栈的指针都保存在tast_struct结构中.

3)寄存器

保存程序计数器,状态字,通用寄存器,栈指针.

4)页表

线性地址到物理地址的映射

5)正文段,数据段.

二、Linux进程的状态

Linux中进程共有5个状态:就绪,可中断睡眠,不可中断睡眠,暂停,僵死.也就是说,linux不区分就绪和运行,它们统一叫做就绪态.进程所处的状态记录在tast_struct中.

三、进程的控制

1)进程树的形成

计算机启动后,BIOS从磁盘引导扇区加载系统引导程序,它将Linux系统装入内存,并跳到内核处执行,Linux内核就执行初始化工作:初始化硬件、初始化内部数据结构、建立进程0.进程0创建进程1,进程1是以后所有创建的进程的祖先,它负责初始化所有的用户进程.进程1创建shell进程,shell进程显示提示符,等待命令的输入.

2)进程的创建

任何一个用户进程的创建都是由现有的一个进程完成的,进程的创建要经过fork和exec两个过程.Fork是为新进程分配相应的数据结构,并将父进程的相应上下文信息复制过来.Exec是将可执行文件的正文和数据转入内存覆盖它原来的(从父进程复制过来的),并开始执行正文段.

3)进程的终止

系统调用exit()就可自我终结,exit释放除了tast_struct以外的所有上下文,父进程收到子进程终结的消息后,释放子进程的tast_struct.

4)进程的调度

进程的调度是由schedule()完成的,一种情况是,当处理机从核心态向用户态转换之前,它会检查调度标志是否为1,如果是1,则运行schedule(),执行进程的调度.另一种情况是进程自动放弃处理机,时候进行进程调度.

进程的调度过程分为两步,利用相关策略选择要执行的进程,然后进行上下文的切换.

四、进程的通信

进程的通信策略主要有,消息,管道,消息队列,共享存储区和信号量.

1)信息

消息机制主要是用来传递进程间的软中断信号,通知对方发生了异步事件.发送进程将信号(约定好的符号)发送到目标进程的tast_struct中的信号项,接收进程看到有消息后就调用相应的处理程序,注意,处理程序到进程执行时候才能执行,不能立即响应.

2)管道

我理解就是两个进程使用告诉缓冲区中的一个队列(每两个进程一个),发送进程将数据发送到管道入口,接收进程从管道出口读数据.

3)消息队列

消息队列是操作系统维护的一个个消息链表,发送进程根据消息标识符将消息添加到制定队列中,接收进程从中读取消息.

4)共享存储区

在内存中开辟一个区域,是个进程共享的,也就是说进程可以把它附加到自己的地址空间中,对此区域中的数据进行操作.

5)信号量

控制进程的同步.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号