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

5.进程基本概念

5.进程基本概念

      • **1. 进程的基本概念**
      • **2. 进程与程序的区别**
      • **3. 进程的状态**
      • **4. 进程调度**
      • **5. 进程相关命令**
      • **6. 进程创建与管理**
      • **7. 进程的应用场景**
      • **8. 练习与作业**
      • **9. 进程的地址空间**
      • **10. 进程的分类**
      • **11. 进程的并发与并行**
      • **12. 总结**


1. 进程的基本概念

  • 进程:进程是程序执行的过程,操作系统会为其分配内存资源和CPU调度。
  • PCB(Process Control Block):进程控制块,是一个结构体,用于存储进程的相关信息,如:
    • PID:进程标识符。
    • 当前工作路径。
    • umask:文件创建时的默认权限掩码。
    • 进程打开的文件列表。
    • 信号相关设置。
    • 用户ID和组ID。
    • 进程资源的上限(可通过ulimit -a查看)。

2. 进程与程序的区别

  • 程序
    • 静态的,存储在硬盘中的代码和数据的集合。
    • 没有状态变化,无法并发执行。
  • 进程
    • 动态的,程序执行的过程,包括创建、调度和消亡。
    • 有状态变化,可以并发执行。
    • 进程之间会竞争计算机资源。
    • 一个程序可以运行多次,生成多个进程;一个进程可以运行一个或多个程序。

3. 进程的状态

  • 基本状态
    • 就绪态:进程已准备好,等待CPU调度。
    • 执行态:进程正在CPU上运行。
    • 阻塞态:进程因等待某些资源(如I/O)而暂停执行。
  • Linux中的进程状态
    • 运行态(R):进程正在运行或等待运行。
    • 睡眠态(S/D)
      • 可唤醒等待态(S)。
      • 不可唤醒等待态(D)。
    • 停止态(T):进程被暂停。
    • 僵尸态(Z):进程已终止,但其资源未被完全释放。
    • 结束态:进程已终止并释放资源。

4. 进程调度

  • 调度算法:操作系统通过调度算法决定哪个进程获得CPU资源。
    • 时间片轮转(RR):每个进程轮流获得CPU时间片。
    • 先进先出(FIFO):按进程到达顺序分配CPU资源。
  • 宏观并行,微观串行:多个进程看似同时运行,但实际上是通过快速切换实现的。

5. 进程相关命令

  • ps aux:查看系统中所有进程的详细信息。
  • top:实时查看进程的CPU占用率等信息。
  • kill:向指定进程发送信号。
    • kill -2 PID:发送SIGINT信号,终止进程。
    • kill -9 PID:发送SIGKILL信号,强制终止进程。
  • killall:向指定名称的所有进程发送信号。
    • killall -9 a.out:强制终止所有名为a.out的进程。

6. 进程创建与管理

  • fork
    • 函数原型:pid_t fork(void);
    • 功能:创建一个子进程,子进程是父进程的完全拷贝。
    • 返回值:
      • 父进程中:返回子进程的PID(>0)。
      • 子进程中:返回0。
      • 失败时返回-1。
    • 特点
      • 子进程从fork之后开始执行。
      • 子进程和父进程共享代码段,但拥有独立的数据空间。
  • getpid
    • 函数原型:pid_t getpid(void);
    • 功能:获取当前进程的PID。
  • getppid
    • 函数原型:pid_t getppid(void);
    • 功能:获取当前进程的父进程PID。

7. 进程的应用场景

  • 场景1:一个进程希望复制自己,使父子进程同时执行相同的代码段(如网络服务)。
  • 场景2:一个进程需要执行一个不同的程序(通过fork + exec实现)。

8. 练习与作业

  • 练习1:设计一个程序,动态生成两个进程,分别向同一个文件中写入不同的数据,并标明进程ID和时间。
    • 示例:
      父进程 1123 16:02:10
      子进程 1124 16:02:15
      
  • 作业1:动态生成n个子进程,并打印输出各自的PID。
    • 示例:
      进程1 PID: 111
      进程2 PID: 222
      

9. 进程的地址空间

  • 虚拟地址空间
    • 0-3G:用户空间,每个进程独立。
    • 3G-4G:内核空间,所有进程共享。
  • 物理内存与虚拟内存的映射
    • 通过MMU(内存管理单元)实现虚拟地址到物理地址的映射。
    • 1页 = 4KB。

10. 进程的分类

  • 交互式进程:与用户交互的进程(如Shell)。
  • 批处理进程:执行批处理任务的进程(如Shell脚本)。
  • 守护进程:在后台运行的进程,通常用于提供服务(如httpd)。

11. 进程的并发与并行

  • 并发:多个进程交替执行,宏观上看似同时运行。
  • 并行:多个进程真正同时运行(需要多核CPU支持)。

12. 总结

进程是操作系统资源分配和调度的基本单位。通过fork可以创建子进程,父子进程共享代码段但拥有独立的数据空间。进程的状态包括就绪态、运行态、阻塞态等,操作系统通过调度算法管理进程的执行。通过pstopkill等命令可以查看和管理进程。


http://www.kler.cn/a/525884.html

相关文章:

  • Day29(补)-【AI思考】-精准突围策略——从“时间贫困“到“效率自由“的逆袭方案
  • 零基础Vue入门4——Vue3基础核心
  • Redis学习之哨兵二
  • 具身智能研究报告
  • 计算机网络之计算机网络主要性能
  • three.js用粒子使用canvas生成的中文字符位图材质
  • fastadmin加密生成token
  • 数据分析系列--④RapidMiner进行关联分析(案例)
  • python编程环境安装保姆级教程--python-3.7.2pycharm2021.2.3社区版
  • 学习数据结构(4)顺序表+单链表
  • MySQL 索引存储结构
  • 在Windows上非ASCII(包括中文名)用户名导致Bazel不能使用的问题
  • 游戏开发领域 - 游戏引擎 UE 与 Unity
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架
  • 智云-一个抓取web流量的轻量级蜜罐-k8s快速搭建教程
  • 基于 WEB 开发的在线考试系统设计与实现
  • [创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索
  • 蓝桥杯之c++入门(一)【C++入门】
  • OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境
  • 什么是线性化PDF?
  • Effective Objective-C 2.0 读书笔记—— 消息转发
  • 登录管理——认证方案(JWT、拦截器、ThreadLocal)
  • 代码随想录算法训练营第三十九天-动态规划-337. 打家劫舍 III
  • 批量解密,再也没有任何限制了
  • 【逻辑学导论】1.4论证与说明
  • AI领域的技术评估与地缘政治困境 ——评析Anthropic CEO关于DeepSeek的矛盾论述