我正在为操作系统课做一个学校项目。我必须估计各种开销 - 例如,时间测量开销、上下文切换开销、内存/磁盘访问开销。 在其中几种情况下,我需要估计开销的软件开销部分是什么,以及硬件组件是什么。 有人能举个例子来说明哪些操作将被描述为硬件开销,哪些操作将被描述为软件吗? 我是否正确地假设在调用函数时设置堆栈是软件开销,因为它只涉及移动指针? 访问磁盘上的块会是硬件开销吗? 这些操作似乎很容易描述。 也许有人可以举一些其他的例子来巩固我的理解。
给你作业的人应该定义所涉及的术语,例如software overhead
或hardware component
。如果他们没有,你应该问。
它并不像看起来那么清晰。你似乎接受了这种Accessing a block on disk would be hardware overhead
.那么记忆呢?内存是一个硬件组件,就像硬盘驱动器一样。每次内存访问都需要一个可测量的时间,尽管时间很短。这是否要计入软件与硬件的数量?这甚至在谈论管道、缓存或虚拟内存页面错误之前,这些错误可以转化为磁盘访问。
我可以对网络、GPU、显示器等提出类似的观点。然而,主要的观点仍然是,对于一项任务,询问总是比猜测更好 - 而且可能猜错了。
这些是正确的例子。硬件开销的其他一些示例包括等待设备(例如打印机)和等待网络上的另一个节点。
软件开销可能是访问共享库,虚拟表也是如此。您将很难在内核空间中找到它们;我不认为共享对象可以存在于用户空间之外。