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

【linux学习】进程的概念和在linux系统下的基本实现情况01

大家好,我是程序员小青蛙,下面分享进程的概念以及在linux下的实现情况

一、冯・诺依曼体系结构:计算机的底层骨架

1. 核心五大部件与工作流程

  • 五大部件:运算器、控制器、存储器、输入设备、输出设备
  • 核心规则(必背)
    1. 数据与指令都以二进制形式存放在 ** 存储器(内存)** 中,程序执行前必须加载到内存
    2. CPU(运算器 + 控制器)不直接和外设打交道,只和内存直接交互
      • 外设数据必须先读入内存,CPU 才能处理;CPU 要输出的数据也必须先写入内存,再由内存传给外设
    3. 控制信号与数据信号分离:控制信号由控制器发出,数据信号在各部件间传输

2. 关键概念辨析

概念定义特点
存储器(体系中的)内存(主存)掉电易失,速度快,临时存储数据 / 指令
外存(如磁盘)属于外设,永久存储设备速度慢,掉电不丢数据,程序 / 数据的永久存放地
外设输入设备(键盘、网卡)、输出设备(显示器、网卡)需通过驱动程序与操作系统交互

3. 生活案例理解(QQ 聊天)

  1. 你在键盘输入 “你好”,数据流程:键盘 → 内存 → CPU(处理) → 内存 → 网卡 → 对方电脑内存 → CPU → 对方显示器
  2. 前提:QQ 程序必须先加载到内存,CPU 才能执行代码、处理数据

二、操作系统:硬件资源的 “大管家”

1. 操作系统的本质与目标

  • 定义:一个对计算机软硬件资源进行管理的系统软件
  • 核心目标
    • 对下:合理管理硬件资源(CPU、内存、磁盘、外设),提高资源利用率
    • 对上:为用户 / 应用程序提供稳定、高效、安全的执行环境

2. 操作系统的四大核心管理模块

  1. 进程管理:管理运行中的程序(进程),分配 CPU 时间片,实现多任务并发
  2. 内存管理:管理内存空间分配 / 回收,保证进程间内存隔离,避免冲突
  3. 文件系统:管理磁盘上的文件,实现数据的永久存储与高效访问
  4. 驱动管理:通过驱动程序与外设交互,屏蔽硬件差异,为上层提供统一接口

3. 管理的本质:先描述,再组织

操作系统对硬件 / 软件的管理,本质和我们用 C 语言写通讯录一样:

  1. 先描述:用结构体定义被管理对象的属性(如进程用struct task_struct描述,包含 PID、状态、内存地址等)
  2. 再组织:用数据结构(链表、数组等)将多个对象组织起来,实现增删改查管理
  • 类比:校长管理学生 → 用结构体描述学生信息,用链表组织所有学生,通过管理链表实现对学生的管理

三、进程:运行起来的程序

1. 程序与进程的区别(核心考点)

  • 程序:存放在磁盘上的静态文件,是指令和数据的集合(如 QQ.exe)
  • 进程:程序加载到内存后,正在运行的实例,是动态的,有生命周期(创建、运行、终止)
  • 一句话区分:程序是静态的文件,进程是程序的一次运行过程

2. PCB(进程控制块):进程的 “身份证”

  • 定义:操作系统用struct task_struct结构体描述进程,这个结构体就是 PCB
  • 核心作用
    1. 保存进程的所有属性:PID(进程 ID)、状态、优先级、内存地址、打开的文件等
    2. 让操作系统可以管理进程:通过链表组织所有进程的 PCB,实现调度、终止等操作
    3. task_struct内容分类
      标示符:描述本进程的唯一标示符(PID),用来区别其他进程
      状态:任务状态、退出代码、退出信号等
      优先级:相对于其他进程的优先级
      程序计数器:程序中即将被执行的下一条指令的地址、
      内存指针:包括程序代码和进程相关数据的指针,以及和其他进程共享的内存块的指针
      上下文数据:进程执行时处理器的寄存器中的数据(如 CPU 寄存器)
      I/O 状态信息:包括显示的 I/O 请求、分配给进程的 I/O 设备和被进程使用的文件列表
      记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等
      其他信息

  • 进程的组成进程 = PCB(内核数据结构) + 进程对应的代码和数据

解析进程标识符的作用

在 Linux 中,每个进程都有两个关键的标示符:

  • PID(Process ID):进程 ID,当前进程的唯一数字编号
  • PPID(Parent Process ID):父进程 ID,创建当前进程的进程编号
    #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { printf("pid %d\n", getpid()); // 获取当前进程的PID printf("ppid %d\n", getppid()); // 获取当前进程的PPID return 0; }

    查看进程符

  • 1.PID:操作系统识别进程的 “唯一身份证号”

  • 作用:区分系统中所有进程,是进程的唯一标识
  • 应用场景:
    • 管理进程:用kill PID命令发送信号(如终止、暂停进程)
    • 调试与监控:ps auxtop等工具通过 PID 显示进程信息
    • 进程间通信:IPC 机制(如管道、信号)依赖 PID 定位目标进程
    • 日志记录:系统日志、应用日志中用 PID 标识事件对应的进程
  • 2.PPID:记录进程的 “父子关系”

  • 作用:标识创建当前进程的父进程,构建进程间的层级关系
  • 应用场景:
    • 理解进程创建:通过 PPID 可以追溯进程的来源,例如命令行启动的进程 PPID 通常是bash(终端进程)
    • 处理僵尸进程:父进程通过 PPID 识别子进程,调用wait()回收其退出状态
    • 孤儿进程管理:父进程退出后,子进程会被init进程领养,PPID 变为 1
    • 进程树管理:操作系统通过 PID 和 PPID 构建进程树,管理进程的创建与终止

3. 进程的动态属性

  • 进程在调度运行时,会有不同状态(就绪、运行、阻塞等),可以被创建、调度、终止
  • 常用操作:
    • getpid():获取当前进程的 PID
    • kill -9 进程ID:强制终止进程
    • 命令行启动的进程,父进程默认是bash(终端进程)

4.fork():创建子进程

  • 核心规则
    1. fork()执行前:只有父进程一个进程
    2. fork()执行后:产生父进程和子进程两个进程,后续代码被父子进程共享
    3. 通过返回值区分父子进程:
      • 父进程返回子进程的 PID(大于 0)
      • 子进程返回 0
      • 出错返回 - 1
  • 作用:实现多任务并发,让父子进程可以执行不同的任务逻辑

创建子进程

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { int ret = fork(); printf("hello proc : %d!, ret: %d\n", getpid(), ret); sleep(1); return 0; }

子进程返回0

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { int ret = fork(); if(ret < 0){ perror("fork"); return 1; } else if(ret == 0){ //child printf("I am child : %d!, ret: %d\n", getpid(), ret); }else{ //father printf("I am father : %d!, ret: %d\n", getpid(), ret); } sleep(1); return 0; }

进程同时进行,并发


四、计算机的层次结构:从用户到硬件

1. 层次模型(从上到下)

  1. 用户层:用户通过命令行(shell)、应用程序、开发工具操作计算机
  2. 系统调用接口:操作系统提供的接口,用户程序通过它请求操作系统服务(如文件读写、进程创建)
  3. 操作系统内核:进程管理、内存管理、文件系统、驱动管理等核心模块
  4. 驱动程序:连接操作系统与硬件,实现对磁盘、网卡、显卡等外设的控制
  5. 底层硬件:CPU、内存、磁盘、网卡、键盘、显示器等物理设备

2. 关键理解:操作系统的 “隔离与服务”

  • 操作系统不相信任何用户程序,不会让用户程序直接访问硬件
  • 用户程序必须通过系统调用请求操作系统服务,操作系统再通过驱动程序控制硬件
  • 类比:银行系统不允许用户直接进入仓库操作,必须通过银行柜台(接口)办理业务

复习重点清单

  1. 冯诺依曼体系的五大部件和核心规则(CPU 只和内存交互)
  2. 操作系统的定义、四大管理模块和 “先描述再组织” 的管理思想
  3. 程序与进程的区别,PCB 的概念和作用
  4. fork()函数的执行逻辑和父子进程的区分
  5. 计算机层次结构中,用户程序如何通过操作系统访问硬件
http://www.zskr.cn/news/1372585.html

相关文章:

  • 2026 四川建筑钢材怎么选?西南 TOP 经销商维度拆解:行情、价格与采购指南 - 四川盛世钢联营销中心
  • Codeforces Round 1058
  • 2026最新免费图片去水印工具详细教程丨手把手教会你,一看就会
  • HexStrike AI v6.0:面向红队实战的可审计智能体渗透框架
  • 2026年国内人力资源管理系统核心供应商综合排行 - 互联网科技品牌测评
  • AWVS 25.5 Windows版深度部署指南:CVE精准验证与DevSecOps集成
  • 北京手表回收老手探店:第一次卖表必看,流程 / 价格 / 防骗全攻略 - 奢侈品回收测评
  • Kubernetes事件驱动架构设计:构建响应式微服务系统
  • 2026年AI论文写作工具实测认证:5款神器从文献到降重一站式避坑指南
  • 《当下的力量》7-10章终章解读:从临在到臣服,活出生命的终极自由
  • 信创中间件深度解析:东方通TongWeb vs 金蝶天燕 vs 宝兰德,企业级选型指南
  • Python算法基础篇之广度优先搜索(BFS)
  • 深度剖析Claude Code实操逻辑,解锁AI编程高效开发方式
  • 掌握AI技能配置技巧 大幅提升日常办公开发效率
  • 2026 四川钢管优质供应商推荐|盛世钢联全品类现货批发,价格行情与采购指南 - 四川盛世钢联营销中心
  • Burp Suite实操避坑指南:从抓包失败到漏洞验证的完整链路
  • Python 开发者如何通过 Taotoken 快速接入多款大模型 API
  • 为什么你的DeepSeek工具调用总是超时?揭秘底层Tool Executor线程池配置的2个致命默认值及修复代码
  • 告别卡顿!用scrcpy v2.0无线投屏小米/华为手机到Windows电脑的保姆级教程
  • 保姆级教程:从黑屏闪退到流畅狂飙,搞定Win11下NFS21运行库问题
  • CentOS 7服务器上,从禁用Nouveau到成功点亮NVIDIA显卡的保姆级实录
  • Lance 写入链路:Merge Into、Compaction 与 Stable Row ID
  • 2026 四川型钢优质供应商推荐|盛世钢联全品类现货批发,价格行情与采购指南 - 四川盛世钢联营销中心
  • 2026 四川钢板优质供应商推荐|盛世钢联全品类现货批发,价格行情与采购指南 - 四川盛世钢联营销中心
  • Kubernetes多集群管理策略:统一管理多个K8s集群
  • Kubernetes自动化运维与CI/CD集成:构建高效的持续交付流水线
  • 2026深圳南山劳动纠纷律师服务态度实测:耐心负责才靠谱 - 从来都是英雄出少年
  • 2026深圳劳动纠纷律师推荐 本土专业靠谱律所指南 - 从来都是英雄出少年
  • 江苏半导体设备外壳实力厂商排行 品质保障维度解析 - 奔跑123
  • 【审计专栏】【财务领域】第二十八篇 全球/中国货币流动中离钱最近的岗位01