Linux进程概念介绍

冯诺依曼体系结构

大多数计算机采用的是冯诺依曼体系结构(就是骨架)

中央处理器运算器和控制器(控制外设)组成,进行算术运算&逻辑运算
存储器内存(不是磁盘)
输入设备
输出设备

网卡:计算机没有网卡不能访问互联网,既是输入设备,又是输出设备

冯诺依曼两个重要思想:

  1. 所有数据采用二进制存储:机器要通电
  2. 数据都保存在存储器中(内存中),不用关心计算的过程

CPU只和内存打交道,写好的程序是在磁盘中的,要运行就得通过内存

  • 操作系统会提前把数据加载到内存中(局部性原理)
    并拿到硬件相关的数据,有需求的时候,做完决策交给驱动,驱动程序让硬件完成
  • 操作系统控制CPU
  • 所有的硬件都是被动的完成某种功能,都要配合软件完成的(操作系统)

操作系统管理数据

  • 管理的本质是对数据管理,对数据的管理转化成对数据结构的管理
  • 先将管理的对象数据化,将数据结构化,一个数据结构就对应的一个算法

对操作系统需要了解的概念

操作系统用于管理计算机中软硬件资源的软件
管理=描述(创建一个结构体的过程)+组织(用算法将结构体组织起来)

  • 操作系统由一堆代码组成
  • 操作系统=操作系统内核(操作系统的代码的总称)+一堆应用
  • 驱动程序:比操作系统更底层,直接与硬件接触
  • 系统调用接口(或称系统调用函数):操作系统为程序员提供的函数
    通过调用操作系统提供的函数来使用操作系统的某些功能
  • 库函数:对系统调用接口再进行封装

进程和程序的区别

  • 程序:编译出来的可执行文件本质上就是一个文件,是静态的存储在磁盘当中
  • 进程:程序运行起来后,就称为进程,是动态的,由操作系统管理

  • 程序是静态的概念;
  • 进程是程序在处理机上一次执行的过程,是动态的概念,一个程序可以作为多个进程的运行程序

一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。作业是用户需要计算机完成的某项任务,是要求计算机所做工作的集合,一个作业可由多个进程组成,且必须至少由一个进程组成

进程

操作系统有四个管理模块:内存,进程,文件,驱动管理
源文件编译成exe程序,程序是文件,文件在磁盘

进程:程序代码+该进程所对应的数据结构

操作系统中存在大量的进程,操作系统对进程管理需要对进程进行描述
需要创建对应的数据结构,Linux中定义结构体task_struct类型,包含了所有的进程属性

aux=ajx
proc(process,内存文件系统)显示当前系统实时的进程信息
蓝色的数字是进程pid,也是一个文件夹
在这里插入图片描述
ls/proc/进程pid:

  • 查看进程所有相关信息,每一个进程有cwd路径(进程当前的工作路径),exe文件路径(程序在磁盘中的路径)
  • 当前路径:是当前进程所在的路径,进程启动后,进程会自己维护
    这些属性都在PCB中

从操作系统内核角度看进程:

task_struct {…} ,该结构体又称为进程控制块 PCB,是操作系统调度控制程序运行的唯一实体

操作系统描述进程:

  • 用到了一个结构体,名字为task_struct;
  • 多一个进程就多一个task_struct结构体的对象;

操作系统组织进程:

  • 多个进程是使用双向链表链接;
    操作系统使用双向链表管理进程,程序要进行运行就要使用CPU,使用链表来调度

task_ struct中定义的变量:

  1. PID:进程号,在当前操作系统中唯一标识一个进程(等于身份证号)
  2. 状态: 任务状态,退出代码,退出信号等。
  3. PRI:进程优先级, 相对于其他进程的优先级。程序被CPU执行的先后顺序,此值越小进程的优先级别越高
  4. 程序计数器: 保存了进程即将执行的下一条指令(指令是汇编指令)
  5. 内存指针: 保存了程序地址空间的首地址
  6. 上下文数据: 保存了程序运行时寄存器当中的内容
  7. IO状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  8. 记账信息: 保存了CPU使用率,内存使用率,CPU使用时长
  9. 其他信息

程序计数器和上下文信息是为了进程切换恢复线程时使用;
进程是抢占式进行,但是操作系统会管理这些进程。

查看进程信息:

用ps aux命令可以查看当前操作系统中的所有进程信息;

在这里插入图片描述

  • USER:进程创建者
  • PID:进程号,getpid查看
  • %CPU:当前进程CPU的使用率
  • %MEM:内存使用率
  • VSZ:虚拟内存大小
  • RSS:实际使用内存大小
  • TTY:哪一个终端创建的,如果是“?问号”标识并不是任何一个终端创建的(操作系统也是一个程序,启动后是一个进程,不属于哪个终端创建的)
  • STAT:进程状态
  • TIME:使用CPU时间,单位分钟和秒级(时间太短则为0)
  • COMMAND:进程启动命令(这个程序是如何启动的)

ps aux | grep xxx ------ 查看xxx进程的详细信息

  • ps aux能查看进程信息是因为内核中维护了一个双向链表,本质上是遍历该链表,把所有进程信息罗列出来

在这里插入图片描述

几乎在命令行上执行所有的指令,都是bash的子进程

操作系统原理进程状态:

状态在内核中就是整数

  • 运行态:
    正使用CPU资源进行运算的进程, 所持有的状态
    进程已经准备好了,准备随时调度
    运行态不代表正在被执行
  • 终止态:
    进程还在,只不过永远不运行,随时等待释放
    因为cpu还有别的工作要做,释放进程也需要资源

申请资源,必须排队,就是PCB在排队(每一个资源都有一个等待队列)

  • 阻塞态:
    一个进程使用资源时,不仅仅是申请CPU资源
    等待某种资源到来之后,才能进行运算
    也称为等待IO
  • 就绪态:
    所有准备资源都已准备就绪,等待操作系统分配CPU资源
  • 挂起态:
    进程过多,内存资源不足,短期内不会被调度的进程的代码和数据还在内存中,就是在浪费空间
    操作系统会把该进程的代码和数据置换到磁盘上(swap分区)

当进程访问某些其它资源(网卡磁盘等),该资源如果暂时没有准备号,或者正在给别的进程使用时
当前进程要聪runqueue中移除
将当前进程放入对应设备的描述结构体中的等待队列
这就是操作系统对进程的任务管理
当准备好后,会通知CPU
在等待外部资源时,该进程的代码不会被执行

Linux中进程状态

带+的是前台进程,不带+的是后台进程

  • R:运行状态
  • S:可中断睡眠状态(浅度睡眠)
    可以随时被唤醒或者被杀掉
    进程在CPU中运行非常快,但是使用的外设资源非常慢
    正在等待外设资源
    不访问外设的一般都是R
  • D:不可中断睡眠状态(深度睡眠),等待磁盘资源
    D是disk,磁盘睡眠状态,不能被打断
    有可能睡眠状态时间远大于执行时间,所以该进程看到是永远处于睡眠状态
    防止操作系统杀掉进程(磁盘给了进程反馈信息)
  • T:暂停状态
    该进程还存在,ctrl+z暂停,fg恢复
  • t:跟踪状态(进程被暂停)trac
    当进程被gdb调试时产生
  • X:死亡状态:
    被标志成死亡状态时,不能ps aux查询信息,该进程在被释放的前一刻才被标志为X
  • Z:僵尸状态
    进程退出的时候,需要将执行结果告知父进程或者OS
    进入Z状态就是为了维护退出信息,可以让它俩读取
    可以对代码何数据释放,但是PCB不能释放(状态信息在PCB中保存)
    父进程和OS通过进程等待读取信息
    main函数的返回值就在PCB中保存

kill- (信号编号) (pid) 向该进程发信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值