基于冯诺依曼体系的理解
冯诺依曼体系用用一句理解就是外设的、不急需的信息用硬盘存储,快的、急需的信息用内存存储,CPU处理
硬盘 内存 与进程
存储在硬盘的文件(程序)被加载到内存,并且操作系统为其创建一个PCB结构体就说明一个进程诞生了
操作系统对进程的描述
描述进程的结构体(PCB)
- 进程编号(标识符)
- pid
- 进程的状态
- 任务状态
-
运行状态
处于运行队列的进程 R状态 -
阻塞状态
因缺少软硬件资源而进入相应资源的等待队列 S状态
D状态: 属于阻塞状态,为深度睡眠状态,为高IO时进程的状态,处于D状态的进程无法被操作系统关闭。当操作系统出现D状态时,其已经接近满资源占用
T状态:属于阻塞状态,等待某些特殊信号或被用户直接暂停。处于T状态的进程完全停止
相关命令 kill -19 PID stop该进程 kill -18 PID continue该进程 -
挂起状态
因内存资源不足,将阻塞状态的进程的代码和数据重新放入硬盘,仅在等待队列中保存PCB -
僵尸状态与死亡状态
进程结束即为死亡状态 X状态,而进入死亡状态之前进程会先进入僵尸状态
僵尸状态 Z状态 操作系统需要维持该即将死亡进程的信息直至父进程回收其信息孤儿进程
如果父进程先退出,其子进程的父进程变成操作系统,该子进程成为孤儿进程
-
- 退出码
- 退出信号
- 任务状态
- 优先级
- 相对于其他进程的优先级
- 程序计数器
- 程序中即将被执行的下一条指令的地址
- 上下文信息
- 进程执行时处理器中寄存器的信息
- struct PCB* next
- 指向下一个PCB结构体
code&&data
PCB需与code&&data共同描述一个完整的进程,缺一不可
查看进程属性
- ls /proc
该目录下记录了所以的进程属性,信息来源于内存。每个子目录名都是其进程的PID - ps ajx
- getpid()
- 头文件
#include<sys/types.h>
#include<unistd.h> - 作用
返回调用该函数的PID
- 头文件
- getppid()
- 头文件
#include<sys/types.h>
#include<unistd.h> - 作用
返回调用该函数的父进程的PID(PPID)
- 头文件
- 查看优先级信息
ps -al 主要看PRI 与 NI
PRI --优先级 priority
NI --优先级修正数据 nice值 调整范围[-20,19] 每次调整都是以80为基础与上次优先值无关
管理进程
- kill -9 PID //9是信号
- 通过系统调用fork创建进程
- 头文件
#include<unistd.h> - 返回值 pid_t
子进程返回0,父进程返回创建的子进程的PID - 作用
创建一个新的进程,父子进程公用一个代码块,数据块可能会被操作系统拷贝(写时拷贝)
- 头文件