0906进程

本文详细介绍了进程与程序的区别,阐述了进程的生命周期,包括创建、就绪、执行、阻塞和终止状态。讨论了并发执行的概念,以及CPU如何在微观和宏观层面调度进程。还提到了 fork 函数在创建新进程中的作用,以及孤儿和僵尸进程的问题。最后,重点讲解了进程间的共享特性,如全局变量和资源的读写规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

进程

进程和程序:
程序是已经编好的二进制文件,在磁盘上不占用系统资源
进程,需要运行才能存在,占用系统资源,在内存中执行
并发:一个时间段里有多个进程启动和完成,但任意时刻只有一个进程只有一个进程在进行(虽然人感觉不出来),各个进程穿插运行
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指令来退出进程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值