进程概念:操作系统与进程

冯诺依曼体系

在这里插入图片描述
最早的就是这样,输入设备将数据交给CPU处理,然后给输出设备输出。
CPU的数据处理速度是特别快的。主频(处理速度)大概2.5GHz。
但这样的缺点就是,如果输入慢,CPU的性能就得不到最大的发挥,如果输出的慢了,CPU将大量的数据传给输出设备,就会造成数据堆积。这种数据的处理方式是不科学的。所以就进行了改进。
在这里插入图片描述
在输入设备与CPU之间加入了存储器。其实质作用就是对数据进行缓冲。
输入设备将数据交给存储器,CPU从存储器上读取数据进行处理,然后由存储器交给输出设备进行输出,这个存储器就是内存。
这样以来是能很大程度的改善了上述缺点。但对存储器的吞吐量要求就提升了,吞的太慢CPU得不到最大化利用。

硬盘和内存都是进行存储数据的,那为什么硬盘作为外存,内存只能作为存储器呢?
这是由它们的存储介质决定的
硬盘的存储介质是一种主要以闪存作为永久性存储器的计算机存储结构,而内存的存储介质是一ROM这种易失性介质,通电时可以存储数据,断电后数据丢失。这就是内存不能持续的存储数据而只能作为存储器来缓存cpu和输入设备传来的数据的原因。

知识点:
冯诺依曼体系结构:
输入设备,存储器,运算器,控制器,输出设备
运算器和存储器又统称 中央处理器 ------CPU
过程:CPU的控制器发送控制信号,控制输入设备将数据传给存储器,CPU的控制器读取存储器的数据,用运算器进行处理,在用控制器将数据存储到存储器,控制器再控制存储器将数据传给输出设备。
在这里插入图片描述
在上述过程中,计算机的所有的设备都是围绕CPU进行工作的,那么这种工作方式带来的软件行为又是怎样的呢?

操作系统

在这里插入图片描述

Linux下,操作系统向下通过各个硬件的驱动程序来调动硬件设备工作,由于它是不能被用户直接操作的,所以就向上提供了各个系统调用接口,用户通过向系统输入提出命令,就可以调用这些系统调用接口。

进程概念

进程:进程就是一个运行起来的程序
程序:一系列有序的指令集和,—就是程序员编写的代码,存储在硬盘中。
程序一旦运行起来,都经过了哪些过程?
冯诺依曼体系: 所有的数据想要被CPU处理,第一步就是将代码和数据加载到内存中。
在这里插入图片描述
我们可能加载了很多个指令和数据到内存中,那CPU是如何做到让这些指令都运行呢?
这就要提到CPU的分时机制了,CPU以极快的速度切换调度运行所有的程序,造成大家都在同时运行的假象。(只运行极短的时间(时间片),时间片运行完毕,则切换下一个程序运行)
而操作系统改调度哪个进程在CPU上运行,就是由操作系统中的一系列的调度算法控制的了。
那我们不得不思考这几个问题了。
在这里插入图片描述
这里我们需要了解一个知识点: 进程控制块(pcb),就是对运行中程序的描述。将CPU正在调用的程序的信息记录起来。方便CPU的调度。
在这里插入图片描述

CPU对每一个都有一个pcb,将这个运行中的程序描述起来,然后将这些描述组织起来进行管理,通过实现对pcb的调度管理实现对运行中程序的切换调度运行。
过程: 操作系统认为要运行哪个程序了,则找到对应的pcb,将pcb中保存的各种描述信息加载到cpu寄存器上,CPU就会根据这些描述信息来控制程序的运行。

总结:
进程: 进程就是pcb,是操作系统对每一个运行中程序的描述,通过这个描述,实现对程序的运行调度。

pcb进程控制块

我们再来看pcb,这个pcb/这个描述在Linux中是一个struct task_struct{…}结构体,像是一个链表的结构。
它所描述的信息

内存指针:描述这个内存指针,可以记录这个pcb所监督的运行的程序在内存中的位置,当CPU调动pcb时,能快速的找到这个程序(指令和数据)。
程序计数器:保存上一次切换调度运行时,程序结束的位置。方便下一次切换到该程序时直接从该位置继续运行。
上下文数据:记录上一次运行时,在CPU寄存器中,我处理的数据,下次切换过来的时候,继续对这个数据进行处理,并向下运行。与程序技术器类似。
④还有进程标识符PID、IO信息、进程状态、记账信息等等很多。
在这里插入图片描述
如图就是Linux操作系统下对进程控制块的描述信息,这个结构体特别长,图中仅仅展示了冰山一角。

多核CPU
以上所讲进程概念只是基于单核cpu的进程操控。
并发式访问操作,轮询处理执行命令。
而多核CPU的处理方式也可以实现并行式访问,同时运行或执行指令

父子进程

进程创建的初步认识:
进程就是pcb,意味着创建一个进程,就是创建一个pcb
用户无法直接对操作系统进程进行控制,但操作系统给用户提供了进程调用接口。就是pid_t fork(void)
pid_t fork(void)----通过复制调用(父进程)创建一个新的进程(子进程)。
执行fork()函数,就创建了一个新的pcb,然后从父进程的pcb中复制了很多数据过来,(只是部分数据,不是所有。)如内存指针,程序计数器,上下文数据等。

内存指针:子进程和父进程运行的代码其实都是一样的,因为指向同一块物理内存中的数据及指令。
程序计数器/上下文数据:子进程被创建出来之后,运行位置与父进程是完全一样的,下一步即将执行的指令都是从子进程创建成功之后开始的。
在这里插入图片描述
在这里插入图片描述
父子进程介绍完了,我们是不是应该了解一下为什么要创建子进程呢?
原因很简单,子进程和父进程干的事情其实是一样的,创建子进程可以分摊父进程的工作量以提高效率。

进程状态

进程的三种运行状态:就绪、运行、阻塞
Linux下的运行状态:
运行态 R:就绪、运行
不可中断休眠状态 S:当前的阻塞能被中断唤醒
可中断休眠状态 D:当前阻塞不会被中断唤醒,等待条件满足自己醒来。
停止态 T:停止运行
僵死态 Z:进程已经推出了,单子远没有被释放。

命令ps

Linux 中的 ps 命令是 Process Status 的缩写。ps 命令用来列出系统中 当前正在运行 的那些进程,就是执行 ps 命令的那个时刻的那些进程的快照。使用该命令可以确定有哪些进程 正在运行 和 运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
ps 查看的结果不是动态连续的,如果想要动态的显示进程信息,就可以使用 top、htop 命令。
ps支持的三种语法格式:

 UNIX 风格。         选项可以组合在一起,并且选项前必须有 "-" 连字符
 BSD  风格。         选项可以组合在一起,但是选项前不能有 "-" 连字符
 GNU  风格的长选项。 选项前有 两个 "-" 连字符

ps的用法:

ps -a             - 列出所有运行中/激活进程
ps -ef |grep      - 列出需要进程(有管道符,头/标题信息会丢失)
ps -aux           - 显示进程信息,包括无终端的(x)
                    和针对用户(u)的进程:如USER, PID, %CPU, %MEM等
ps -ef(没有进程状态T、S、S+) 和 ps -aux(有进程状态)的输出差别不大,aux是BSD风格,-ef是System V风格。
ps -aux | head -1;ps -aux |grep sleep
	查找sleep进程时,可以打印出头/标题

僵尸进程

僵尸进程:僵尸进程就是,子进程先于父进程退出,父进程没有关注到子进程的推出信息,因此子进程成为僵尸进程,处于僵尸态Z。
直接将父进程杀死,就可以退出僵尸态。

资源没有完全释放是什么意思?
因为子进程要保存退出原因,但是它已经被强制退出了,不能给父进程传递退出原因,就处于僵持状态。资源就释放不了

僵尸进程危害: 资源泄露。(进程资源和内存资源)
一个用户可以创建的进程是有限的,如果不停的创建僵尸进程,会导致僵尸进程一直存在,①占用进程空间,②占据内存资源。用ulimit -a 可以查看内存泄露

如果父进程先于子进程退出呢?
父进程先于子进程退出,子进程成为孤儿进程,不再占据中断,成为1号进程挂载在后台,如果此时杀死子进程,子进程不会成为僵尸进程。
守护进程:也叫“精灵进程”一种特殊的孤儿进程,父进程是1号进程(init),运行在后台 ++++与终端以及登录会话脱离关系,不再受影响。
特点:守护进程通常是一种运行在系统后台的批处理程序(默默的做一些循环往复的事情)
创建守护进程的接口 int daemon(int nochdir, int noclose);让进程在后台运行。
命令
查看进程信息 ps -aux
ps -aux | grep loop 只看loop的进程信息
在这里插入图片描述
可以发现loop是在R+状态,是前台(+)运行态(R)。前台就是占据当前终端的运行平台。 在这里插入图片描述
可以看到,变成了T停止态;
可以看到,loop的进程号是16879,我们输入kill -18 16879(kill -9 进程号 是强制杀死进程)
发现,loop的进程状态又变成了R运行态在这里插入图片描述

进程优先级

进程优先级:一个进程对于一个cou资源获取的优先权
为什么要有优先级:

进程分为两种:
交互式进程: 直接与用户进行交互的进程,要求最好能够更加优先的被cpu处理
批处理进程:在后台默默做循环工作的进程
在系统中,两种进程需要有一个优先级才能保证合理性。

优先级的作用:
让系统运行的更加良好。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值