Linux(进程概念)

目录

冯诺依曼体系

操作系统

进程概念

进程控制

进程状态

环境变量

虚拟地址空间(进程隔离与内存管理的基石)

程序替换


  • 冯诺依曼体系

    • 五大硬件单元
      • 运算器
      • 控制器
      • 存储器
      • 输入设备
      • 输出设备
    • 所有硬件都是围绕内存工作的
  • 操作系统

    • 核心目的:高效管理与便捷交互
      • 资源管理:优化硬件与软件的资源分配
      • 提供抽象接口:屏蔽硬件复杂性
      • 保障系统安全与稳定性
      • 提供用户交互界面
    • 定位:计算机系统的管理者与桥梁
      • 如何管理:先描述再组织
    • 库函数与系统调用的关系
      • 系统调用:操作系统提供给用户程序访问内核服务的接口,是用户态程序进入内核态的唯一途径
      • 库函数:封装在标准库或第三方库的函数,用于提供通用功能,可直接被应用程序调用
      • 库函数可能封装系统调用,系统调用通过库函数暴露接口
  • 进程概念

    • 正在执行的程序
    • 描述信息
      • 一个程序运行时,从硬盘被加载到内存,操作系统为了能够管理好多个程序运行,因此每个程序的运行信息,通过这个描述信息来管理/控制程序运行,因此对于操作系统来说,进程就是pcb,Linux中pcb是task_sturt结构体
      • task_struct内容
        • 标识符
        • 状态
        • 优先级
        • 程序计数器:即将被执行的下一条指令的地址
        • 内存指针
        • 上下文数据
        • I/O状态信息
  • 进程控制

    • 进程创建
      • fork
        • 复制
        • 返回值
      • vfork:创建的子进程直接共享父进程的内存空间,而不是复制
      • 创建一个进程的流程
        • 系统调用入口(fork(),vfork()等)
        • 分配进程控制块(PCB)
        • 资源复制与共享
        • 设置进程状态与调度
        • 返回用户空间
      • 写时拷贝技术:通常情况下,父子代码共享,父子在不写入时,数据也是共享的,当任意一方试图写入时,便以写实拷贝的方式各自一份副本
    • 进程终止:指操作系统结束程序执行并释放资源的过程,是进程什生命的最后阶段
      • 进程终止流程
        • 资源释放阶段
        • 向父进程返回状态
        • init进程接管:若父进程在子进程前终止,子进程会被init进程(pid=1)收养
    • 进程等待:用于协调父子进程的执行顺序和资源回收
      • 为什么需要进程等待
        • 如果父进程不等待子进程,子进程会变成僵尸进程,僵尸进程会引起内存泄漏
      • 如何等待
        • 基本接口
          • wait()
            • #include <sys/wait.h>
              pid_t wait(int *status);
          • waitpid()
            • pid_t waitpid(pid_t pid, int *status, int options);
  • 进程状态

    • 状态
      • 运行状态(R)
      • 睡眠状态(S/D)
        • 可中断睡眠(S)
        • 不可中断睡眠(D)
      • 终止状态(Z/X)
        • 僵尸进程(Z)
        • 退出状态(X)
      • 暂停状态(T)
    • 关键转换场景
      • 运行 -> 睡眠:进程发起I/O请求(如read()),进入S直到数据就绪
      • 睡眠 -> 运行:I/O数据准备完成,内核唤醒进程,放入就绪队列等待调度
      • 运行 -> 暂停:调试器通过ptrace系统调用暂停进程,或用户按Ctrl+Z发送SIGTSTP
      • 运行 -> 僵尸:进程执行exit()或受到无法处理的信号(如SIGKILL),进入Z状态等待父进程回收
    • 僵尸状态
      • 危害:占用PID资源,父进程不回收,会一直存在,导致系统资源浪费
      • 处理方案
        • 父进程调用wait()/waitpid()回收子进程
        • 注册SIGCHLD处理函数,在回调函数中循环调用非阻塞等待
        • 若父进程已终止,子进程被init(PID=1)收养,init会自动回收
    • 孤儿进程
      • 父进程还没wait子进程就释放了,子进程变为孤儿进程
    • 守护进程:长期运行于后台、独立终端控制的系统进程,常用于持续性服务(如Web服务器,数据库服务)
  • 环境变量

    • 概念:是操作系统中存储的一系列键值对,用于向进程传递配置信息
    • 常见环境变量
      • PATH:系统查找可执行文件的路径列表
      • HOME:用户主目录路径
      • LANG:系统语言和字符集设置
      • PWD:当前工作目录
      • SHELL:默认shell程序路径
      • USER:当前用户名
    • 环境变量的分类于存储位置
      • 系统级环境变量
        • 作用范围:所有用户和进程
        • 存储位置
          • /etc/environment(全局配置)
          • ~/.bash_profile、~/.bashrc(用户自定义配置)
      • 进程级环境变量
        • 作用范围:仅当前进程及其子进程
        • 查看方式:env或printenv命令
    • 环境变量的操作
      • 查看环境变量
        # 查看所有环境变量
        env
        # 查看特定变量(如PATH)
        echo $PATH
      • 临时设置环境变量(仅当前会话有效)
        # 格式:export 变量名=值
        export MY_VAR="hello world"  # 定义新变量
        export PATH=$PATH:/new/path  # 追加路径到PATH
      • 永久设置环境变量(修改配置文件)
        echo 'export MY_VAR="permanent value"' >> ~/.bashrc
        source ~/.bashrc  # 立即生效
      • 删除环境变量
        unset MY_VAR  # 删除自定义变量
    • 代码中设置/获取环境变量
      • getenv
      • putenv
      • setenv
  • 虚拟地址空间(进程隔离与内存管理的基石)

    • 本质:虚拟地址空间是操作系统为每个进程提供独立、连续地址视图,它将进程使用的地址(虚拟地址)与物理内存(物理地址)分离
    • 核心作用
      • 提高内存利用率
      • 增加内存访问控制
      • 保持进程独立性
    • 虚拟地址空间的布局
      • 用户空间(3GB):进程可直接访问的地址空间
      • 内核空间(1GB):存储内核代码,数据结构和内核栈
    • 如何通过虚拟地址找到物理地址
  • 程序替换

    • 功能:替换一个进程正在运行的程序
    • 如何替换:详情点击查看程序替换函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值