进程管理

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


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

操作系统管理PCB是通过双向循环链表管理,链表中每一项都是task_struct,该结构在32位机器中大小约17kLinux--内核对进程的管理

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

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


进程的状态
逻辑上:Linux--内核对进程的管理

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

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

内核中的状态
Linux--内核对进程的管理
并发并行
Linux--内核对进程的管理
并行需要依赖硬件支持(双核,四核,八核)

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

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

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

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


输出缓冲区问题
Linux--内核对进程的管理
此段代码执行结果为:睡眠五秒,然后打印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系统编程

相关文章:

  • 2021-10-26
  • 2022-01-25
  • 2021-06-24
  • 2021-11-22
  • 2021-05-30
  • 2021-08-06
  • 2021-11-30
  • 2021-07-09
猜你喜欢
  • 2021-07-24
  • 2022-01-23
  • 2022-03-04
  • 2021-09-11
  • 2021-05-22
相关资源
相似解决方案