相关疑难解决方法(0)

当发生中断时,管道中的指令会发生什么?

假设一个5级流水线架构(IF =指令获取,ID =指令解码,EX =执行,MEM =存储器访问,WB =寄存器写回).有4条指令必须执行.

(这些样本说明不准确,但我相信这一点会被理解)

在第五个时钟周期,这些指令将在管道中,如下所示.

添加a,b,c [IF ID EX MEM WB]

添加a,b,d [IF ID EX MEM]

添加a,b,e [IF ID EX]

添加a,b,f [IF ID]

现在,如果发生硬件中断,这些指令会发生什么.只有在执行流水线中的所有指令后才能处理中断吗?是否会以不同的方式处理软件中断和异常?

computer-architecture

22
推荐指数
1
解决办法
1万
查看次数

Meltdown缓解与`calloc()的CoW"延迟分配"相结合,是否意味着calloc()的性能损失 - 分配内存?

所以calloc()通过向操作系统询问一些虚拟内存来工作.操作系统正在使用MMU进行操作,并巧妙地响应虚拟内存地址,该地址实际上映射到一个写满了零的只读页面.当程序尝试写入该页面中的任何位置时,会发生页面错误(因为您无法写入只读页面),会创建该页面的副本,并且您的程序的虚拟内存将映射到这些全新的副本零.

既然Meltdown是一个东西,操作系统已被修补,因此不再可能跨内核用户边界推测性地执行.这意味着每当用户代码调用内核代码时,它就会有效地导致管道停顿.通常,当管道在循环中停顿时,它对性能造成破坏性,因为CPU最终会浪费时间等待数据,无论是来自缓存还是主存储器.

鉴于此,我想知道的是:

  • 当程序写入分配的从未访问过的页面calloc(),并且重新映射到新的CoW页面时,是否正在执行内核代码?
  • 是否在OS级别或MMU级别实现了页面错误写时复制功能?
  • 如果我调用calloc()分配4GiB的内存,然后在紧密的循环中用一些任意值(比如说,0xFF而不是0x00)初始化它,我的(英特尔)CPU每次写入新页面时都会触及推测边界吗?
  • 最后,如果它是真实的,那么这种影响对现实世界的表现有何影响?

performance memory-management cpu-architecture calloc page-fault

7
推荐指数
1
解决办法
286
查看次数