2 gongchangwangqi gongchangwangqi 于 2016.04.24 21:06 提问

操作系统是怎么开发的?

通常,开发各种程序都是在操作系统下开发的。
然而,操作系统又在什么环境开发呢????
在还不存在操作系统这种软件的时候,计算机大神自己编写了操作系统。。。
他们究竟是怎么办到的。
不会是用机器语言编写的吧?????

PS:最早期编程是使用机器语言编写的,硬件能够直接识别。后来出现了汇编,
可是机器又不认识汇编!!!虽说汇编可由汇编器转换为机器码,
那么问题来了,汇编器又是什么鬼???机器怎么有了汇编器功能??
汇编器究竟是怎么开发的?

8个回答

caozhy
caozhy   Ds   Rxr 2016.04.25 00:09

最早的计算机程序甚至都是纸带穿孔的,别说机器语言了。操作系统、编程语言都是从无到有一点一点发展起来的。甚至连计算机本身,也不是一蹴而就的。
在计算机发明以前,其实我们已经有了计算机的原型,比如巴贝奇的差分机,也有了计算机的理论基础,图灵机,甚至还有了程序,ada是第一个给计算机写程序的人。

caozhy
caozhy   Ds   Rxr 2016.04.25 00:13

没有什么科学和发明是拍脑袋想出来的。瓦特以前其实就有了蒸汽机,爱因斯坦以前,物理学家就提出了量子论中的一些理论。牛顿以前就有引力的假说,只是牛顿把它系统化理论化了。
如果想了解科学史和计算机史,推荐google的吴军先生的《浪潮之巅》《文明之光》

zuishikonghuan
zuishikonghuan   2016.04.25 11:10

Windows系统一般是在上一个版本的服务器系统上开发的,比如Windows Vista好像是在Windows 2003上编写、编译。win7应该就是在win2008上编写编译的。
Windows的内核(NT)主要由c和汇编编写
Windows的应用层主要是c++写的,少部分是C#。
Linux内核也差不多,主要由c和汇编编写。
没有操作系统的时候编程,自然就是裸机编程了。
一个操作系统的开发并不是简单的事,操作系统的核心是内核,内核又分宏内核,微内核等,一般认为Linux是宏内核,Windows(NT)是微内核或混合内核。简单说,内核需要给上层应用程序提供接口和运行环境,构建I/O体系,线程调度,权限和安全,网络协议栈等等。
当然,有的操作系统并不需要这么做,比如Android软件栈。Android直接使用Linux内核,他的内核代码并不多,大部分都是应用层代码,换句话说,他并没有实现诸如线程调度,I/O体系等内核代码,而是直接使用了Linux,Android系统的代码几乎都是应用层代码,开发这种操作系统,显然比内核容易的多。

zuishikonghuan
zuishikonghuan   2016.04.25 11:10

Windows系统一般是在上一个版本的服务器系统上开发的,比如Windows Vista好像是在Windows 2003上编写、编译。win7应该就是在win2008上编写编译的。
Windows的内核(NT)主要由c和汇编编写
Windows的应用层主要是c++写的,少部分是C#。
Linux内核也差不多,主要由c和汇编编写。
没有操作系统的时候编程,自然就是裸机编程了。
一个操作系统的开发并不是简单的事,操作系统的核心是内核,内核又分宏内核,微内核等,一般认为Linux是宏内核,Windows(NT)是微内核或混合内核。简单说,内核需要给上层应用程序提供接口和运行环境,构建I/O体系,线程调度,权限和安全,网络协议栈等等。
当然,有的操作系统并不需要这么做,比如Android软件栈。Android直接使用Linux内核,他的内核代码并不多,大部分都是应用层代码,换句话说,他并没有实现诸如线程调度,I/O体系等内核代码,而是直接使用了Linux,Android系统的代码几乎都是应用层代码,开发这种操作系统,显然比内核容易的多。

zuishikonghuan
zuishikonghuan   2016.04.25 11:15

Windows系统一般是在上一个版本的服务器系统上开发的,比如Windows Vista好像是在Windows 2003上编写、编译。win7应该就是在win2008上编写编译的。
Windows的内核(NT)主要由c和汇编编写
Windows的应用层主要是c++写的,少部分是C#。
Linux内核也差不多,主要由c和汇编编写。
没有操作系统的时候编程,自然就是裸机编程了。
一个操作系统的开发并不是简单的事,操作系统的核心是内核,内核又分宏内核,微内核等,一般认为Linux是宏内核,Windows(NT)是微内核或混合内核。简单说,内核需要给上层应用程序提供接口和运行环境,构建I/O体系,线程调度,权限和安全,网络协议栈等等。
当然,有的操作系统并不需要这么做,比如Android软件栈。Android直接使用Linux内核,他的内核代码并不多,大部分都是应用层代码,换句话说,他并没有实现诸如线程调度,I/O体系等内核代码,而是直接使用了Linux,Android系统的代码几乎都是应用层代码,开发这种操作系统,显然比内核容易的多。
汇编可以看做是一个编程语言,至于机器语言,有句话说的好,机器语言是给机器读的,不是给人读的。CPU其实是一种很笨的机器,他只能读懂内存中的机器指令(0和1)用0和1编程显然是很蛋疼的事,于是美国人发明了汇编,用编译器可以将汇编编译成机器语言,这是编程语言进步的表现。有了汇编后,才有了……->C->……

CSDNXIAON
CSDNXIAON   2016.04.24 21:12

国产操作系统开发之旅
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

u010783161
u010783161   2016.04.24 21:49

汇编语言其实就是用些命令来替代0101二进制字符串,汇编语言很底层的语言,机器能识别的,

suwu150
suwu150   2016.04.25 00:00

汇编语言就是机器语言,机器语言属于硬件语言,就比如开发一个处理器,你需要给这个处理器实现哪些功能,加法,减法还是乘法,或者除法,在这4类运算中,又分为整数运算和浮点运算,这些运算都是有专门的接口去实现,而这些借口就是常见的引脚,多个引脚控制一个运算的取数、存数,以及运算,在这里就要用到数电中所学的存储器原理,而对于处理器,也有很多种,有些处理器善于处理图形,有些善于处理运算,这都是在最初设计时确定下来并且由硬件实现的,而我们市面上常用的商务型计算机,属于精简指令系统的计算机,所谓精简指令系统的计算机就是根据人们使用各种预算的频率,保留最高频率的运算,当然还是有复杂指令系统的。

在由硬件实现的各功能中都包含着大量的集成板用来实现各种功能,对于汇编语言,就是一些标记,比如将加法记作 00001,而又将00001记作汇编语言中的“ADD”,只要键盘输入字母“ADD”,就代表加法运算,这就实现了汇编语言的助记符功能,其他类似了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!