进程状态-僵尸进程-孤儿进程

文章详细解释了操作系统的进程状态,包括新建状态下的代码和数据加载,运行态的task_struct结构,阻塞状态下的等待资源,以及挂起状态涉及的内存和磁盘交换。页表映射不仅涉及内存,还可以映射磁盘位置。此外,还讨论了不同进程状态如R(运行)、S(阻塞)、D(深度睡眠)以及进程间通信和资源管理的细节。
摘要由CSDN通过智能技术生成

新建:就是对应的代码和数据刚刚加载到内存中,还没形成对应的pcb结构体。(不准确)

新的理解:

加载的本质就是 创建进程!!!在这个过程中,不需要立马将该程序的所有代码和数据加载到内存中,并创建内核数据结构加载到内存中。(大型游戏/登录界面)------------>>>>甚至在最极端的情况下,甚至只有内核数据结构被创建处理来了。------------------>>>那这就是 新建状态。

运行:task_struct结构体在(CPU的)运行队列中排队,就叫做运行态

阻塞:等待非CPU资源就绪,阻塞状态!

因为操作系统中,不可能只有CPU的运行队列,像磁盘/网卡这样的资源也会被很多进程调用,就会存在队列。经典的 scanf这个代码加以理解,当程序运行起来时,会等待我们从键盘键入数据,这不就是等待键盘数据就绪!!

挂起:硬盘中有一个SWAP分区,作用是当内存快不足的时候,操作系统将(长时间的)阻塞状态的进程的代码置换到SWAP分区,为系统腾出一定的内存。但每次挂起都是依次IO,会极大的影响系统的反应速度。

当服务器压力过大的时候,OS通过一定的手段,杀掉一些进程,进而达到节省空间的作用。

新的理解:

可以将物理内存中的程序换出到磁盘中。当然也可以将磁盘中的唤入到内存中。

理论上,可以实现对程序的分批加载!!!!---------->>>>当然也可以分批换出!!!---------->>>>当这个进程不再被执行了,如堵塞了,进程和代码被换出了,就叫做挂起了。

这里需要注意的一点是:页表映射的时候,可不仅仅映射的是内存,磁盘中的位置,也是可以映射的!!!

在上面阐述的将代码和数据换出到磁盘中。其实更多的时候是将内存中的代码和数据直接释放掉,将页表中的映射位置由内存改到磁盘。


R:对应的是运行态

S:对应的是阻塞状态,可中断睡眠。就是你操作系统给我发信号,我得理你。就以这段代码为例,

gitee代码

我们给这个进程发送kill -19(暂停)or kill -18(继续)类似与这种命令,我必须理会你。

D:睡眠状态,磁盘睡眠,深度睡眠,不可被中断,不可以被被动唤醒。(风中凌乱的磁盘)

t:调试状态

T:暂停状态,暂停状态和阻塞状态有啥区别呢?一个进程处于阻塞状态,一定是因为要等待某种资源,但是暂停状态只是单纯得暂停,并不是因为等待某种资源导致的。

X:dead 终止 瞬时性非常强,随时可以被系统回收。

Z:僵尸状态 :一个进程已经退出,但是还不允许被OS释放,处于一个被检测的状态。(跑步死亡)

为啥我们看到的状态后面都有一个“+”呢?

这是因为那个进程是一个前台进程,前台进程是当我们这个进程运行的时候,我们的命令行无法下达任何指令了,可以这样浅显的理解。

后台进程,就是正常命令后面加一个 &,下面会返回进程的pid

孤儿进程 :父进程退出,子进程还在,子进程就叫孤儿进程!

当然孤儿进程会被领养,被1号进程领养(init,系统本身)

为什么要被领养???

因为父进程早已退出,系统需要领养进程来进行回收。

Z(zombie)-僵尸进程

僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用,

没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。 所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。

僵尸进程危害

进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎 么样了。可父进程如果一直不读取,那子进程就一直处于Z状态?是的!

维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话 说,Z状态一直不退出,PCB一直都要维护?是的!

那一个父进程创建了很多子进程,就是不回收,是不是就会造成内存资源的浪费?是的!因为数据结构

对象本身就要占用内存,想想C中定义一个结构体变量(对象),是要在内存的某个位置进行开辟空 间!

内存泄漏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值