【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信息(保存进程打开文件的信息)

相关推荐
qiuqyue6 小时前
基于虹软Linux Pro SDK的多路RTSP流并发接入、解码与帧级处理实践
linux·运维·网络
切糕师学AI6 小时前
Linux 操作系统简介
linux
南烟斋..7 小时前
GDB调试核心指南
linux·服务器
爱跑马的程序员7 小时前
Linux 如何查看文件夹的大小(du、df、ls、find)
linux·运维·ubuntu
像风一样自由9 小时前
android native 中的函数动态注册方式总结
android·java·服务器·安卓逆向分析·native函数动态注册·.so文件分析
oMcLin9 小时前
如何在 Ubuntu 22.04 LTS 上部署并优化 Magento 电商平台,提升高并发请求的响应速度与稳定性?
linux·运维·ubuntu
Qinti_mm9 小时前
Linux io_uring:高性能异步I/O革命
linux·i/o·io_uring
优雅的38度9 小时前
linux环境下,使用docker安装apache kafka (docker-compose)
linux·架构
小李独爱秋10 小时前
计算机网络经典问题透视:TLS协议工作过程全景解析
运维·服务器·开发语言·网络协议·计算机网络·php
想唱rap10 小时前
表的约束条件
linux·数据库·mysql·ubuntu·bash