深入理解进程(一)—— 进程基本概念

进程基本概念

一、进程是什么?

两个角度来理解:

  1. 对于用户来说: 进程就是一个正在运行的程序
  2. 对操作系统来说: 进程就是一个正在运行的程序的信息的描述集合,我们一般称它为 pcb,这个pcb实际上是一个名为:task_struct的结构体。所以对于操作系统来说,一个个进程就是一个个pcb。

用户在点击程序或文件后,程序或者文件就会运行,首先文件中的数据就会拷贝一份放入内存中,同时操作系统会创建一个PCB(创建pcb就是创建进程),PCB中会有一个内存指针指向该内存,CPU通过PCB就能对进程控制和管理

二、进程中都有什么信息?

上面说了进程是一个信息的集合,那么这个集合中包含那些信息呢?下面大致举一些基础的信息,一个进程中包含的信息有很多,远不止下面所说的。

  1. 内存指针: 指向了该程序在内存的位置,操作系统就是通过该指针从而找到该程序的位置,以便可以运行它
  2. 程序计数器 :实际上这是一个寄存器,该寄存器中存放的是下一条即将执行的指令的地址
  3. 上下文数据: 当发生进程切换或者是某些中断命令传来时,操作系统会保存一些数据,以便当下次切换回来时,可以继续从之前未执行的地方开始执行,而这些数据就叫做上下文数据。
  4. 优先级:哪个进程的优先级越高,那么就越先执行哪个进程
  5. 进程状态:下面会单独提出来说
  6. 进程的标识符PID:可以把它理解成一个人的名字一样,就是通过这个名字来区分不同的进程

三、进程的状态有哪写?

1. 进程的基本状态:(任何操作系统中都会有的)

(1)运行: 在工作中,执行程序

(2)阻塞: 因某个事件,比如中断事件,此时该进程就会停下来,不会继续向下执行代码。例如,程序中的一段代码要求用户输入一个字母,那么当进程执行到此处时,就会停下来等待用户输入字母(陷入阻塞),直到用户在键盘上敲击了一个字母,此时操作系统才会让进程继续向下执行。阻塞时,该进程会让出CPU,因为谁也不知道,你会多久输入字母,如果你一小时之后再输入字母,难道要让其他的进程等小时吗?所以操作系统不会浪费这段时间,因此会将CPU让给其他进程,让他们先执行。

(3)就绪: 此时进程已经进入到了就绪队列中,除了CPU之外,其他所需的所有资源已经全部得到。也是就是说,只需要得到CPU,那么就可以开始运行

2. 进程之间的状态演化图

在这里插入图片描述

解析:

进程创建后并且拿到除CPU之外的所有资源就会进入就绪队列,此时就处于就绪态。当它经过操作系统的调度拿到CPU后,就处于运行态。若是在时间片之内执行完程序,那么该进程就会被直接撤销;若是在时间片之内没有执行完程序,那么等到时间片结束就会直接进入就绪队列,等待下次获得CPU,继续执行;若是在运行期间有中断事件到来,比如说IO事件,那么该进程就会陷入阻塞,让出CPU,直到IO事件结束,该进程才会重新进入就绪队列,等待CPU的到来。

3. LInux下的进程状态

(1)运行态 R: 就绪/运行,运行状态的进程才能被操作系统调度CPU运行

(2)可中断休眠态 S: 当前的阻塞能够被中断唤醒

(3)不可中断休眠态 D: 当前的阻塞不会被中断唤醒

(4)停止态 T: 停止运行什么都不干

(5)僵死态 Z: 进程已经退出,但是资源没有完全被释放

(休眠状态于停止的区别在于:休眠状态是有工作的,他的工作就是休眠,而停止是没有工作的,什么也没干)

四、在Linux下与进程有关的命令

  1. ps -ef——查看进程信息
  2. ps -aux——查看进程信息,但是信息比上面的信息更加详细
  3. kill 进程号——杀死进程
  4. kill -9 进程号——强制杀死进程

五、特殊的进程

  1. 僵尸进程:处于僵死状态的进程

    (1)产生原因:子进程先于父进程退出,退出原因(返回值)保存在pcb中,操作系统检测到进程退出后,通知父进程,但是父进程可能并没有关注子进程退出,这时候操作系统不能随意的释放子进程的资源(因为父进程可能会关心子进程退出的原因),因此子进程就处于退出但是资源没有完全释放的状态(僵死)

    (2)危害: 资源泄露,僵尸进程过多会导致新进程无法创建

    (3)解决: 干掉父进程(退出原因的保留已经毫无意义)

  2. 孤儿进程:

    (1)产生原因: 父进程先于子进程退出,子进程成为孤儿进程。

    (2)结果: 被init进程收养,到后台运行。init进程的PID是1,在系统启动时,由内核创建的,他不会终止,是所有进程的祖先

  3. 守护进程(精灵进程):本质上是一个孤儿进程

六、要区分的几个问题

1.库函数与系统调用接口的关系:库函数是对系统调用的一层封装,他们是上下级的关系

(1)系统调用接口: 由操作系统提供,供上层开发使用

(2)库函数: 对部分系统调用进行部分封装

2. 操作系统、pcb、cpu之间的关系?

​ 操作系统认为哪一个程序运行,就会找到该程序的pcb,根据pcb中的信息将该程序所需要的资源加载到寄存器中,并且将cpu分配给它,cpu只负责运行时的计算,并不对这些进程进行管理,也就是说,什么时候进程停下来,什么时候运行哪个进程,什么时候加载哪一个进程这些都是操作系统来进行的

3. 区别并发和并行

并行: 同时执行。多个进程可以同时执行,前提是多核CPU才具备此功能

并发: 一个CPU轮流来处理多个进程,只不过处理每个进程的时间非常的短,给人一种多个进程在同时运行的错觉

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值