Caching 一个寄存器文件如何足够?
比方说,我正在用汇编语言甚至更高级的语言编写一些代码,并在linux操作系统上编译和运行它 据我所知,当我的程序运行时,它使用CPU 8阵列寄存器文件,而每个阵列的长度为32位。 因此,我的程序运行——并且能够(并且确实)访问这些32位阵列中的每一个 现在我的问题是: 我的计算机,特别是CPU,怎么能负担得起将如此昂贵的资源——它的整个SRAM缓存——投入到一个简单的C/C++程序中,而它肯定有更重要的事情要做,并且在后台运行更广泛、要求更高的进程?Caching 一个寄存器文件如何足够?,caching,memory-management,Caching,Memory Management,比方说,我正在用汇编语言甚至更高级的语言编写一些代码,并在linux操作系统上编译和运行它 据我所知,当我的程序运行时,它使用CPU 8阵列寄存器文件,而每个阵列的长度为32位。 因此,我的程序运行——并且能够(并且确实)访问这些32位阵列中的每一个 现在我的问题是: 我的计算机,特别是CPU,怎么能负担得起将如此昂贵的资源——它的整个SRAM缓存——投入到一个简单的C/C++程序中,而它肯定有更重要的事情要做,并且在后台运行更广泛、要求更高的进程? 我希望我的简单C/C++程序将从RAM中获得
我希望我的简单C/C++程序将从RAM中获得一个很好的切片来运行。如果有两个任务都想使用CPU,而机器中只有一个CPU,那么其中一个将运行,另一个将等待。偶尔会有一个计时器中断出现,导致CPU停止运行当前活动的作业,并跳转到内核的中断处理程序 内核可能决定恢复当前任务,或者给另一个任务一个机会。如果两者都不愿意让CPU(例如等待来自磁盘或网络的数据),那么内核将每秒在它们之间来回切换几次 决定何时切换任务是一个微妙的平衡:允许单个进程长期垄断CPU会使其他进程看起来没有响应,但切换太频繁会降低CPU缓存的效率(切换后,旧进程留下的缓存内容不太可能对新进程有用) 因此,从CPU的角度来看,没有“在后台运行”这样的事情。只有一个正在运行的任务,其他所有的都只是内存中等待使用的数据
你认为进程获取CPU的“切片”并不是完全错误的——你只是在错误的维度上进行切片。进程不获取寄存器文件的切片;它们获取整个CPU的时间片。它们被称为时间片。你需要区分寄存器和缓存(以及现代多任务机器中涉及的所有其他事物):
简单的回答是,操作系统和CPU共同工作,在需要使用这些资源的所有进程之间共享时间。这是他们的工作。他们唯一的工作。CPU芯片上的大部分不动产都是为了使对内存的访问,特别是寄存器文件的访问,对于多个,大部分是独立的进程,尽可能高效nt,任务。