linux(基础回顾 进程概念 内存管理 程序地址空间)

/进程概念

//冯诺伊曼体系结构;现代计算机的硬件体系结构

//将计算机硬件划分为5大类 输入设备 输出设备 存储器 运算器 控制器

//在计算机中 数据流是围绕内存工作 意味着cpu要处理任意的数据 都需要先把数据放在内存中

//因此如果我们要应用一个程序 先把这个程序的指令加数据 加载到内存中

//操作系统的功能层次划分

//操作系统是什么 是一个软件 负责对计算机上的软硬件资源进行管理

//系统调用接口 操作系统内核提供给上层用于进行计算机操作的接口

//库函数 就是对系统调用接口进行二次封装接口

//库函数和系统调用的关系 库函数内部调用了系统调用接口

//进程概念

//站在用户的角度 运行中的程序

//站在系统的角度 对应运行中的程序的动态运行中的描述

//这个描述在linux下是结构体形式 struct task_struct{}

// 进程到底描述了什么信息

// 1 标识符 进程ID pid

// 2 进程调度信息 描述了如何调度一个程序的运行

// 3 进程状态 对进程不同运行状态进行描述 让进程在合适的时候做合适的事情

// 4 进程的内存管理 进程内部所有的数据都会占据内存 了解进程内部内存管理方式

// 5 进程内打开的文件信息 通过了解这块信息 更加深入的了解系统调用I/O

// 6 进程间通信资源管理 描述进程间通信相关资源信息

// 7 进程信号的软中断相关内容

// 8 . . .

// 1 标识符 进程ID 其实就是一个数字

// 在linux下可以通过ps指令查看进程信息 ps -ef

// 2 进程调度

// 并行 多个进程可以同时进行

// 串行 有多个进程 但是同一时间只能运行一个

// 并行和串行 在计算机上取决于CPU核心数量 每个CPU核心上都有一套独立的寄存器

// 计算机上运行的程序非常多 但CPU核心很少 如何让他们同时运行

// CPU分时机制

// 一个程序运行的时候 只能cpu上运行很短的一段数据(时间片) 时间片运行完毕 则切换下一个进程运行

// 分时机制 实现了多个进程在宏观上的并行 但是我们要理解微观上他们实际上是串行的

// 一旦程序是切换运行的 等切换回来的时候 cpu又怎么知道该从哪里开始继续运行

// 为了解决这个问题 因此在task_struct (PCB-进程控制块) 中就有一系列的程序保存程序的运行上下文

// pc寄存器内容 即将要执行的指令地址

// 一系列上下文数据 正在处理的数据 即将处理的数据

// 因此一旦cpu切换轮转回来了 就可以通过pid找到task_struct 从中取出这些上下文数据

// cpu寄存器中 cpu就可以从原来的位置继续向下执行 处理用来没有处理完的数据

//进程状态

//三态模型 就绪 运行 阻塞

//linux 的进程状态

// 运行态 就绪+运行 拿到时间片就能运行 以及正在运行的都属于运行态

// 可中断休眠态 不但可以被条件唤醒 还可以被打断的阻塞状态

// 阻塞态有一个唤醒条件 只有唤醒条件达成的时候才能转换为就绪态

// 不可中断休眠态 只能被条件唤醒 不可以被打断的阻塞状态

// 停止态 让进程停止运行 只能通过特殊方式唤醒

// 追踪态 调试的时候涉及到的状态

// 死亡态 进程退出后 资源全部释放完处于的一个短暂状态

// 僵尸态 一个进程退出了 但是资源没有被完全释放的状态

// 产生 由于子进程退出 但是父进程没有关注子进程的退出状态所导致的

// 危害 会造成系统资源泄露

// 解决 kill -9 强制杀死

// 避免 进程等待 等待子进程退出 获取他的返回值

//内存管理 程序地址空间

// 程序地址空间 进程的虚拟地址空间

// 进程的地址空间是虚拟的地址空间 ,并不是给每个进程都分配了4G内存

// 程序地址空间 实际上是系统给我们的进程所描述的一个虚拟的地址空间

// 这个描述在pcb中是 mm_struct结构体

// 虚拟地址空间的作用

// 实现数据在物理内存中的离散式存储 提高内存利用率 并进行内存访问控制 提高进程独立性

// 虚拟地址的实现 依赖一个关键性技术 页表 (内存的分页式管理)

// 虚拟地址空间 进行虚拟地址描述

// 页表信息 虚拟地址和物理地址的映射关系 访问权限 缺页中断标志

// 4k页面大小 4G内存有多少页面

// 1024*1024=2^20

// 虚拟地址组成 页号+页内偏移

// 32为系统下 地址大小4字节 32个比特位

// 页号 占据地址中的高20位

// 页内偏移 占据地址中的低12位

相关推荐
jarreyer35 分钟前
【AI Agent】大模型自动化载体
运维·自动化
xixingzhe21 小时前
SpringBoot + Nginx 免鉴权接口安全防护方案
运维·nginx·安全
翼龙云_cloud2 小时前
阿里云国际代理商:阿里云 ECS 全维度监控配置教程
运维·阿里云·云计算·监控
笑锝没心没肺2 小时前
fail2ban工具安装配置及使用
linux·运维·服务器
zt1985q3 小时前
本地部署开源智能家居集成平台 ioBroker 并实现外部访问( Windows 版本)
运维·服务器·智能家居
大卡片4 小时前
linux内核驱动开发
linux·运维·驱动开发
心心喵5 小时前
[linux] nohup和pm2的区别 进程保活
linux·运维·服务器
NGINX开源社区6 小时前
F5 NGINX Ingress Controller 5.3.0 新增功能
运维
醉熏的石头6 小时前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
SelectDB7 小时前
Apache Doris 在 AgentLogsBench 中领先,支撑 Agent 可观测性生产负载
运维·数据库·agent