• Linux:进程(概念)


    进程的概念

    • 字面上: 运行中的程序.(我们写的代码运行起来,就算一个进程了)
    • 底层上: PCB + 代码和数据 + 空间资源(虚拟内存,页表,物理内存)
      • PCB:操作系统通过其对程序进行管理(对数据的管理,先对其抽象,再使用数据结构管理)
      • 虚拟内存:使得同时运行的程序不互相干扰
    • 特点: 承担分配系统资源的基本实体(资源分配的基本单位)

    PCB:记录了其相关的属性,如:内存指针,上下文数据

    冯诺依曼计算机结构: 程序要运行是要在CPU上跑的, CPU与内存交互, 先将程序加载到内存中

    进程的状态

    1.状态

    • 新建:字面意思
    • 运行:task_struct (Linux下的PCB)在运行队列中排队,就叫做运行态
    • 阻塞等待资源就绪, 就叫阻塞状态,挂在等待队列中.其它设备也有阻塞队列,如键盘
    • 挂起:当内存紧张时,OS通过适当的置换进程的代码和数据到磁盘

    2.Linux下的状态

    进程:前台进程 和 后台进程(&)(不会影响命令行交互)

    • R:运行态
    • S:阻塞态       (可中断睡眠)
    • D:睡眠状态 (磁盘睡眠/深度睡眠 不可被被动唤醒)                                                      
    • T:暂停状态    (调试状态)
    • X:终止 (死亡) 瞬时性非常强(当前资源可以被回收)
    • Z:僵尸状态(一个进程已经退出,但还是不允许OS释放,处于一个被检测的状态)

    3.僵尸进程与孤儿进程

    僵尸进程: 一个子进程退出,但资源还未释放, 处于被检测状态.

    • 问题:内存泄漏

    孤儿进程:父进程比子进程先退出,处于无人看管状态

    • 一般OS会自动领养, 程序结束资源自动释放

    父进程: 一般都是要回收子进程的. 是其通过fork创建的, 让其执行其它命令,一般会关系执行的结果

    进程的优先级

    概念

    • PRI :进程被执行的优先级,其值越小越早被执行(60 ~ 99)
    • NI :代表这个进程的nice值 (-20 ~ 19)

    操作

    • ps -al : 查看优先级
    • top + r ->输入进程pid -> 输入nice值

    原因

    • 资源是有限的

    环境变量

    1.概念: 环境变量是一种文本数据(一般是某些程序的路径) 

    • 环境变量默认在系统的配置文件当中
    • 默认我们所查到的环境变量是内存级的

    2.功能: 告诉bash某些程序的路径

    3.常见的环境变量

    • PATH: 指定命令的搜索路径
    • HOME: 用户主工作目录路径
    • SHELL: shell路径(一般是usr/bin)

    4.操作

    • env : 显示所有环境变量
    • echo $xxx 查看指定的环境变量
    • export name=xxx 导入环境变量(覆盖)
    • unset name : 取消环境变量

    5.补充

    • bash : 命令解释器, 用来执行用户的指令(创建子进程执行), 帮助用户使用OS
    • bash的启动: 会将环境变量加载到自己的上下文中(所以执行ls等指令的时候可以不带路径)
    • bash执行的指令
      • 内建指令(bash自己完成不需要路径) 外建指令(需要环境变量告知路径)
    • bash子进程的运行
      • 生成argv表(命令行参数): 来自用户, 将某些数据传递给子进程(如某些指令的选项 -a等)
      • 生成envc表(环境变量): 来自OS

    6.获取环境变量的方式

    • extern char** environ;
    • 命令行参数
    • 调用函数: getenv("path");

    地址空间

    虚拟地址空间:一种数据结构

    为什么要有地址空间?

    • 进程的独立性
      • 通过虚拟地址空间与页表来实现,每个进程认为自己独享内存4G(32).通过页表能将其映射到不同区域上,来实现互不干扰
      • 让进程以统一的角度看待物理内存(各种区域的层次划分: 栈, 堆, 数据段, 代码段等)
      • 让进程以有序的方式看待自己的运行区域(页表的映射修正, 物理内存不连续, 虚拟连续)
      • 让进程模块的管理和内存模块的管理解耦
    • 有效的保护内存:凡是非法的访问或者映射,OS都会识别到,并终止你这个进程
    • 提高资源利用率:当你要写入数据的时候 OS 才帮你申请物理内存.

    可执行程序的理解

    1. 1 .exe就是一个文件
    2. 2 可执行程序是按照地址空间方式进行编译的
    3. 3 可执行程序,按照区域被划分为了以4KB为单位(页帧)
    4. //物理内存也以4KB为单位进行划分(页框)
    5. //IO的基本单位是4KB,IO的时候:将页帧装进页框里
    6. //OS使用struct Page来管理这些4KB

    描述地址空间的数据结构

    1. struct vm_area_struct Linux 内核中用于描述虚拟内存区域的结构体
    2. 主要包含以下字段:
    3. unsigned long vm_start:虚拟内存区域的起始地址
    4. unsigned long vm_end:虚拟内存区域的结束地址
    5. struct vm_area_struct *vm_next:指向下一个虚拟内存区域的指针
    6. struct vm_area_struct *vm_prev:指向上一个虚拟内存区域的指针
    7. ...

    缺页中断

    当程序试图访问虚拟内存中的一个页,但是该页不在物理内存中时,就会发生缺页中断。操作系统会响应这个中断,将需要的页从辅助存储(如硬盘)中加载到主内存中,然后重新执行产生中断的指令。

    页表的映射

    进程的调度

    Linux系统

    • 分时操作系统: 拆分为时间片
      • 活动队列: 只出不进(出以及跑完时间片的进程)
      • 过期队列: 只进不出(进新来的进程)
      • 最后活动队列为空, 过期队列累计进程, 进行指针交换. 循环往复
    • 实时操作系统: 每个进程必须跑完

  • 相关阅读:
    代码随想录二刷 |数组 | 螺旋矩阵II
    c/c++如何实现根据磁盘空间管理自己的日志文件案例
    Windows Server 2019 - 文件共享
    轻量级神经网络算法系列文章-ShuffleNet v1
    初识Git
    【CV】第 2 章:使用本地二进制模式的内容识别
    服装公司事务/办理流程是如何办理的?
    秘密共享(Secret Sharing,SS)
    js题解(三)
    Python web 框架web.py「简约美」
  • 原文地址:https://blog.csdn.net/m0_70402487/article/details/132757730