2011-08-18 146 views
0

这个介绍是否发生在NTLDR阶段,因为它必须引入,我的意思不是用C写的内核?我认为只有“已知之前”编程语言的计算机是在处理器的微码上硬编码的汇编语言。操作系统如何引入C语言来编写内核

+2

您的计算机*始终*运行机器代码,而不是程序集或C.所有(本机)编程语言都被编译为机器代码。 – tenfour

+0

你忘记了交叉编译。不仅仅用于嵌入式系统,还用于引导操作系统。 –

回答

3

第一个操作系统全部用汇编写成。 C语言的创建是因为它的第一个用例是UNIX的创建。编写一个C编译器来处理这些代码,并生成系统可以理解的程序集(编译器是用汇编语言编写的)。效果从那里雪球。我们现在有一个更强大的系统来编写代码,所以我们当然可以用更高层次的方法编写更好的编译器和更好的软件,并让编译器为我们完成工作。

至于的Windows而言,它被称为QDOS的操作系统,这是写在C

的重写

旁注:操作系统仍需要汇编代码,有需要的许多信息与硬件无关件功能(例如,CR2读取x86上的页面错误)。引导加载程序和BIOS(较旧的)是在汇编中编写的,因为它们对于硬件非常特殊,并且需要设置诸如中断和堆栈指针之类的东西。

+0

Windows不是QDOS的重写。 Windows是由Dave Cutler领导的绿色领域发展的NT。没有非NT Windows曾经重写过QDOS。它们最初是在MS DOS之上编写的,后来独立于它。 –

+1

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

+0

@ paulsm4感谢您的支持 –

1

C是一种编译语言,与解释语言相反。 C程序以及C运行时库都被编译成机器代码,因此它们不需要任何类型的运行时环境,例如要加载的解释器或虚拟机来执行。

编译的程序(包括内核)的切入点将调用它的运行时库,并进行执行程序前所需的任何初始化,但是这是所有的机器代码。

+0

几乎所有的程序和所有操作系统(包括Windows内核)都依赖于运行时支持。例如,NT的“Win32”子系统(csrss.exe)由kernel32.dll,user32.dll,gdi32.dll组成。 – paulsm4

+0

我不是指运行时库;这些也是编译好的。我所说的是编译的程序不需要启动解释器或虚拟机来执行。 ntoskrnl将使其运行时库静态链接。 –

+0

@ paulsm4:那些DLL也不是用C编写的。我的意思是,他们所代表的逻辑原本是,但在物理上,对于硬盘上的那些特定文件,这是很久以前编制的。 –