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)信号量
控制进程的同步。
相关专题
- Linux集群技术 (8622篇文章)
- 体验Linux的音影世界 (8294篇文章)
- Linux驱动大全 (9106篇文章)
- Linux下的路由的配置与应用 (12115篇文章)
- Linux命令简介 (10188篇文章)
- Linux防火墙 (9985篇文章)
- Linux日志专题 (8749篇文章)
- Linux服务器的安全性能 (20853篇文章)
- 揭秘Linux内存管理 (8359篇文章)
- 解析Linux文件系统 (8564篇文章)
- 最具影响力的七大GNU/Linux发行版 (134次浏览)
- VMware虚拟机Linux通过NAT方式上网 (86次浏览)
- Linux“装机”一条龙 (72次浏览)
- Linux系统命令分类详解 (1) (54次浏览)
- Linux下安装VMware虚拟机的过程详解 (48次浏览)
- 安装qmail全套功略 (46次浏览)
- Linux上的偷窺裝置 (1394的使用) (46次浏览)
- Linux系统管理员秘技:用快捷命令一招制胜 (44次浏览)
- TurboLinux 入门教程:第七课 TurboLinux简介 (42次浏览)
- 多项更新!Ubuntu 8.04 Alpha6发布 (41次浏览)



