网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月14日
漏签
0
天
鸿蒙吧
关注:
35,550
贴子:
194,655
看贴
图片
吧主推荐
游戏
13
回复贴,共
1
页
<<返回鸿蒙吧
>0< 加载中...
现对操作系统开发中的技术做一定介绍
取消只看楼主
收藏
回复
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
首先,你需要设想一下,你要开发一个操作系统,先不论它运行在x86还是arm上,也不论这个操作系统使用何种内核组织形式,总之,你要做一个操作系统。
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
一个操作系统要干些什么?它要为应用程序提供运行环境与和硬件的通信
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
单论运行环境,操作系统提供了一套API来实现这一点,不过一般的程序不直接依赖于系统API,而且通过库如libc和libc++间接的调用系统API
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
既然如此,那么我只要让依赖库可以认识我的操作系统的API,这个程序就可以在我的系统上运行了
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
那么,作为一个新兴的操作系统,我会选择什么API标准呢?显然的,自己弄一套API命名标准是可行的,但为了让那些为别的平台开发的程序可以不经大改就在我的系统上运行,我需要完整支持一套libcibc++,.Net Framework,MFC, Open MP,Open GL, DirectX,Unity等库,这是一个巨大的工程
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
为了让系统快速成型,我会选择一套已有的API标准,并实现它。如果让我选,我一定选择POSIX API。因为有足够多的库支持这一套标准,这意味着我不需要重写那些库就可以让编译器为我的系统生成代码。其次,对POSIX API的完整支持使得原有程序具有了跨平台能力,例如Linux应用可以直接在我的系统上运行了(只要我给出了同名的链接库如libc++.so)
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
同时,部分支持POSIX API标准的其他平台应用也可以在我的系统上运行,如Windows上的多支持一个ucrt.dll即可。这样,我可以凭空拥有一套软件生态,移植软件成了一件较容易达成的事。
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
现在,我来做鸿蒙系统。这是一个新的系统,没有自己的生态。按照上述论断,选择一套自己的API是可行的,事实上鸿蒙也这么做了。但一套自己的事不够的,还需要原生支持其他API。这里鸿蒙选择了Android API。这样,有了原生支持,程序就可以通过动态链接技术跨平台运行。
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
同时,遵循快速开发原则,我们不应该造轮子。而现有的Linux内核是极好的底层操作系统。它有一套几乎通用的POSIX API和完整的文档。因此,我自己的API封装Linux API是合适的。此所谓“套壳”。不过话说回来,Win32 API也不过是对WinNt API和WinZw API的再封装,不过是自己人套自己人罢了。WinNt API和WinZw API还是对BIOS中断的封装呢
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
由此可见,鸿蒙在编译时依赖一下Android API是一件不令人意外的事。毕竟你需要API的声明文件吧,你需要把dllimport改成dllexport吧,你需要规定链接标准吧。这不都需要头文件,也就是Android API声明所在的文件吗。不过这个"Android API"的底层是鸿蒙的,不过是具有一个相同的名字,相同的链接方式,相同的动态库名称罢了
还是为了原生支持。
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
原生支持是系统API层面的,是直接以动态库的形式将其他系统API呈现出来,以便对应程序调用的形式。这让对应程序可以直接在该操作系统上运行,而不用虚拟机。
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
虚拟机对性能的影响相当大,就比如Java,依赖于jvm运行,速度可以说也就比Python快点。不过人家能通过虚拟机跨平台啊。同样的,.Net Framework也能跨平台,不过用了另一种技术,即在不同操作系统上提供同一套.Net的API,一样可以一处编译,处处运行,速度嘛,比Java快了不少,但还是比调用原生API的c++慢。c++就是这个问题,每换一个系统都要修改并重新编译,因为API变了。
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
现在一套统一的API解决了问题。它不香吗
c++不但快,而且标准库里的bug少,双倍快乐
WXYHYXY
活跃吧友
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
综上所述,不必为鸿蒙里有Android API而感到奇怪,也不用说什么套壳,看一遍调用堆栈懂得都懂,不会gdbserver串口调试就算了
也不用再有人跳出来说Java不慢了。真不慢你给我写个游戏看看,反正Java也有OpenGL
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示