CPU执行指令的过程

通过前面两篇文章的介绍,我们已经认识到了:可执行程序通过作业调度装入内存,操作系统为进程创建虚拟地址空间,分配物理内存,建立页表(映射关系),申请并初始化PCB,开始调度进程。

大概结构如图:

当CUP调度此进程时,将PCB内的硬件上下文数据拷贝到CPU内部的寄存器上,开始逐句执行进程的指令代码。

依次介绍CPU中几种重要的寄存器:

  1. PC:程序计数器,存放进程当前要执行指令的地址。
  2. IR:指令寄存器,存放进程从内存中取回来,要被执行的指令。
  3. SP:堆栈指针寄存器,用于存放进程的栈顶地址。
  4. MAR:用于存放将要被访问的内存单元的地址。
  5. MDR:用于存放最近从内存中读取的内容。
  6. 条件码寄存器:CPU根据最近的运算结果设置的硬件位。

指令的格式:

下面描述指令的执行过程(指令周期):

取指周期:将内存中的指令取回来至IR

  1. CPU调度该进程,将PCB内的硬件上下文数据拷贝给CPU内的寄存器。
  2. PC寄存器存放着待执行指令的地址。
  3. 通过硬件线路将地址传送给MAR。
  4. 控制单元CU通过总线向主存发送读命令。
  5. 将MAR所指向的内存单元的数据通过总线读取到MDR中。
  6. 将MDR的数据送入IR。

间址周期:

如果地址码不是有效地址,而是一个间接地址(这个地址指向的内存单元中存放着有效地址),则会存在间址周期(负责将有效地址取回CPU中)。

  1. 将IR中的地址码部分送至MAR
  2. 控制单元CU通过总线向主存发送读命令。
  3. 将MAR所指向的内存单元的有效地址通过总线读取到MDR中。
  4. 将MDR中的有效地址送至IR。

执行周期:执行取回来的指令

将IR中的操作码部分 送至指令译码器,产生特定指令的控制电位,将其送至微操作控制线路上,在时序部件定时信号的作用下,产生具体的操作控制信号。

请注意: ++以上所谈到的指令中的地址码,以及指令本身的地址,均是进程的虚拟地址空间中的地址,在CPU视角只需要对这些虚拟地址进行操作即可,具体物理内存地址在CPU和内存之间有MMU来进行虚拟地址和物理地址的转换(通过PCB内的页表)。++

进程虚拟地址空间:

操作系统为每个进程提供的一种抽象的内存管理方式,它允许每个进程拥有自己的地址空间,这个地址空间对进程来说是连续的,但实际上可能分散在物理内存中。

优点如下:

  1. 隔离性:每个进程的虚拟地址空间是独立的,一个进程不能直接访问另一个进程的虚拟内存,这提供了进程间的隔离,增强了系统的稳定性和安全性。

  2. 保护:操作系统可以通过虚拟地址空间来保护进程,防止进程间相互干扰。例如,一个进程不能访问或修改另一个进程的代码或数据。

  3. 简化内存管理:虚拟地址空间允许操作系统使用分页技术,将虚拟地址映射到物理地址,这样可以有效地管理内存资源,提高内存利用率。

  4. 动态内存分配:进程可以根据需要动态地申请和释放虚拟内存,操作系统负责将这些虚拟内存映射到物理内存中。

  5. 内存共享:操作系统可以通过映射相同的物理内存到不同进程的虚拟地址空间来实现内存共享。

  6. 内存保护:操作系统可以设置虚拟地址空间的不同区域为可读、可写或不可执行,以防止程序错误地访问或修改内存。

  7. 内存访问的局部性:操作系统可以根据程序访问虚拟内存的局部性原理,优化内存的分配和访问,提高性能。

  8. 支持多任务:虚拟地址空间使得操作系统可以在同一物理内存上同时运行多个进程,每个进程都认为自己拥有整个内存空间。

  9. 灵活性:虚拟地址空间允许操作系统实现多种内存管理策略,如分页、分段等,以适应不同的应用需求。

虚拟地址空间为进程提供了一个抽象的、易于管理的内存模型,同时也为操作系统提供了强大的内存管理能力。

相关推荐
qwy7152292581633 分钟前
13-R数据重塑
服务器·数据库·r语言
anddddoooo2 小时前
域内证书维权
服务器·网络·网络协议·安全·网络安全·https·ssl
zhoupenghui1683 小时前
golang时间相关函数总结
服务器·前端·golang·time
努力的小T3 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
不修×蝙蝠4 小时前
HTTP 协议(Ⅲ)
服务器·http·javaee·http协议
梨落秋溪、4 小时前
输入框元素覆盖冲突
java·服务器·前端
猫猫的小茶馆5 小时前
【网络编程】UDP协议
linux·服务器·网络·网络协议·ubuntu·udp
鱼嘻5 小时前
Linux自学day23-进程和线程
linux·服务器·c语言·进程和线程
爆更小小刘5 小时前
Linux下基本指令(4)
linux·运维·服务器
yuanbenshidiaos6 小时前
【linux核心命令】
linux·服务器·数据库