本文主要是介绍0906进程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
进程
进程和程序:
程序是已经编好的二进制文件,在磁盘上不占用系统资源
进程,需要运行才能存在,占用系统资源,在内存中执行
并发:一个时间段里有多个进程启动和完成,但任意时刻只有一个进程只有一个进程在进行(虽然人感觉不出来),各个进程穿插运行
a,b两个文件,在磁盘里叫程序,在内存里叫进程。
从微观角度:
在CPU里每次只执行一个进程
多个进程轮流循环进行
操作系统负责调度进程执行,比如时间片
宏观角度:
CPU频率高,每秒10亿条以上命令
肉眼识别速度偏慢
人能看到的进程是同时进行的,即并发,并非真正意义上的多个程序在运行(实际上一个CPU核心每次依然只有一个进程在进行)
64位机寻址实际也只用了2^48,资源浪费很大
映射:三个程序都需要运行,
程序的映射:各路程序的堆栈→CPU(MNU)→映射至虚拟内存
内核到内存的映射:内核通过操作系统映射到同一区域
用户空间:虚拟空间的实际使用量会金国MMU处理成相同大小的物理空间
内核空间:对CPU,每个程序都有各自的内核,程序在虚拟内存上跑
进程控制块PCB:在内核中,储存并维护进程相关信息:
内核进程控制块是task_struct结构体
进程状态模型
三态模型
就绪状态:当进程获得处理机可以执行前的状态。多个就绪态进程拍成序列
执行状态:进程获得处理机,程序正在执行
阻塞状态:因发生事件而暂停执行时的状态,即进程执行收到阻塞,故称这种状态位阻塞状态。阻塞的进程排成一个队列
五态模型
创建状态:申请空白PCB,填写控制和管理进程的星系,
就绪状态:分配到CPU开始运行前的状态
执行状态:处于就绪状态被调度后,进入执行状态
阻塞状态:进程暂时无法运行即受到阻塞,满足运行状态后进入就绪状态
终止状态:进程结束或出错,进入终止状态,无法再启动
fork函数:通过系统调用创建一个与旧进程完全相同的进程
头文件:<unistd.h><sys/types.h>
语法pid_t fork(void);成功返回子进程和0,失败返回-1,返回其他值和父进程
区别父子进程的标志:pid
getpid()子ID,getppid()父ID,getuid(),getgid()
在else项以外运行fork函数会让所有进程产生子进程
进程共享
父子进程之间在fork后的共同点和不同点:
全局变量,.data,.text,.栈,堆,环境变量,用户ID,宿主目录,进程工作目录,信号处理方保持一致...
进程ID fork返回值 父进程ID 进程运行时间 闹钟 未决信号集发生变化
父子进程之间遵循读时共享,写时赋值,旨在节省内存占用
回收子进程
孤儿进程和僵尸进程
查看进程 ps -aux
孤儿进程:父进程先于子进程结束,则子进程称为孤儿进程,子进程的父进程为init领养进程。
中止孤儿进程 用kill -9 pid号
僵尸进程:进程终止,父进程尚未回收,子进程残留资源PCB存放于内核中,变成僵尸进程
僵尸进程不能用kill命令清除,通过exit指令来退出进程
这篇关于0906进程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!