Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 操作系统:内核模式操作_Operating System - Fatal编程技术网

Operating system 操作系统:内核模式操作

Operating system 操作系统:内核模式操作,operating-system,Operating System,如果您能帮助我确定以下哪些操作只应在内核模式下执行/完成,我将不胜感激。我试图在Silberschatz的“操作系统概念”中找到答案,但我仍然不清楚。 以下是决定是在内核模式还是在用户模式下执行的操作列表: (1) disable interrupts detection (2) clear memory (3) switch from the user mode to the kernel mode (4) read the state of the clock/timer (5) deter

如果您能帮助我确定以下哪些操作只应在内核模式下执行/完成,我将不胜感激。我试图在Silberschatz的“操作系统概念”中找到答案,但我仍然不清楚。 以下是决定是在内核模式还是在用户模式下执行的操作列表:

(1) disable interrupts detection
(2) clear memory
(3) switch from the user mode to the kernel mode
(4) read the state of the clock/timer
(5) determine/program timer. 

这只是常识:

  • 禁用中断不应该发生在非特权上下文中,所以通常您不允许这样做
  • 清除内存本身不是一项特权操作,因此它可以在任何上下文中发生(如果内存被“释放”,那么在允许从任何其他上下文访问之前,您必须确定内容是否敏感,但始终清除内容是一种安全的选择)
  • 从用户模式切换到内核模式显然只能在用户模式下发生
  • 读取时钟:如果我们谈论的是硬件时钟,如果它提供内存映射寄存器,那么您可以从用户模式安全地访问它,只要映射区域没有任何敏感信息(它可能有也可能没有,取决于硬件)。如果只是软件,你可以做任何事情
  • 根据实现情况,对计时器进行编程可能会发生在任何一种上下文上,例如:实时调度上下文可以完全在用户模式下实现计时器,而不会出现任何问题,可以通过对硬件计时器进行编程和中断路由(即使需要内核模式,后者也只需要发生一次)或者全部用软件实现。如果不是实时的,完全在用户空间中编程仍然是可能的,但是实现将需要内核端助手(即实时任务或中断)来触发事件

    • 这只是常识:

      • 禁用中断不应该发生在非特权上下文中,所以通常您不允许这样做
      • 清除内存本身不是一项特权操作,因此它可以在任何上下文中发生(如果内存被“释放”,那么在允许从任何其他上下文访问之前,您必须确定内容是否敏感,但始终清除内容是一种安全的选择)
      • 从用户模式切换到内核模式显然只能在用户模式下发生
      • 读取时钟:如果我们谈论的是硬件时钟,如果它提供内存映射寄存器,那么您可以从用户模式安全地访问它,只要映射区域没有任何敏感信息(它可能有也可能没有,取决于硬件)。如果只是软件,你可以做任何事情
      • 根据实现情况,对计时器进行编程可能会发生在任何一种上下文上,例如:实时调度上下文可以完全在用户模式下实现计时器,而不会出现任何问题,可以通过对硬件计时器进行编程和中断路由(即使需要内核模式,后者也只需要发生一次)或者全部用软件实现。如果不是实时的,完全在用户空间中编程仍然是可能的,但是实现将需要内核端助手(即实时任务或中断)来触发事件