Linux原理起步:进程
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |