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

相关推荐
九河云32 分钟前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
Lary_Rock36 分钟前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
幺零九零零2 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮4 小时前
Linux 使用中的问题
linux·运维
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
free7 小时前
netstat中sendq/recvq用于排查发送端发送数据的问题
服务器
小林熬夜学编程7 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法