当前位置: 首页 > news >正文

内核编程九:进程概述

进程是任何多道程序设计的操作系统中的基本概念。通常把进程定义为程序执行的一个实例,因此,如果16个用户同时运行vi,那么就有16个独立的进程(尽管它们共享同一个可执行代码)。操作系统会为每个进程分配独立的资源,包括内存、CPU时间、文件描述符等,以保证不同进程之间不会相互干扰。

进程的基本概念

  1. 进程与程序的区别

    • 程序(Program) 是存储在磁盘上的可执行文件,本质上是静态的代码和数据。

    • 进程(Process) 是程序运行后的实例,它是动态的,包含代码、数据、堆栈、CPU寄存器等信息。

  2. 进程的状态

    • 运行(Running):进程正在CPU上执行。

    • 就绪(Ready):进程可以执行,但正在等待CPU调度。

    • 阻塞(Blocked/Waiting):进程在等待某些资源(如I/O或信号)。

    • 终止(Terminated):进程执行完成或被杀死。

  3. 进程的组成

    • 进程ID(PID):系统为每个进程分配的唯一编号。

    • 程序代码(Text):进程执行的指令。

    • 数据段(Data):全局变量等数据。

    • 堆(Heap):动态分配的内存,如malloc申请的空间。

    • 栈(Stack):存放函数调用信息、本地变量等。

进程上下文(process context)

进程上下文是操作系统在管理进程时保存的相关信息集合,用于描述进程的执行状态和环境。主要包括以下内容:

类别描述
进程控制块(PCB)存储进程的标识、状态、优先级、寄存器值、内存管理信息、打开文件列表等。
寄存器状态保存CPU寄存器的当前值,如程序计数器、堆栈指针等,确保进程切换后能恢复执行。
内存管理信息包括页表、段表等,记录进程的内存分配和使用情况。
打开文件列表记录进程打开的文件及其状态,如文件描述符、读写位置等。
信号和信号处理记录进程接收的信号及其处理程序。
进程状态描述进程的当前状态,如运行、就绪、阻塞等。
调度信息包含进程的优先级、调度策略等,用于操作系统调度。
资源使用情况记录进程使用的系统资源,如CPU时间、内存等。
环境变量包含进程运行时的环境变量。
用户和组信息记录进程的用户和组ID,用于权限管理。
  • 进程上下文是操作系统管理进程的核心数据结构,保存了进程的执行状态和环境信息。

  • 进程上下文切换时,操作系统会保存当前进程的上下文并加载下一个进程的上下文,确保进程能正确恢复执行。

中断上下文 vs 进程上下文

特性中断上下文进程上下文
触发原因由硬件或软件中断触发。由进程调度或系统调用触发。
生命周期短暂,仅限于中断处理期间。长期,与进程的生命周期一致。
调度不可调度。可调度,受操作系统管理。
保存内容寄存器、程序计数器、处理器状态等。进程控制块、内存信息、文件描述符等。
特权级别通常在内核态运行。可在用户态或内核态运行。

进程的管理

  1. 创建进程

    • 在Linux系统中,进程通常由fork()vfork()clone()创建:

      • fork():创建一个新进程(子进程),几乎完全复制父进程。

      • exec():在进程内加载并执行新的程序。

      • clone():用于创建更轻量级的进程或线程。

  2. 查看进程

    • ps -aux:查看当前系统的所有进程信息。

    • top / htop:动态查看进程资源占用情况。

    • pgrep 进程名:查找指定进程的PID。

  3. 终止进程

    • kill PID:终止指定进程。

    • killall 进程名:终止所有同名进程。

    • pkill -9 进程名:强制杀死进程。

进程间通信(IPC)

进程是独立的,但可以通过以下方式进行通信:

  • 管道(Pipe):用于父子进程间通信,如ls | grep txt

  • 消息队列(Message Queue):通过内核消息队列传输数据。

  • 共享内存(Shared Memory):多个进程共享同一块内存区域,速度快。

  • 信号(Signal):用于进程间的异步通知,如SIGKILLSIGSTOP

  • 套接字(Socket):用于网络或本机进程通信。

守护进程(Daemon)

守护进程是在后台运行的特殊进程,例如:

  • systemd:管理系统服务的守护进程。

  • sshd:处理远程登录的守护进程。

  • cron:定时任务守护进程。

相关文章:

  • Buffer overFolw---Kryo序列化出现缓冲区溢出的问题解决
  • Spring Cache 实战指南
  • 华为机试牛客刷题之HJ58 输入n个整数,输出其中最小的k个
  • 掌握 Postman:高级 GET 请求技术与响应分析
  • Ubuntu22.04美化MacOS主题
  • 什么是正文化
  • 【CSS3】完整修仙功法
  • WordPress 代码高亮插件 io code highlight
  • 【C++】string类字符串详细解析
  • SCI英文论文Accepted后的第一步——Rights and Access
  • Jenkins 集成 SonarQube 代码静态检查使用说明
  • 【Rust】一文掌握 Rust 的详细用法(Rust 备忘清单)
  • python打包辅助工具
  • 【视频】OpenCV:色彩空间转换、灰度转伪彩
  • react自定义hook
  • 排序复习_代码纯享
  • batman-adv 优化:基于信号强度(RSSI)选择链路
  • SpringCloud配置中心:Config Server与配置刷新机制
  • 使用 Python 和 python-pptx 构建 Markdown 到 PowerPoint 转换器
  • 华为OD机试 - 核酸最快检测效率 - 动态规划、背包问题(Java 2024 E卷 200分)
  • 阿根廷发生5.6级地震,震源深度30公里
  • “网约摩托”在部分县城上线:起步价五六元,专家建议纳入监管
  • 国家网信办举办在欧中资企业座谈会,就数据跨境流动等进行交流
  • 证监会副主席王建军被查
  • 专访 | 杜普兰蒂斯:爱上中国文化,下一步努力提升速度
  • 关于新冠疫情防控与病毒溯源的中方行动和立场