在学习操作系统课程时,我对自己有疑问。
如果我在文本编辑器中或通过IDE输入任何C代码并使用编译器执行 它将代码转换为机器代码。
然后我猜如果我运行该程序,则操作系统将为由内核代码完成的代码分配一个内存地址。
如果在我的代码中键入了IO中断,则将执行内核代码。
那...那么用户模式代码是哪一位?
答案 0 :(得分:1)
在正常情况下,您编写的任何代码都是“用户模式代码”。仅当您执行系统调用并且控件从用户代码跳转到操作系统时,才会执行内核模式代码。
很显然,如果您正在编写内核代码或可加载的内核模块,则情况有所不同-该代码将是内核模式代码。但是大多数人大多数时候只写用户模式代码。
答案 1 :(得分:0)
内核模式与用户模式实际上反映了处理器的运行方式。
在现代操作系统中,如果操作系统信任代码,则仅在内核模式下运行(使用处理器),而所有其他代码在用户模式下运行。
在现代操作系统下,功能上的区别在于内核模式代码在代表所有系统资源的单个(虚拟)地址空间中运行,因此内核模式下的所有功能都可以直接相互影响。例如,内核模式驱动程序的所有操作都可以直接影响操作系统本身以及任何其他内核模式驱动程序的功能。 (具体的实现细节在不同的操作系统类型之间有所不同,例如在Windows,Linux,BSD等之间,但基本原理是相同的)
这意味着,如果您编写的代码将在操作系统的内部工作或内核模式驱动程序内执行,则可以说它是内核模式代码。否则,它将是用户模式代码。除非处理器本身处于内核模式,否则试图执行只能在内核模式下执行的某些操作的代码将被处理器本身阻止这样做。操作系统本身在处理器进入内核模式时进行中介,这就是为什么代码需要由操作系统识别(或在内核模式驱动程序的情况下已安装)才能执行只能在内核模式下完成的事情。没有操作系统已经识别的某些代码,用户模式代码无法将处理器任意升级为内核模式。
实际上,现代操作系统还提供了可以从用户模式调用的一组功能(例如,在API中)。这些功能中的许多功能本身都是在用户模式下执行的。但是,这会导致处理器切换到内核模式以执行某些特定操作,然后在时间控制权返回给调用者时,处理器会切换回用户模式。在操作系统本身中,哪个代码以用户模式或内核模式执行,取决于操作系统的设计和管理设置(例如,只有具有特权的用户(又名管理员)才能安装内核模式驱动程序)。>