计算机的运作流程的个人感想

以下纯粹是个人的猜想,大部分纯属胡扯。
 

1,计算机从硬件开始,通电之后加载计算机操作系统,操作系统开始控制计算机的硬件,显示器,键盘,提供画面与操作给人。

2,计算机操作系统功能上应该都是大同小异的,比如unity引擎用C#写一段操作内存与线程的代码可以打包发布到window,Android,ios上,就说明这3种操作系统都提供内存操作与线程操作,且都可以内存泄漏,线程死锁。

3,计算机语言,对于计算机语言,比如Python,首先需要一个编辑器或者是IDE,然后操作系统会运行.py的文件,这时需要Python的运行环境,这个运行环境应该就是居于操作系统写出来的一个解释器,将.py文件解释成计算机可以识别的2进制代码。而Python的库就是居于操作系统提供的API编写的。而.Net则是为多个语言提供运行环境以及库,用于语言之间的交流以及语言调用操作系统函数,已到达控制计算机硬件的目的。

学习一门语言应该是学习语言的运行环境即:语言的规则与库,比如C#,C#里的int是一个结构体,委托是一种类型,而库则是使用这套规则编写的一些类,这些类有使用系统API的,也有纯粹使用语言规则编写的。

4,unity引擎,使用windows操作系统的文本编辑器,调用windows操作系统的API,以及编译器,就可以创造出一款名字叫做unity的引擎,双击即可打开unity引擎,unity引擎下可以创建文本,创建一个以.cs结尾的文本,使用unity自带的IDE即Mono,或者使用文本编辑器,打开这个.cs的文件,写入操作内存与线程的代码,然后使用unity打包成windows下的软件或者Android下的apk,在这个过程里,unity调用了自己的库,调用了.net的库,然后通过编译器,创造了不同操作系统下的软件,其中unity的库与.net的库都是居于操作系统的API编写的,以到达操作硬件的效果。

问题来了,假如.net的库是居于windows操作系统的API写出来的,那为什么可以在Android操作系统下操作Android的硬件呢?C#调用.net的库,然后编译成IL中间代码,在编译时,因为选择的是Android平台(提供android sdk),所以将IL编译成Android平台可以识别代码,因为居于Android系统实现了.net的库,也就是.net的库移植到了Android平台。如果想要打包成ios的app,这需要在mac操作系统下,因为ios操作系统并没有提供系统调用的模块。

unity打exe,apk,app,ps3等。
unity打任何一个平台下的包都需要提前准备好相应的模块,比如apk包需要android sdk与jdk,android sdk :相当于安卓机器的操作系统,提供系统调用。jdk:就是java开发工具包,这个包中提供了java语言的类库,安卓应用又需要用到java语言,java语言又需要底层的java类库,这些类库就被封装在jdk中。

unity通过Mono实现了自己跨平台的能力,将unity勾选为android平台或者其他平台时,在Mono中运行的应该是CIL,而在本地(windows,Android,ios)运行的是被编译后生成的原生指令。

unity在windows和mac上都存在,但是mac上的unity与windows上的unity是不同的软件,因为操作系统不一样,但是操作系统提供的API大同小异。

关于C#:C#是跨平台跨语言的,猜想.net内部应该提供多种不同语言的编译器或者是解释器,然后由某个框架控制,当一种语言里出现另一种语言的嵌套代码时,就调用相应语言的编译器或者解释器,因为都统一生成中间语言代码。跨平台应该也是一样,猜想.net内部应该存在多种语言在多个不同平台操作系统都实现了同一套不同语言对应得库,所以某种语言(如C#)才能跨语言跨平台。

5,软件是如何操作硬件的。计算机的硬件上使用机器雕刻了一些公式,这些公式是固定不变的,当电流走过去时,公式开始起作用,比如GPU上雕刻了一些矩阵运算的公式,比如主板上雕刻了通电后需要做些什么的公式。点击计算机开关按钮,计算机通电,电流走到主板,主板上的公式开始生效,按下f12你就可以进入操作界面,比如安装操作系统。接上U盘,U盘上的程序开始加载到计算机的内存中,开始控制计算机所有的硬件,U盘上的程序提供安装操作系统的功能,将操作系统装上。重新启动计算机,计算机通电,电流走到了主板,主板上的公式开始去硬盘的分区依次去找操作系统的标记,找到后将操作系统的内核加载到计算机的内存中,然后操作系统开始控制整个计算机的硬件。

总结就是:
语言需要编辑器编写,需要编译器编译,需要库函数提供便捷的操作来操作硬件,而库又来自于操作系统的API,而操作系统又大同小异,所以一个库如果同时支持不同的操作系统,即一个库在不同的操作系统都有实现相同的内容,那这个库就是跨平台的,这个库支持的语言就是跨平台的语言,这个语言创建的软件就可以很方便的在不同平台运行,这里面可能会有小的差异,因为操作系统毕竟还是不同的。

 

参考以下内容:
1,https://bbs.csdn.net/topics/391991089?page=1 C#.net真的可以开发安卓应用程序吗?
可以开发,而且编译结果是原生的手机安卓和苹果程序,并不是通过虚拟层来模拟的。

2,你去查一查Mono,是将.net framework移植到linux,iOS,Unix等平台下的一个开源项目,现在它早就已经成功移植到安卓上,而Mono平台下可以使用C#开发,当然也就意味着C#可以再安卓上开发程序了!

3,https://zhidao.baidu.com/question/1178974132899706539.html c#真的可以跨平台吗
从理论上说,C#是完全可以跨平台的。因为c#是借助.Net平台运行的,c#代码会被编译生成为MSIL,即微软中间语言,类似于Java的字节码,.Net是根据MSIL来执行的,而不是像C语言那样直接生成本地代码。C语言之所以无法跨平台,是因为进行与系统有关的操作的时候需要调用系统提供的函数,并编译成为本地代码,就是执行时可以直接运行的代码。所以按理来说,只需要提供能够运行在不同操作系统中的.Net平台,就可以实现跨平台运行。可是,微软在.Net跨平台方面做得并不好,导致C#的跨平台性并不好。希望能帮到你。
所谓的跨平台不单是说象JAVA这类一次编译到处运行,只要一套代码通过编辑可跨平台运行就算。win32这些才是真正的不跨平台

4,C#是一个程序设计语言,是运行在.net CLR上的,用于创建应用程序的高级语言。

5,https://www.cnblogs.com/0kk470/p/7468054.html Unity跨平台的机制原理

6,http://www.360doc.com/content/17/0701/16/5109282_667999950.shtml# 软件是怎样控制硬件的?看评论

7,https://blog.csdn.net/qq_15267341/article/details/51791304 SDK和JDK区别

猜你喜欢

转载自blog.csdn.net/tran119/article/details/81571190