查看“Higher Half Kernel”的源代码
←
Higher Half Kernel
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{Stub}} {{Template:Kernel designs}} 向每个用户进程中映射内核是传统做法的,通常也是比较好的做法。 例如,Linux和许多其它类Unix系统内核驻留在每个地址空间的虚拟地址 “0XC0000000-0XFFFFFFFF”,用户代码、数据、堆栈、库等的范围为 “0x00000000-0xbffffff”。 有这种设计的内核因为相对与应用程序,内核使用了“higher half(高一半)”的虚拟地址空间。(译者注:注意,这里指的是虚拟地址空间的相对关系。Higher Half Kernel也许可以翻译为“置高内核”,下文不翻译。) 此外,还有一些非x86 ISA ([[MIPS Overview|MIPS]] [[User:schol-r-Lea/Underming RISC vs CISC|RISC Architecture]]和[[AArch64|ARM]])在一定程度上导致了必须使用该设计。 在MIPS和ARM系统上,使用高位 (位31还是位63,取决于系统字宽) 的地址保留用于主管模式( Supervisor mode),并且在用户模式(User mode)下使用会设置异常捕获。 higher half内核的优点是: * 更容易设置[[Virtual 8086 Mode|VM86-虚拟8086模式]]进程,因为1MB以下的区域是用户空间。 * 针对更一般的CPU架构,用户应用程序不依赖于内核空间的内存有多少 (无论内核是在 “0xC0000000” 、 “0x80000000” 还是 “0xE0000000”...),你的应用程序都可以链接到0x400000),这使得ABI更好。(译者注:这里意思应该是指面对不同物理内存和CPU,这样可以让用户空间没有最小基地址的限制,从0开始,对ABI更好) * 如果你的操作系统是64位的,那么32位应用程序将能够使用完整的32位地址空间。 * 可以使用'助记(Mnemonic)'无效指针,如“”0xCAFEBABE“”、“”0xDEADBEEF“”、“”0xDEADC0DE“”等。“” == Bootloader支持 == 为了让事情变得更简单,一些引导加载程序通过直接加载内核并将其映射到虚拟内存中的上半部分,原生支持higher half内核。 * [[BOOTBOOT]]按设计只支持higher half内核。 它有用 [[C]] 、 [[Pascal]] 、 [[Rust]] 和 [[Go]] 编写的Hello World内核示例 * [[Limine]]需要内核中的特殊节,有关如何为Limine编写简单的64位higher half内核的教程,请参阅[[stivale Bare Bones]]。 ==初始化== 要设置higher half内核,你必须将内核映射到适当的虚拟地址。 当使用直接支持higher half内核的引导协议时,比如[[BOOTBOOT]]或[[stivale]],内核已经被正确映射。 如何做到这一点基本上取决于'''何时'''你希望你的内核相信它处于较高端,以及'''何时'''你设置了分页。 如果没有引导加载程序的帮助,你需要一个小的蹦床(trampoline)代码,它在lower half运行,设置higher half分页和jump。 ==另见== ===文章=== * [[Higher Half x86 Bare Bones]] === 论坛主题 === * [[Topic:11160|I wrote a simple HigherHalf kernel]] [[Category:Kernel]]
本页使用的模板:
模板:If
(
查看源代码
)
模板:Kernel designs
(
查看源代码
)
模板:Show1
(
查看源代码
)
模板:SmallNavBox
(
查看源代码
)
模板:Stub
(
查看源代码
)
返回至“
Higher Half Kernel
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息