0

我是计算机体系结构和设计的新手。我的问题是一个高级程序指令集一个接一个地在 CPU 中执行。在执行这些指令时,它是否甚至涉及操作系统指令作为开销?例如:如果在 2 GHz 处理器中,有 2*10^9 条指令可以在 2*10^9 时钟周期内执行。那么操作系统总是每秒执行大约 1*10^9 条指令。这种开销是否总是存在,并且只有另外 1*10^9 指令可以免费执行以供其他自定义计划程序执行?

这是否意味着操作系统应该始终执行尽可能少的指令,以便它可以容纳更多要执行的其他程序?

4

2 回答 2

1

两个问题都是肯定的,在一定范围内。

首先,是的,如果操作系统使用 1e9 指令/秒,则只剩下 1e9 指令/秒。

其次,是的,你想尽可能地减少它;它被称为“开销”。

“限制”是操作系统确实为您做了好事。例如,考虑多任务处理,操作系统允许您同时运行多个程序,在它们之间共享处理器。一方面,涉及开销。另一方面,如果没有它,您要么在没有程序运行时让机器长时间闲置,要么您必须自己模拟多任务处理——这至少需要与操作系统一样多的指令。

于 2010-12-10T21:10:34.350 回答
1

扩展一下 Martin 先生的回答:(注意,这是高度简化的)操作系统的工作是处理程序不想为自己做的那些事情——比如处理 I/O 中断和安排多个任务共享机器。在运行一个应用程序的机器上的完美世界中,该程序将控制 CPU,直到它需要操作系统为它做一些事情,比如从磁盘文件中读取下一条记录(调用分层“服务”来找出哪个磁盘,哪个文件,哪个记录,哪个字节并计算哪个磁盘块在哪个轨道上从磁盘控制器询问。典型的“真实”机器也有一堆后台任务在运行,保持屏幕更新,读取时钟,检查新邮件,下载补丁等。这是优先考虑的地方。某些任务以较低的优先级运行,因为我们不在乎它们何时完成,例如更新 Windows 中的系统托盘图标以获取新邮件通知。其他任务以高优先级运行,但非常短,例如在屏幕上跟随鼠标并将其从指针更改为手。请记住,一个典型的任务在需要一些操作系统服务并在它发生时进入睡眠之前只执行几百条指令。大型应用程序可能有数十万条“指令”,但又会花费一些时间等待其他东西,从按钮按下或键盘输入到另一台机器上数据库查找的响应。CPU 密集度最高的应用程序,例如将 Pi 计算到小数点后一百万位,可能会长时间消耗 99.9% 的处理器,但是操作系统会定期中断它,看看是否需要做其他事情。回到 DOS(1980 年代)的日子,该程序实际上可以占用 who CPU 一段时间,但如果它需要在屏幕上读取或写入或键入某些内容,则必须作为 BIOS 来执行此操作,除非该程序是写来做那些基本的操作。其中一些是计算机游戏的响应方式,通过执行直接修改屏幕所需的特定操作,并直接从键盘或鼠标设备缓冲区读取,绕过操作系统。希望我没有让你更困惑...... 除非程序被编写来执行这些基本操作。其中一些是计算机游戏的响应方式,通过执行直接修改屏幕所需的特定操作,并直接从键盘或鼠标设备缓冲区读取,绕过操作系统。希望我没有让你更困惑...... 除非程序被编写来执行这些基本操作。其中一些是计算机游戏的响应方式,通过执行直接修改屏幕所需的特定操作,并直接从键盘或鼠标设备缓冲区读取,绕过操作系统。希望我没有让你更困惑......

于 2010-12-10T21:37:10.047 回答