深入理解OS--漫游,流水线,汇编
计算机系统漫游编译过程1.预先处理阶段宏展开#include展开得到文本表示的.i文件2.编译阶段转换为汇编表示的.s文件3.汇编阶段转换为二进制机器指令表示的.o文件4.链接阶段链接得到可执行二进制指令文件系统的硬件组成1.总线常被设计为传送定长的字节块称为字。总线有各种类型不同类型有不同作用。系统总线内存总线I/O总线。2.桥连接不同类型总线。cpu直连系统总线通过io桥分别连接内存总线i/o总线。3.I/O设备每个I/O设备通过一个设备控制器嵌入到系统或适配器可插拔与I/O总线相连4.主存物理上由一组动态随机存取存储器芯片组成逻辑上一个线性的字节数组每个字节有唯一地址5.处理器解释或执行存储在主存中指令的引擎处理器按指令模型操作模型由指令集架构决定。5.1.处理器位宽总线位宽32 位和 64 位 CPU 最主要区别在于一次能计算多少字节数据(1).32 位 CPU 一次可以计算 4 个字节(2).64 位 CPU 一次可以计算 8 个字节这里的 32 位和 64 位通常称为 CPU 的位宽代表的是 CPU 一次可以计算运算的数据量。如果计算的数额不超过 32 位数字的情况下32 位和 64 位 CPU 之间没什么区别的只有当计算超过 32 位数字的情况下64 位的优势才能体现出来。另外由于总线传输数据地址控制信息位宽一般等于CPU位宽故32位CPU最大只能寻址4GB内存。而64位CPU寻址范围则很大理论最大的寻址空间为2^64。5.2.软件位宽64 位和 32 位软件实际上代表指令是 64 位还是 32 位的。64位指令可以使用64位寄存器支持64位宽的运算指令。(1).如果 32 位指令在 64 位机器上执行需要一套兼容机制就可以做到兼容运行了。但是如果 64 位指令在 32 位机器上执行就比较困难了因为 32 位的寄存器存不下 64 位的指令(2).操作系统其实也是一种程序我们也会看到操作系统会分成 32 位操作系统、64 位操作系统其代表意义就是操作系统中程序的指令是多少位比如 64 位操作系统指令也就是 64 位因此不能装在 32 位机器上。6.寄存器文件一个小的存储设备由一些单个字长的寄存器组成每个寄存器有唯一的名字指令集架构描述的是每条机器代码指令的效果微体系结构描述的是处理器实际如何实现存储器层次结构操作系统管理硬件所有应用程序对硬件的操作尝试必须通过操作系统基本功能1.防止硬件被失控的应用程序滥用2.向应用程序提供简单一致的机制来控制低级硬件设备进程并发运行一段时间内交替运行并行运行同一时刻同时运行。上下文操作系统保持跟踪进程运行所需的所有状态信息上下文切换操作系统把控制权从当前进程转移到另一进程时发生具体动作保存当前进程的上下文恢复新进程的上下文将控制权传递到新进程管理方系统内核操作系统代码常驻内存的部分线程作为执行单元。同一进程的多个线程在进程上下文运行共享同样的代码和全局数据虚拟内存每个进程有一个虚拟地址空间。mmap堆区域增长方向实际上是可配置的。下图为向上增长。文件文件就是字节序列设备都可看成是文件系统间利用网络通信多核多线程多核将多个CPU集成到一个集成电路芯片上超线程多线程允许一个CPU执行多个控制流指令级并行处理器同时执行多个指令超标量处理器可达到比一个周期一条指令更快的执行速率单指令多数据并行一个执行操纵多个目标数据汇编不同机器对应不同汇编语言。本部分介绍基于x84-64的汇编语言。寄存器1.PC 下条指令在内存中的地址2.整数寄存器文件含16个命名的位置分别存64位值。3.条件码寄存器4.一组向量寄存器16组寄存器介绍6432168描述%rax%eax%ax%al%rbx%ebx%bx%bl%rcx%ecx%cx%cl%rdx%edx%dx%dl%rsi%esi%si%sil%rdi%edi%di%dil%rbp%ebp%bp%bpl%rsp%esp%sp%spl%r8%r8d%r8w%r8b%r9%r9d%r9w%r9b%r10%r10d%r10w%r10b%r11%r11d%r11w%r11b%r12%r12d%r12w%r12b%r13%r13d%r13w%r13b%r14%r14d%r14w%r14b%r15%r15d%r15w%r15b指令源数据1.常数2.取自寄存器3.取自内存指令结果存储1.寄存器2.内存寻址模式Imm(rb, ri, s)对应的有效地址为ImmR[rb] R[ri] * s例子操作数数值描述$ImmImm数值为ImmraR[ra]数值在寄存器ra内(ra)M[R[ra]]从寄存器ra内取地址从地址所在内存处取值Imm(rb, ri, s)M[ImmR[rb]R[ri]*s]计算地址为ImmR[rb]R[ri]*s再从地址所在内存处取值程序的用户栈从栈底逐渐扩展。扩展方向是虚拟地址不断减少的方向。指向栈顶对象的虚拟地址小于指向栈底对象的虚拟地址。条件码寄存器标志位意义描述CF进位标志最近的操作是否让最高位产生了进位ZF零标志最近的操作得出的结果为0SF符号标志最近的操作得到的结果为负数OF溢出标志最近的操作导致一个补码溢出局部数据需要放在内存的情形为了提升效率一般情况下局部变量存储在寄存器中。1.寄存器不足以存放所有本地数据2.对局部数据用了3.局部变量是数组或结构内存对齐任何k字节的基本对象的虚拟地址需要是k的倍数。汇编代码中使用.align x指明全局数据所需的对齐。举例structs2{inti;intj;charc;};structs2a;structs2d[4];为了保证任意s2类型实例中字段ij的地址可被sizeof(int)整除必须要求1.对i对象内偏移为0对j对象内偏移为4。2.对s2的实例对象对象起始地址需要可被4整除。进一步考虑s2类型数组下每个数组中对象实例起始地址需要可被4整除所以每个s2实例实际占据的内存尺寸是12字节。函数指针的值是该函数机器代码表示中第一条指令的地址。指令流水线指令分解指令分解描述取值PC地址处获取指令译码执行访存数据写入内存/从内存读数据写回写结果到寄存器文件更新PC顺序执行时的问题一个时钟周期需要足够大以使信号能在一个周期内传播所有阶段。流水线提高了系统单位时间内服务的顾客总数。对单个顾客可能会增加完成任务所需时间流水线的目的是每个时钟周期都发射一条新指令。需在取出当前指令后马上确定下条指令位置。数据相关下条指令会用到上条指令结果控制相关下条指令位置由上条指令确定用暂停来避免数据冒险转发【用上一指令计算中间数据作为本指令数据来源】综合使用暂停转发插入气泡【让已进行的指令变为无效】指令执行速度CPU 的硬件参数都会有GHz这个参数比如一个1GHz 的CPU指的是时钟频率是1G代表着1秒会产生1G次数的脉冲信号每一次脉冲信号高低电平的转换就是一个周期称为时钟周期。对于 CPU 来说在一个时钟周期内CPU 仅能完成一个最基本的动作时钟频率越高时钟周期就越短工作速度也就越快。一个时钟周期一定能执行完一条指令吗答案是不一定的大多数指令不能在一个时钟周期完成通常需要若干个时钟周期。但通过流水线技术基本可以做到每个时钟周期将一个新的指令投入运行。一个老的指令执行完其最后一个周期。内联在原本要调用函数的地方直接展开消除了函数调用的开销。提升程序性能设计时间复杂度良好的算法避免不必要的多次求值和函数调用减少不必要的内存访问对不可预测的分支采用条件传送代替分支预测循环展开技术利用时间局部性空间局部性

相关新闻

带薪快乐日记:用微信小程序记一笔「带薪快乐」

带薪快乐日记:用微信小程序记一笔「带薪快乐」

带薪快乐日记:用微信小程序记一笔「带薪快乐」一篇可公开的产品介绍 使用说明 技术片段。文中截图为示意稿,代码为脱敏示例,不含 AppID、云环境 ID、密钥或真实用户数据。这是什么? 带薪快乐日记(工程代号 HappyPoop…

2026/10/31 5:04:37 阅读更多 →
深入解析二极管指数I-V特性:从物理原理到工程实践

深入解析二极管指数I-V特性:从物理原理到工程实践

1. 从“开关”到“指数”:二极管正向特性的真实面貌 提起二极管,很多刚入行的电子工程师或者硬件爱好者的第一反应就是“单向导电”,把它想象成一个理想的电子开关:正向导通,反向截止。这个模型在分析数字电路、整流大…

2026/10/31 5:06:32 阅读更多 →
STM32-047X-STM32单片机智能交流电表047X-21(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

STM32-047X-STM32单片机智能交流电表047X-21(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

STM32-047X-STM32单片机智能交流电表047X-21(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 产品功能描述: 本系统由STM32F103C8T6单片机核心板、TFT1.44寸彩屏液晶显示电路、交流电压互感器TV1005M、交流电流互感器TA1005M、继电器…

2026/10/27 16:15:14 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/31 0:19:11 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/30 9:20:34 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/30 10:19:21 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/31 0:59:28 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/30 10:19:39 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/30 9:21:37 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 17:32:24 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 10:28:40 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 0:09:01 阅读更多 →