我真的不明白如何区分用户和 O/S 特定指令。它们本质上都是“用户”程序。
不同之处在于:你是为了让这件事发生而开始了一项任务,还是它自己发生了?
您是否启动了从硬盘驱动器读取的任务,或者您是否只是指示操作系统这样做?(在大多数情况下,所有设备访问都是操作系统指令)
有时教授想让你说“读取硬盘驱动器是用户启动的”,但“操作系统的抢先式多任务处理始终是操作系统启动的”或“用户操作可能会在等待设备完成响应和操作系统时保持有限状态在抢占式多任务操作系统中返回控制"
这些是我解释答案的方式,但如果你在课程作业中找不到这些答案,那么采用我的答案对你没有任何帮助。请注意,我在每个之后都做了一个简短的介绍来解释我为什么选择这些东西。我不是你的教授,无法知道他/她的意图,所以请确保你能理解我的回答。此外,在 ASM 中编程有助于回答其中一些问题......
执行停止 CPU 执行的“睡眠”指令
操作系统。Sleep 实际上只是一个计数器,表示跳过一个或多个周期的执行,并且通常由 API 调用建模。这可以允许调度程序访问延迟重新加载被抢占的任务,直到多轮之后。再一次,许多非常基本的平台甚至需要一个 NOP 循环计数器才能接近模拟睡眠命令。
用新的内存地址加载“程序计数器”PC 寄存器
操作系统。程序计数器寄存器旨在供系统使用以跟踪程序的当前执行,并且在多进程抢占期间可用于保存程序的当前执行点。
读取磁盘控制器寄存器
操作系统。一般而言,用户命令不与磁盘子系统交互,尽管在旧系统上可以访问它们,通常是通过直接寄存器访问。在更现代的系统中,磁盘只能由操作系统访问,并且只能由用户通过 API 访问。
产生中断的“陷阱”
用户,操作系统。这是当我们生成请求让 O/S 为我们处理情况时,我们将控制权交给内部内核。它还可能导致某些东西返回故障状态。
将警报超时值加载到时钟寄存器中
操作系统。这些计时器通常被认为具有系统级访问权限,因为它们用于监视系统的其余部分。通常会在支持这种保护的 CPU 中受到保护(例如那些支持环级执行预防的 CPU)。
读取处理器状态字 PSW 寄存器
用户,操作系统。值得注意的是,PSW 寄存器仅受系统级控制。在极少数情况下,人们可能会发现一种系统允许用户读取一个、两个或仅一些 PSW 寄存器。由于这些是程序执行的状态字段,因此通常不需要用户可读。
加载内存下限寄存器
用户,操作系统。所有内存寄存器分配都是通过 CPU 命令完成的,这些命令直接从加载到 CPU 寄存器中的二进制可执行文件接收。没有任何限制(除了在参与的处理器中更改执行环级别),这些限制特别防止在应用程序级别发生。某些设备交互可能会或可能不会被允许,并且寄存器通常是设备在旧硬件上的交互方式。请注意,基本内存地址可能不是0
,并且 O/S 可能会专门拦截内存调用以对应用程序进行沙箱处理。
添加两个内存位置的内容
用户,操作系统。这是算法设计的基本要求,通常是设计到 CPU 单元中的第一个也是最基本的命令之一。