Linux--内核对进程的管理

进程管理

进程
描述进程西南西的结构或者进行进程管理和控制 --PCB
进程实体部分 – 有序指令 数据


系统管理进程(可执行程序代码+各种资源及处理器状态等等)是通过PCB(进程描述符)来记录这些数据,从而管理进程。

操作系统管理PCB是通过双向循环链表管理,链表中每一项都是task_struct,该结构在32位机器中大小约17k在这里插入图片描述

1.执行程序时,要生成一个进程,先申请PCB,然后加载程序部分
2.一个进程结束时,先释放实体部分,再释放PCB

僵尸进程:进程实体释放与其PCB释放有时间差(PCB释放需要一定条件),进程实体被释放,但是PCB没有释放(操作系统看一个进程是否存在是看PCB是否存在)


进程的状态
逻辑上:在这里插入图片描述

就绪:所有资源准备完毕,只等CPU空闲调度执行
执行:CPU正在执行进程中的指令
阻塞:等待某些事件的发生

时间片具体参考时间片轮转法

内核中的状态
在这里插入图片描述
并发并行
在这里插入图片描述
并行需要依赖硬件支持(双核,四核,八核)

程序到进程的加载过程:简单分页(将内存划分成大小相等的固定的区块,一般4k)
磁盘的页帧和程序的页通常大小相同
在这里插入图片描述
操作系统为每一个进程维护了一个页表:页表中记录程序的所有的页号加载到内存上后,对应的页帧标号

逻辑地址:在程序中的相对地址
物理地址:在物理内存上的绝对地址
printf打印的地址是逻辑地址

交换分区:在磁盘上开辟的一块空间,是对内存的一个补充
一个进程执行时,并不需要进程的所有页都时刻在内存上。进程当前不需要的页就会被保存在交换分区上。(内存不足时)
1.在内存上驻留更多进程
2.可以执行比内存大的进程

操作系统的发展:
1.串行处理
2.批处理
3.多道程序设计
4.分时系统 实时系统


输出缓冲区问题
在这里插入图片描述
此段代码执行结果为:睡眠五秒,然后打印helloworld
因为第一个printf无 \n ,所以先不会输出

printf是将内容写入到输入缓冲区,缓冲区刷新到界面上需要一定条件:
1.遇到“\n”
2.主动刷新缓冲区 fflush(stdout);
3.进程结束(exit或者_exit)_exit不会刷新缓冲区中的数据而直接结束进程
4.缓冲区满

缓冲区意义:提高程序执行效率

主函数参数:int main(int argc,char argv[] , char envp[ ]);
argc:传给主函数的参数个数(默认只有一个)
argv:传递给主函数的参数列表,字符指针数组,传递的都是字符串
envp:传递的环境变量列表

参考:

  1. Linux内核设计与实现(第三版)
  2. Linux系统编程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值