这个介绍是否发生在NTLDR阶段,因为它必须引入,我的意思不是用C写的内核?我认为只有“已知之前”编程语言的计算机是在处理器的微码上硬编码的汇编语言。操作系统如何引入C语言来编写内核
回答
第一个操作系统全部用汇编写成。 C语言的创建是因为它的第一个用例是UNIX的创建。编写一个C编译器来处理这些代码,并生成系统可以理解的程序集(编译器是用汇编语言编写的)。效果从那里雪球。我们现在有一个更强大的系统来编写代码,所以我们当然可以用更高层次的方法编写更好的编译器和更好的软件,并让编译器为我们完成工作。
至于的Windows而言,它被称为QDOS的操作系统,这是写在C
的重写旁注:操作系统仍需要汇编代码,有需要的许多信息与硬件无关件功能(例如,CR2读取x86上的页面错误)。引导加载程序和BIOS(较旧的)是在汇编中编写的,因为它们对于硬件非常特殊,并且需要设置诸如中断和堆栈指针之类的东西。
Windows不是QDOS的重写。 Windows是由Dave Cutler领导的绿色领域发展的NT。没有非NT Windows曾经重写过QDOS。它们最初是在MS DOS之上编写的,后来独立于它。 –
Microsoft MS-DOS是Tim Paterson的QDOS的重写。 QDOS是用C语言编写的。所有的微软操作系统都是从MS-DOS演变而来的。 Windows 3.0和OS/2是彼此完全独立的分支,并且来自Windows NT。 Windows 98是使用16位(DOS)代码的最后一个操作系统; Windows XP是第一个拥有所有32位(Windows NT)代码的消费者操作系统。 – paulsm4
@ paulsm4感谢您的支持 –
C是一种编译语言,与解释语言相反。 C程序以及C运行时库都被编译成机器代码,因此它们不需要任何类型的运行时环境,例如要加载的解释器或虚拟机来执行。
编译的程序(包括内核)的切入点将调用它的运行时库,并进行执行程序前所需的任何初始化,但是这是所有的机器代码。
几乎所有的程序和所有操作系统(包括Windows内核)都依赖于运行时支持。例如,NT的“Win32”子系统(csrss.exe)由kernel32.dll,user32.dll,gdi32.dll组成。 – paulsm4
我不是指运行时库;这些也是编译好的。我所说的是编译的程序不需要启动解释器或虚拟机来执行。 ntoskrnl将使其运行时库静态链接。 –
@ paulsm4:那些DLL也不是用C编写的。我的意思是,他们所代表的逻辑原本是,但在物理上,对于硬盘上的那些特定文件,这是很久以前编制的。 –
- 1. 什么编程语言是Android操作系统和它的内核编写?
- 2. 移动操作系统及其编写的编程语言
- 3. 操作系统的语言?
- 4. 以解释语言编写操作系统
- 5. 什么是开始写入的最佳语言操作系统
- 6. 使用C++编写操作系统
- 7. 如何编写操作系统
- 8. 不同体系结构的操作系统汇编语言
- 9. 检测操作系统语言
- 10. 崇高的文字2编写C语言编程系统
- 11. Linux内核操作系统寄存器
- 12. 已安装语言包安装的操作系统语言?
- 13. 核心图像内核语言的OpenGL坐标系统
- 14. 多核和操作系统
- 15. 更改“区域和语言”设置操作系统编程
- 16. 在不同操作系统上使用编程语言
- 17. 什么Linux操作系统来与Linux内核2.6.32
- 18. 使用C语言监视Windows操作系统的进程
- 19. 如何获得操作系统的语言名称
- 20. 在Linux中如何表示操作系统语言
- 21. 更改系统语言C#
- 22. 为arm架构编写操作系统
- 23. 用UEFI编写操作系统
- 24. 编写定制的Android操作系统
- 25. 关于编写操作系统
- 26. 如何用C语言重写一个函数(系统调用)?
- 27. 用于新操作系统的C语言编译器(理论问题)?
- 28. 我可以使用c编程语言创建我自己的操作系统
- 29. linux如何成为一个内核和一个操作系统
- 30. 如何在我的操作系统内核中启用IRQ8?
您的计算机*始终*运行机器代码,而不是程序集或C.所有(本机)编程语言都被编译为机器代码。 – tenfour
你忘记了交叉编译。不仅仅用于嵌入式系统,还用于引导操作系统。 –