【Linux】总结2-进程篇1

文章目录

冯·诺伊曼结构

  • 冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成:输入设备、存储器、运算器、控制器、输出设备,这套理论被称为冯诺依曼体系结构
  • 输入输出设备统称IO设备:负责数据和程序的输入输出
  • 存储器:存储程序和数据,指内存,所有的数据都是采用二进制进行存储,运算产生的数据都是存储在内存当中
  • 中央处理器:由运算器和控制器组成,运算器负责数据按照程序的处理办法进行计算,控制器控制程序的逻辑,一个CPU在同一时刻只能计算一份数据

操作系统

  • 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS),操作系统 = 操作系统内核 + 一堆应用,操作系统内核:也是代码程序,这些代码完成进程管理、内存管理、文件管理、驱动管理等,一堆应用是指依附在操作系统内核上完成某些功能,比如微信等应用
  • 操作系统管理计算机的软硬件资源,硬件资源包括:CPU、内存、硬盘、网卡、显示器等等;软件资源包括:进程资源、驱动程序等
  • 操作系统通过管理来完成对计算机软硬件资源的管理,管理 = 描述(结构体) + 组织(串连起结构体),从代码的角度理解,描述就是结构体,组织是通过链表的方式完成的
  • 操作系统提供的函数,被称为系统调用函数,这些函数在库函数中被调用

什么是程序?什么是进程?

  • 程序:源代码经过编译产生的可执行文件,这个文件是静态的
  • 进程:程序运行起来的实例,是动态在运行的;进程是能独立运行、独立获得资源、独立接受调度的基本单位

操作系统是如何来管理进程的?

  • 进程的管理 = 描述(PCB) + 组织的方式(链表)
  • PCB是进程控制块:在操作系统中,用PCB来描述进程的基本情况以及运行变化的过程,PCB是进程存在的唯一标识,这意味着一个进程的存在,必然会有一个PCB,如果进程消失了,那么PCB也会随之消息;不同的PCB通过链表组织起来

PCB(struct task_struct{...})

  • 机器中的进程数量远大于CPU数量,而且一个进程想要向后执行自己的代码,必须拥有CPU进行计算(执行代码),那进程是如何获得CPU资源的呢?操作系统调度进程获取资源,它有自己的调度策略:先来先服务、短作业优先、长作业优先、高优先级优先、时间片轮转

  • 从CPU的角度来理解,进程的状态可以分为三种:就绪/运行/阻塞

    • 运行:进程占用CPU,并在CPU上运行,即进程正在使用CPU来执行自己的代码
    • 就绪:进程已经具备了运行的条件,但还没有被分配CPU,可以理解为进程已经将运行前的准备工作全部做好了,万事俱备,只欠被操作系统调用,占用CPU资源了
    • 阻塞:进程因等待某件事的发生而暂时不能运行(就绪),例如:等待IO输入、调用某些阻塞接口
  • 状态间转换

  • 进程是抢占式执行,在计算机中,进程多的情况是常态,操作系统在调度的时候要做到雨露均沾,让每一个进程都能运行上,但是操作系统在调度的时候,是从就绪队列当中获取进程,进行运行,也就是说,哪个进程准备好了,就绪了,原则上就可以调度谁,所以进程为了自己可以被执行,都是抢占式执行,不会互相谦让。这种狼多肉少的状态,也是进程有不同状态的原因之一

    并发:多个进程在一个CPU下,采用进程切换的方式,各自独占CPU运行各自的代码,交替运行,让多个进程都得以被推进,称为并发(多个岔路要汇合到主路,各车道交替进入)

    并行:多个进程在多个CPU下,同时运行各自的代码,称为并行(车道足够,各进程跑在各自的车道上)

    在一个多核CPU的机器当中,并发和并行是同时存在的

  • 细分的进程状态

    • R:运行状态,处于R状态 ,有可能在执行代码,有可能在就绪队列中等待
    • S:可中断睡眠状态,进程正在睡眠(被阻塞),等待资源到来被唤醒,也可以通过其他进程信号或时钟中断唤醒,进入运行队列
    • D:不可中断睡眠状态,通常等待一个IO结束
    • T:暂停状态(ctrl+z),ctrl+z暂停一个进程 ;ctrl+c可终止一个进程
    • t:跟踪状态,调试程序的时候可以看到
    • X:死亡状态,我们用户看不到,在PCB被内核释放的时候,进程会被置为X,紧接着进程就退出了
    • Z:僵尸进程
  • 程序计数器:保存程序下一条执行的指令

  • 上下文信息:保存寄存器当中的内容。在多进程的系统当中,操作系统调度进程,获取CPU之后,进行现场恢复,继续执行后面的代码

  • 上下文切换:Linux是多任务的操作系统,它的进程数远大于CPU数,它能支持远大于CPU数量的任务同时运行,但实际上同一时刻只会有CPU数量的进程在运行,等CPU时间片到了之后,进程调度器就会把CPU资源分配给其他进程,在这个过程就涉及到了进程之间的切换,这时候就需要把当前进程的上下文信息保存下来,随后加载被调度进程的上下文信息,这就是上下文切换。

    上下文信息既包括虚拟内存、栈、全局变量等用户态的资源,也包括内核堆栈、寄存器等内核态的资源,不同类型的上下文切换,会涉及到不同类型资源的切换,例如:同一进程不同线程的切换,只需要切换内核态的资源,而不需要切换用户态的资源

    上下文切换的类型:进程上下文切换、线程上下文切换、中断上下文切换

  • PCB是描述一个进程的数据块,在内核中对应struct task_struct{...}中的代码,我们列举一小部分其中的内容:进程标识符(进程号)、进程状态、程序计数器、上下文指针、内存指针、记账信息(使用CPU时长,占用内存大小)、IO信息(保存进程打开文件的信息)

相关推荐
lingran__20 分钟前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
轻揉小乔 真新人1 小时前
T-SQL查询进阶—理解SQL Server中的锁
服务器·数据库·sql
Dlrb12111 小时前
Linux驱动---sys文件系统自动添加设备节点、添加调试节点以及MISC设备驱动的解释
linux·imx6ull·misc·设备节点·sys文件系统
贾天佑忆月 迷失的昵1 小时前
客户端与服务器持续同步解析(轮询,comet,WebSocket)
运维·服务器·websocket
刘某的Cloud1 小时前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
70asunflower2 小时前
Linux 性能排查分析完全教程
linux·运维
zhangfeng11332 小时前
宝塔8 升级到 11导致 服务器无法访问外网dns失效了,无法访问bt.cn 解决方法 测试通过
运维·服务器
dok123 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (11)kmalloc 动态内存分配和struct file中的私有数据
linux·驱动开发·算法
IT小盘3 小时前
17-构建Prompt测试集-提示词优化不再凭感觉
服务器·windows·prompt
无足鸟ICT4 小时前
【RHCA+】if判断
linux