僵尸和孤儿进程及虚拟内存
调研进程的调度算法.
- 根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法;又如在分时系统中,为了保证系统具有合理的响应时间,应当采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可以用于作业调度,也可以用于进程调度。(百度)
- linux内核的三种调度方法
- SCHED_OTHER 分时调度策略,
- SCHED_FIFO实时调度策略,先到先服务
- SCHED_RR实时调度策略,时间片轮转
- 进程调度O(1)算法:空间换时间的方法
task_struct结构体中各个字段的含义.
- 进程标识符(pid)
- 内存指针:告诉我们进程的代码/数据在那个部分
- 进程状态:描述进程的状态(如R S D)含有进程状态的原因是由于进程的调度
- 优先级:PR = PR + NI(nice)优先级的修正值,表示这个进程先被调度执行还是后被调度执行 PR的数字越小表示优先级越高
- 上下文(寄存器):类似于游戏存档
- pc指针(寄存器):进程接下来去做的事
- 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记帐号。
- 程序计数器:程序即将被执行的下一条指令的地址
使用代码模拟实现僵尸进程, 孤儿进程的场景.
僵尸进程:子进程先于父进程退出,父进程没有读到子进程的退出码
1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 5 int main()6 { 7 pid_t ret = fork();8 if(ret > 0){9 printf("parent:%d\n",getpid());10 sleep(30);11 exit(0);12 }else if(ret == 0){13 printf("child:%d\n",getpid());14 sleep(5);15 }else{16 perror("fork");17 }18 return 0;19 }
在另一个终端下查看进程状态(刚开始运行的时候)
子进程退出而父进程还在运行时
此时可以看到子进程的状态变成了Z(僵尸状态)kill子进程
可以看到kill子进程无效kill父进程
此时子进程被释放(子进程释放更科学的方法:进程等待,这里不做讨论)
孤儿进程:父进程先于子进程退出,子进程成为孤儿进程被1号进程收养
1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 5 int main()6 { 7 pid_t ret = fork();8 if(ret > 0){9 printf("parent:%d\n",getpid());10 sleep(5);11 exit(0);12 }else if(ret == 0){13 printf("child:%d\n",getpid());14 sleep(30);15 }else{16 perror("fork");17 }18 return 0;19 }
- 进程状态及子进程的ppid
可以查看子进程的ppid由14634变成了1,子进程被1号进程收养
虚拟内存
- 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。(百度)
- 在linux下进程虚拟地址空间是有mm_struct(内存描述符)这样一个结构体来描述的。通过页表映射到物理内存。
- 为什么要用虚拟内存空间:1.保持进程的独立性。2.充分利用内存。3.内存访问控制。
- 内存管理方式:1.段页式内存管理(在分段的基础上分页)。2.段式内存管理(长度不定)。3.页式内存管理(每一页4k大小)
- 段页式内存管理地址:段号(通过段号在段表当中找到段内页表中的起始地址)+段内页号(通过段内页号找到页表项信息,通过页表项信息获取到物理页号)+页内偏移(用物理页号和页内偏移组成物理地址)
- 段式内存管理:段号(段号在段表当中找到数据段的起始地址)+段内地址(得到物理地址)
- 页式内存管理:页号(通过页号在页表项信息中找到物理页号)+页表偏移(得到物理地址)
查看环境变量
僵尸和孤儿进程及虚拟内存相关推荐
- day34 并行并发、进程开启、僵尸及孤儿进程
day34 并行并发.进程开启.僵尸及孤儿进程 1.并行与并发 什么是并行? 并行指的是多个进程同时被执行,是真正意义上的同时 什么是并发? 并发指的是多个程序看上去被同时执行,这是因为cpu在多个程 ...
- 【Linux】僵尸进程(Z状态)和孤儿进程
先了解下进程都有什么状态: 进程状态:就绪,阻塞,运行 linux下进程状态: 运行状态®:并不意味着进程一定在运行中,它表明进程在运行中,或在运行队列里(只要拿到时间片就能运行) 可中断休眠状态(S ...
- Linux操作系统之孤儿进程和僵尸进程
一.僵尸进程 Unix进程模型中,进程是按照父进程产生子进程,子进程产生子子进程这样的方式创建出完成各项相互协作功能的进程的. 当一个进程调用 exit 命令结束自己的生命时,其实它并没有真正的被销毁 ...
- Linux | 进程概念、进程状态(僵尸进程、孤儿进程、守护进程)、进程地址空间
文章目录 进程和程序 操作系统如何控制和调度程序 进程控制块–PCB 子进程 进程状态 僵尸进程 孤儿进程 守护进程(精灵进程) 进程地址空间 引言 页表 进程和程序 程序: 一系列有序的指令集合(就 ...
- 【Linux】进程概念——父子进程、僵尸进程和孤儿进程
目录 父子进程 什么是父子进程? ==父子进程特性== 为什么有父子进程? 僵尸进程(defunct进程) 什么是僵尸进程? 僵尸进程的底层原因 僵尸进程的危害与解决方法 孤儿进程 什么是孤儿进程? ...
- 启动进程 问号_有两个这样的进程:僵尸进程amp;孤儿进程,蓝瘦香菇
进程 先来说下什么是进程: 来看下百度是怎么说的: 光看说的不够形象,在windows系统中,它长这样: 在Mac系统中,它长这样: Linux中是这样的:(有点长截图一部分好了) [root@iz2 ...
- 孤儿进程与僵尸进程[总结]
1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上 ...
- java 僵尸进程_孤儿进程与僵尸进程
开发中,在io密集型的场景下,我们可以使用多进程(多线程/协成更nber)来提高任务的处理速度.这就需要主进程需要等待所有工作进程执行完毕后才可以去汇总结果后退出. 但如果不规范的编写程序,就可能导致 ...
- Linux / 僵尸进程、孤儿进程 产生原因、有什么危害、如何预防(解决方案)
@time 2019-07-12 @author Ruo_Xiao 一.产生原因 1.僵尸进程 子进程退出,父进程运行,父进程没有调用 wait 或者 waitpid 函数,那么子进程就处于僵尸状态( ...
最新文章
- 安卓绿色联盟两项免费福利重磅发布:EMUI9.0和绿色应用2.0测试能力
- instanceOf,isInstance,Class,isAssignableFrom区别比较
- 谁是颠覆者?最全盘点25条区块链主链
- How Kyma plugin is initiated by WordPress
- Howto Dynamically Insert Javascript And CSS
- Linux之软件安装rpm、yum/dnf、源码(安装)
- yacc和lex细节解答以及实现反向自动微分
- WAV音频文件格式介绍
- 使用librtmp实现本地推流
- linux 内核配置详解
- 手机内存如何快速自清理
- H3C网络设备模拟器配置VLAN-Hybrid
- [課程筆記] 機器學習2021(李弘毅) L13. Transformer (下)
- 周围剃光头顶留长发型_为什么很多秃顶的人,宁可留周围一圈头发,也不直接剃成光头?...
- 英特尔DRM内核驱动程序默认启用PSR2省电功能
- C语言好学吗?C语言适合什么样的人群?
- Python出现Non-ASCII character '\xe6' in file错误解决方法(pycharm)
- Linux chmod +755和chmod +777 各是什么意思呢?
- 易企秀 背景音乐 下载
- 西瓜创客联创刘鹏:在AI的曙光中拥抱教育的未来