是否可以在不使用 asm 代码的情况下制作内核映像?
is it possible to make a kernel image without using asm code?
我在网上看到很多教程都在使用 assembly language
和 C
来构建新的内核映像。但是我不明白为什么需要汇编,而 C Compiler
可以从 c 代码生成 asm
。
使用assembly
代码编写内核的原因是什么?以及如何在 C
下开发内核而不需要在 asm 中编写代码?
您没有定义用 C 编写内核对您意味着什么。
您可以在 C 代码中对 embed assembler 使用 asm
语句或声明(但那是 "cheating" 并且不再是可移植的 C)。
但是你不能写一个完整的multi-tasking kernel in pure portable C, because some things (notably those manipulating tasks or continuations or call stacks or interrupts - i.e. the scheduler - or virtual memory) cannot be coded in C. Notice that even longjmp(3)不能用纯C实现
见OSDEV wiki and read Operating Systems : Three Easy Pieces
还研究 现有调度程序、中断处理程序、VM 子系统……在 free software 操作系统中的源代码(并问问自己如何重新编码在 C 中,他们正在使用的汇编代码)。它们需要汇编程序(不仅或主要不是出于 "performance" 或 "readability" 原因)。
我在网上看到很多教程都在使用 assembly language
和 C
来构建新的内核映像。但是我不明白为什么需要汇编,而 C Compiler
可以从 c 代码生成 asm
。
使用assembly
代码编写内核的原因是什么?以及如何在 C
下开发内核而不需要在 asm 中编写代码?
您没有定义用 C 编写内核对您意味着什么。
您可以在 C 代码中对 embed assembler 使用 asm
语句或声明(但那是 "cheating" 并且不再是可移植的 C)。
但是你不能写一个完整的multi-tasking kernel in pure portable C, because some things (notably those manipulating tasks or continuations or call stacks or interrupts - i.e. the scheduler - or virtual memory) cannot be coded in C. Notice that even longjmp(3)不能用纯C实现
见OSDEV wiki and read Operating Systems : Three Easy Pieces
还研究 现有调度程序、中断处理程序、VM 子系统……在 free software 操作系统中的源代码(并问问自己如何重新编码在 C 中,他们正在使用的汇编代码)。它们需要汇编程序(不仅或主要不是出于 "performance" 或 "readability" 原因)。