首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么代码是用户模式代码,什么代码是内核模式代码?

什么代码是用户模式代码,什么代码是内核模式代码?
EN

Stack Overflow用户
提问于 2018-10-14 05:10:46
回答 2查看 2.1K关注 0票数 0

在学习操作系统课程时,我有一个问题要问自己。

如果我向我的文本编辑器输入任何C代码,或者通过IDE并使用编译器执行它,它就会将代码转换成机器代码。

然后,如果我运行这个程序,操作系统将为内核代码所做的代码分配一个内存地址。

如果在我的代码中输入了IO中断,内核代码就会执行。

那么so...which位是用户模式代码吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-14 05:18:28

在一般情况下,您编写的任何代码都是“用户模式代码”。只有在执行系统调用和控件从用户代码跳转到操作系统时,才会执行内核模式代码。

显然,如果您正在编写内核代码或可加载内核模块,那么情况就不同了--这段代码将是内核模式代码。但大多数情况下,大多数人只编写用户模式代码。

票数 2
EN

Stack Overflow用户

发布于 2018-10-14 07:04:54

内核模式与用户模式实际上反映了处理器的运行方式。

在现代操作系统中,只有在操作系统信任的情况下,代码才在内核模式下运行(与处理器一起运行),而所有其他代码都以用户模式运行。

在现代操作系统下,内核模式代码的不同之处在于内核模式代码运行在一个表示所有系统资源的单一(虚拟)地址空间中,因此内核模式下的所有函数都可以直接相互影响。例如,内核模式驱动程序的所有操作都可以直接影响操作系统本身和任何其他内核模式驱动程序的功能。(具体的实现细节在操作系统类型之间有所不同,例如windows、linux、BSD等,但基本原则是相同的)

这意味着,如果您正在编写将在操作系统内部工作或内核模式驱动程序中执行的代码,则可以说它是内核模式代码。否则,它将是用户模式代码.除非处理器本身处于内核模式,否则代码尝试只能在内核模式下执行的操作将被处理器本身阻止。操作系统本身在处理器进入内核模式时起中介作用,这就是为什么代码需要被操作系统识别(或者在内核模式驱动程序中安装),这样才能完成只能在内核模式下完成的事情。如果没有操作系统已经识别的一些代码的帮助,用户模式代码就不能任意将处理器升级到内核模式。

实际上,现代操作系统还提供了一组可以从用户模式调用的函数(例如,在API中)。许多这些函数本身都是在用户模式下单独执行的。但是,有些结果是将处理器切换到内核模式以执行某些特定的操作,然后通过时间控制返回给调用方,将处理器切换回用户模式。操作系统内部以用户模式或内核模式执行的代码既取决于操作系统的设计,也取决于管理设置(例如,只有适当的特权用户(又名管理员)才能安装内核模式驱动程序)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52799661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档