大家好我是程序员小青蛙下面分享进程的概念以及在linux下的实现情况一、冯・诺依曼体系结构计算机的底层骨架1. 核心五大部件与工作流程五大部件运算器、控制器、存储器、输入设备、输出设备核心规则必背数据与指令都以二进制形式存放在 ** 存储器内存** 中程序执行前必须加载到内存CPU运算器 控制器不直接和外设打交道只和内存直接交互外设数据必须先读入内存CPU 才能处理CPU 要输出的数据也必须先写入内存再由内存传给外设控制信号与数据信号分离控制信号由控制器发出数据信号在各部件间传输2. 关键概念辨析概念定义特点存储器体系中的指内存主存掉电易失速度快临时存储数据 / 指令外存如磁盘属于外设永久存储设备速度慢掉电不丢数据程序 / 数据的永久存放地外设输入设备键盘、网卡、输出设备显示器、网卡需通过驱动程序与操作系统交互3. 生活案例理解QQ 聊天你在键盘输入 “你好”数据流程键盘 → 内存 → CPU处理 → 内存 → 网卡 → 对方电脑内存 → CPU → 对方显示器前提QQ 程序必须先加载到内存CPU 才能执行代码、处理数据二、操作系统硬件资源的 “大管家”1. 操作系统的本质与目标定义一个对计算机软硬件资源进行管理的系统软件核心目标对下合理管理硬件资源CPU、内存、磁盘、外设提高资源利用率对上为用户 / 应用程序提供稳定、高效、安全的执行环境2. 操作系统的四大核心管理模块进程管理管理运行中的程序进程分配 CPU 时间片实现多任务并发内存管理管理内存空间分配 / 回收保证进程间内存隔离避免冲突文件系统管理磁盘上的文件实现数据的永久存储与高效访问驱动管理通过驱动程序与外设交互屏蔽硬件差异为上层提供统一接口3. 管理的本质先描述再组织操作系统对硬件 / 软件的管理本质和我们用 C 语言写通讯录一样先描述用结构体定义被管理对象的属性如进程用struct task_struct描述包含 PID、状态、内存地址等再组织用数据结构链表、数组等将多个对象组织起来实现增删改查管理类比校长管理学生 → 用结构体描述学生信息用链表组织所有学生通过管理链表实现对学生的管理三、进程运行起来的程序1. 程序与进程的区别核心考点程序存放在磁盘上的静态文件是指令和数据的集合如 QQ.exe进程程序加载到内存后正在运行的实例是动态的有生命周期创建、运行、终止一句话区分程序是静态的文件进程是程序的一次运行过程2. PCB进程控制块进程的 “身份证”定义操作系统用struct task_struct结构体描述进程这个结构体就是 PCB核心作用保存进程的所有属性PID进程 ID、状态、优先级、内存地址、打开的文件等让操作系统可以管理进程通过链表组织所有进程的 PCB实现调度、终止等操作task_struct内容分类标示符描述本进程的唯一标示符PID用来区别其他进程状态任务状态、退出代码、退出信号等优先级相对于其他进程的优先级程序计数器程序中即将被执行的下一条指令的地址、内存指针包括程序代码和进程相关数据的指针以及和其他进程共享的内存块的指针上下文数据进程执行时处理器的寄存器中的数据如 CPU 寄存器I/O 状态信息包括显示的 I/O 请求、分配给进程的 I/O 设备和被进程使用的文件列表记账信息可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等其他信息进程的组成进程 PCB内核数据结构 进程对应的代码和数据解析进程标识符的作用在 Linux 中每个进程都有两个关键的标示符PIDProcess ID进程 ID当前进程的唯一数字编号PPIDParent 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 aux、top等工具通过 PID 显示进程信息进程间通信IPC 机制如管道、信号依赖 PID 定位目标进程日志记录系统日志、应用日志中用 PID 标识事件对应的进程2.PPID记录进程的 “父子关系”作用标识创建当前进程的父进程构建进程间的层级关系应用场景理解进程创建通过 PPID 可以追溯进程的来源例如命令行启动的进程 PPID 通常是bash终端进程处理僵尸进程父进程通过 PPID 识别子进程调用wait()回收其退出状态孤儿进程管理父进程退出后子进程会被init进程领养PPID 变为 1进程树管理操作系统通过 PID 和 PPID 构建进程树管理进程的创建与终止3. 进程的动态属性进程在调度运行时会有不同状态就绪、运行、阻塞等可以被创建、调度、终止常用操作getpid()获取当前进程的 PIDkill -9 进程ID强制终止进程命令行启动的进程父进程默认是bash终端进程4.fork()创建子进程核心规则fork()执行前只有父进程一个进程fork()执行后产生父进程和子进程两个进程后续代码被父子进程共享通过返回值区分父子进程父进程返回子进程的 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. 层次模型从上到下用户层用户通过命令行shell、应用程序、开发工具操作计算机系统调用接口操作系统提供的接口用户程序通过它请求操作系统服务如文件读写、进程创建操作系统内核进程管理、内存管理、文件系统、驱动管理等核心模块驱动程序连接操作系统与硬件实现对磁盘、网卡、显卡等外设的控制底层硬件CPU、内存、磁盘、网卡、键盘、显示器等物理设备2. 关键理解操作系统的 “隔离与服务”操作系统不相信任何用户程序不会让用户程序直接访问硬件用户程序必须通过系统调用请求操作系统服务操作系统再通过驱动程序控制硬件类比银行系统不允许用户直接进入仓库操作必须通过银行柜台接口办理业务复习重点清单冯诺依曼体系的五大部件和核心规则CPU 只和内存交互操作系统的定义、四大管理模块和 “先描述再组织” 的管理思想程序与进程的区别PCB 的概念和作用fork()函数的执行逻辑和父子进程的区分计算机层次结构中用户程序如何通过操作系统访问硬件