当前位置:   article > 正文

“鸿蒙”操作系统关键特性解读

鸿蒙操作系统关键特性解读

1、计算机为什么需要操作系统?

大部分人认为,操作系统本来就是与计算机(IT设备)一体的。究竟计算机为什么需要操作系统?可能我们并不会去特意想这个问题。

其实,对于IT产品而言,操作系统的角色,就像我们人类身体中,大脑的角色一样。我们每天面对大量的或大或小、或简单或复杂、或紧迫或宽松的事情。大脑如何处理这些事情的处理的先后顺序和逻辑关系。

来源:计算机教程

我们先了解一下,操作系统为什么是计算机 (IT设备)一个核心必备软件系统?

为了了解操作系统的必要性,我们先看几个简单的场景案例。

1)计算机(任何IT产品)其实就是一个利用IT资源(计算资源、存储资源、网络资源)对各种数据进行处理的设备。而在计算机处理数据的时候,会遇到IT资源如何分配的问题。比如,如果同时有几个应用程序发出运行请求,各个程序之间运行的先后逻辑是什么?哪个程序优先运行,哪个程序后运行?每个程序又该分配多少计算资源?这些都是需要解决的问题。如果没有操作系统,多个程序同时运行,就会出现各个应用程序相互挤占计算资源,最终都无法运行的情况。

2)在同一个计算机(IT设备)中,其运行着各种各样的应用程序。而在应用程序开发的时候,开发者关注的是自己的应用程序是基于什么操作系统开发的(这也是应用程序与操作系统之间的耦合关系),而不会去关注自己的程序是否会受到其他应用程序的影响。对于操作系统来说,就需要解决不同应用程序之间是否会相互干扰的问题。

3)计算机(IT设备)是由硬件和软件组成。操作系统和在其之上运行的应用程序都是软件。由于硬件种类很多,同一硬件产品也都有不同的生产设计产商。对于这样的一个看似非标准化的硬件环境,如何能让应用程序都能适应这些硬件环境,不会出现某个应用程序只能在某一个硬件环境下运行,换一个硬件环境就无法运行的情况。

解决以上问题的核心途径,就是采用操作系统。

1)操作系统,可以对应用程序进行计算资源分配、运行管理、调用权限审核等。目的就是让各种应用程序都能够有序、快速地运行计算机资源分配包括:CPU的运算资源,内存条的主存容量,硬盘的读写流量,网卡的网络传输流量,主线的内部数据流量等。

2)操作系统,可以将不同硬件造成的运行环境的差异进行标准化。无论什么样的底层硬件,上层应用程序运行的环境都是一样的。这就极大便利了应用程序开发者,可以将精力主要用在优化自身产品方面,而不用担心底层的计算环境。

3)操作系统,可以进行多任务管理,控制程序并发运行。操作系统可以针对几个应用程序提出的并发运行请求,进行合理处理,安排优先级。合理有序对其进行计算、存储、网络等各种IT资源的分配。

来源:计算机教程

2、鸿蒙OS解读

对于鸿蒙OS,大家印象比较深刻的是几个关键词:全场景、分布式、微内核、跨终端。这些都是鸿蒙OS相比传统其他OS不同的地方,当然也是鸿蒙OS的卖点所在。

而华为对鸿蒙OS介绍中,花了大量篇幅来介绍鸿蒙OS的四大技术特性。说实话,这四大技术特性,对于非专业IT人士而言,可能大致能明白其表达的核心意思,但对于其背后的体现的IT内涵和程序模块间的逻辑关系,可能并不一定有多理解。而这些也正是鸿蒙OS相比其他操作系统的不同或者说优势所在。

为了更好地理解鸿蒙OS,我们将围绕华为对鸿蒙OS四大技术特性的官方描述展开,来进一步理解其背后的IT逻辑关系和含义。

鸿蒙OS,具备四大技术特性:

鸿蒙OS技术特性一:分布式架构首次用于终端OS,实现跨终端无缝协同体验

这里有个关键词,就是“分布式架构”,什么是操作系统的分布式架构?

华为在介绍这一部分内容时,特别提到了两个专业术语“分布式OS架构”和“分布式软总线技术”。对于以上这种“分布式”的作用,华为的描述是通过公共通信平台,分布式数据管理,分布式能力调度和虚拟外设四大能力,将相应分布式应用的底层技术实现难度对应用开发者屏蔽,使开发者能够聚焦自身业务逻辑,像开发同一终端一样开发跨终端分布式应用,也使最终消费者享受到强大的跨终端业务协同能力为各使用场景带来的无缝体验。”

那我们先了解下,操作系统的分布式架构是怎样的架构?

分布式操作系统架构,是相对于集中式操作系统架构而言的。根据以上,我们知道,操作系统分别经历了从CP/M系统、DOC系统、集中式操作系统,到现在的分布式操作系统。

分布式架构操作系统,能够对计算机的资源进行动态分配,并有效控制和协调操作系统中各任务的并行执行。分布式架构的操作系统,除了具备传统操作系统功能之外,还提供分布式进程通信、分布式文件系统、分布式进程迁移、分布式进程同步和分布式进程死锁等功能。

分布式操作系统的特点是:分布性和稳定性。分布式操作系统中的微内核和其他应用程序,可以以多副本的方式运行,一旦系统中某一个部分发生故障,该分布式操作系统仍能够正常运行,保障了系统的稳定性。

另外,分布式操作系统一般采用微内核及核外辅以若干实用程序的结构而此次鸿蒙OS特别提到,其利用的是微内核

微内核是一种具有有限功能的较小的操作系统内核。我们可以将其理解为是一个功能缩小版的内核。微内核主要负责原来内核中几个基础的功能,包括中断、通信、调度等,其他的系统功能分配给微内核外的使用程度来执行。在分布式操作系统中,一台计算机对应配置一个微内核我,分布式系统之上运行的实用程序可以不同。这样可以使得,整个架构更加灵活,节省系统资源,保证系统的稳定性。

同时,分布式操作系统,对应用程序开发者,将相应分布式应用的底层技术实现难度进行屏蔽,使开发者能够聚焦自身业务逻辑,像开发同一终端一样开发跨终端分布式应用。 以上是我们对“分布式架构OS”的理解。

来源:计算机教程

另外一个就是“分布式软总线技术”

要了解分布式软件总线技术,我们需要一层一层的剥开。要知道分布式软件总线,需要了解软件总线,进而需要了解软插件,进而需要了解软件复用的概念。

软件复用,是利用现有的软件成分(资源)来构造新的软件系统。该软件成分可以是已有的软件,也可以是专门开发的可以复用的软件构件。

软件复用技术分为组装技术和生产技术。

组装技术,是对已有的软件构件不做修改或者少做修改,直接将其插装在一起,来构造出一个新的软件系统。

生成技术,是利用程序编译器来完成对软件结构模式的复用。例如V c++等。

软插件模型,软插件技术从本质来讲是一种软件集成技术。对于一个新的软件系统,其中有大部分的工作量是用在重复编写已有软件部分。软插件是一种具有一组外接插头。如果构造一个软件系统的软插件都已存在,那开发者只需要对整个系统的构造策略和原则进行制定即可,从而提升软件生产效率。软件插件的特征包括:模块化好、独立性强、高可靠性、链接简单、封装功能等。

软件总线,解决的是软插件的交互问题以支持软件工厂总装期间和运行阶段的高级通信问题。并解决软件系统内部各个软插件的互操作问题。

分布式软件总线在分布式操作系统下,大量易购网络以及各个厂商推出的软硬件产品,带来分布式系统各个层次都存在互操作问题。如果将软件总线与操作系统、网络通信机制结合起来,就能够比较好的处理分布式系统的互操作问题

华为给出的关于分布式软总线的关键指标,这将有利于我们对其的理解。主要包括:1)低时延:端到端时延小于20毫秒。2)高吞吐:有效图吞吐高达1.2Gbps。3)高可靠:抗丢包率高达25%。

来源:计算机教程

鸿蒙OS技术特性二:确定时延引擎和高性能IPC技术,实现系统天生流畅

华为对改性能的解释为:鸿蒙 OS通过使用确定时延引擎和高性能IPC两大技术解决现有系统性能不足的问题。确定时延引擎,可在任务执行前,分配系统中任务执行优先级及时限进行调度处理,优先级高的任务资源将优先保障调度,应用响应时延降低25.7%。鸿蒙微内核结构小巧的特性使IPC(进程间通信)性能大大提高,进程通信效率较现有系统提升5倍。

高性能IPC。IPC指的是进程间通信,Inter process communication。IPC是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。

为什么需要进程间通信?

在计算机实际运行过程中,可能会出现一个系统中好几个进程同时在进行的情况。这时,不同进程之间需要相互协作、相互沟通,以便更好的完成工作。而由于不同进程之间的相互独立性,进程间的沟通就变得比较困难。因此,就产生了不同进程间的通信方式,来解决不同进程之间的通信问题。

因此,基于以上的解释,我们可以理解进程间通信的目的:

1)数据传输:一个进程需要将它的数据发送给另一个进程。

2)资源共享:多个进程间共享同样的资源。

3)通知事件:一个进程需要向另一个或一组进程发消息,通知它们发生了某种事件(如进程终止时要通知父进程)。

4)进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

而对于华为鸿蒙OS而言,其进程间通信(IPC)性能大幅提升,我们可以理解为不同进程之间的对话和沟通效率大幅提升。

鸿蒙OS技术特性三:基于微内核架构,重塑终端设备可信安全

华为对该功能的描述为“鸿蒙OS采用全新的微内核设计,拥有更强的安全特性和低时延等特点。微内核设计的基本思想是简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护。微内核只提供最基础的服务,比如多进程调度和多进程通信等。

这其中的一个关键词是:微内核。这也是鸿蒙OS的关键特性之一。

在上面,我们提到了分布式操作系统与微内核的关系。一般分布式操作系统通过微内核的方式来实现。

在理解微内核之前,我们先理解下,什么是内核?

操作系统中的“内核”,内核是操作系统的核心部分,它管理着系统的各种资源,我们可以把他比作连接应用程序和硬件的一座桥梁,是直接运行在硬件上的最基础的软件实体。

微内核的概念,是由Richard Rashid在卡内基梅隆(Carnegie-Mellon)大学开发Mach操作系统时提出的,目标是建立一个基于消息传送(message passing)机制的最小内核,以便在此基础上建造对其它操作系统的模拟层来模拟其它操作系统的特性。

微内核(Microkernel)是一种内核的设计架构,由一组尽可能将数量最小化的软件程序组成,它们负责提供、实现一个操作系统所需要的各种机制与功能。这些最基础的机制,包括了底层地址空间管理,线程管理,与行程间通信(IPC)。

内核的设计理念,是将系统服务的实现,与系统的基本操作规则区分开来。它实现的方式,是将核心功能模块化,划分成几个独立的行程,各自运行,这些行程被称为服务(service)。所有的服务行程,都运行在不同的地址空间。只有需要绝对特权的行程,才能在具特权的运行模式下运行,其余的行程则在用户空间运行。

微内核提供一组“最基本”的服务,如进程调度、进程间通信、存储管理、处理I/O设备。其他服务,如文件管理、网络支持等通过接口连到微内核。而在传统的内核情况下,内核集成了大量的基础服务和其他服务,这样,内核显得就更加的笨重。

微内核的功能:微内核设计带来了良好的兼容性、扩充性、灵活性、移植性、可靠性和网络支持。

但是,微内核设计有一个重要缺点:由于微内核操作系统使用进程来隔离系统组件,这些组件之间的通信使用了消息传递方式来实现一个组件对另一个组件的调用-这实际上是进行了一次RPC(例如在NT上是LPC)调用。但这种类似RPC的方式是通过进程间通信(IPC)机制实现的,其性能一般低于传统操作系统的系统调用的性能。由于微内核操作系统的类似RPC调用是通过消息传送机制实现的,而传统操作系统的系统调用一般是通过类似trap的方法实现。相比于trap方法,通过消息传送机制实现的这种类RPC调用的方式较慢。

鸿蒙OS技术特性四:通过统一IDE支撑一次开发,多端部署,实现跨终端生态共享

华为对此性能的官方描述为“鸿蒙OS凭借多终端开发IDE,多语言统一编译,分布式架构Kit提供屏幕布局控件以及交互的自动适配,支持控件拖拽,面向预览的可视化编程,从而使开发者可以基于同一工程高效构建多端自动运行App,实现真正的一次开发,多端部署,在跨设备之间实现共享生态。华为方舟编译器是首个取代Android虚拟机模式的静态编译器,可供开发者在开发环境中一次性将高级语言编译为机器码。此外,方舟编译器未来将支持多语言统一编译,可大幅提高开发效率。”

下面我们逐句来进行解读

1)IDE,Integrated Development Environment ,即集成开发环境。IDE是一种编程软件,是集成了程序员语言开发中会需要的一些基本工具、基本环境和其他辅助功能的应用软件。IDE一般包含三个主要组件:源代码编辑器(Editor)、编译器、解释器(Compiler、Interpreter)和调试器(Debugger)集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套件。

开发人员可以通过图形用户界面访问这些组件,并且实现整个代码编译、调试和执行的过程。现在的IDE也提供其他帮助程序员提供开发效率的一些高级辅助功能,比如代码高亮,代码补全和提示,语法错误提示,函数追踪,断点调试等。

现在有大量的免费开源的和商用的IDE,包括:

1、微软 Visual Studio(VS)VS支持创建各种类型的程序,包括从桌面应用、Web应用、移动APP、到视频游戏。对于初学者到高级专业开发人员来说都是最棒的开发工具。VS有可定制仪表板和可停靠的窗口。它支持多大36种不同的编程语言,如:ASP.NET、DHTML、JavaScript、Jscript、Visual Basic、Visual C#、Visual C ++、Visual F#,XAML等。

2、NetBeans:是一个免费开源的Java集成的开发环境软件,主要用于Java开发。适合从零开始或者对已有工程进行开发。NetBeans支持多种编译器,如CLang/LLVM、Cygwin(GNU)、MinGW和Oracle Solaris Studio等。

3、PyCharm:是著名编程语言Python的IDE,由知名的IDE开发商JetBrains出品。除了Python之外,PyCharm还支持其他Web开发语言:JavaScript、Node.js、CoffeeScript、TypeScript、Dart、CSS、HTML等。

除此之外,典型的IDE还包括:IntelliJ IDEA,Eclipse,Code:: Blocks,Aptana Studio 3,CodeLite等。

2)多语言统一编译

不同的集成开发环境IDE,支持不同的开发语言。比如,上面提到的微软Visual Studio 支持的编程语言包括:ASP.NET、DHTML、JavaScript、Jscript、Visual Basic、Visual C#、Visual C ++、Visual F#,XAML等。

而鸿蒙OS 可以支持多语言统一编译,而这很大程度上是依赖于华为开发的方舟编译器。上面,我们提到,编译器是计算机(IT设备)系统软件中一个基础和核心软件。方舟编译器与鸿蒙OS结合,应用程序开发者可以利用方舟编译器来进行多语言同一编译。这在一定程度上能够显著提升开发展的开发效率。

3)分布式架构Kit。Kit在IT行业指的软件工具包。我们认为,这里的分布式架构的工具包,是与鸿蒙OS的分布式架构自成一体的。分布式架构的思想体现在整个鸿蒙OS的各个组件当中。其能够带来分分布式架构OS的所带来的便利和功能。

而以上鸿蒙OS的这一性能的核心意思是:通过华为提供的集成开发环境,和支持多语言统一编译的方舟编译器,应用程序开发人员,可以大幅提高软件开发效率,包括缩短应用程序开发周期、语言模块调用、应用程序的自动调优等。而且,通过华为提供的开发环境和编译器开发的应用程序,可以适应于多种不同类型的终端,包括手机、PC、汽车以及其他各种智能终端。

鸿蒙OS之所以要要想尽一切办法,来给软件开发人员带来便利和效率,核心还是打造基于鸿蒙OS的IT生态。因为最终这些应用软件都要在鸿蒙OS上来运行。

3、方舟编译器

通过以上,我们看到鸿蒙OS之所以能够为软件开发者提供支持多语言统一编译的极大便利,核心还是基于方舟编译器的应用。

首先,我们解释一下,什么是编译器?

编译器,是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。

之所以需要编译器,只因为计算机是一个二级制单位,是通过0和1的组合来实现不同的操作。而人类的编程语言,从较早的汇编语言,到C、C++,再到我们现在看到的Java语言等。

说的简单通俗点:编译器就是想一个翻译官一样,将人类的逻辑语言,翻译为机器可识别可理解可执行的机器语言。翻译的快慢可以影响沟通交流的效率,同样,编译器的效率也就影响了程序运行的效率。

关于方舟编译器的发展历程

2019年4月,在华为P30系列国内发布会上,华为首次发布了方舟编译器。方舟编译器是基于GCC开发的交叉编译器套件,它包括了C、C++、Fortran的前端,也包括了这些语言的库(如libstdc++、libgcc等)。

方舟编译器,是对传统Android操作系统编译器的改进和突破。

1)方舟编译器,可以实现多语言联合优化编译,大幅提升运行效率

我们知道,在Android操作系统中,使用的语言是Java语言。而Android操作系统之上运行的各种各样的应用程序,其开发语言既有Java语言,也有C和C++。这就使得操作系统的Java语言与应用程序的各种语言进行交互。这种交互的接口就是JNI(Java Native Interface)。在数据访问、函数调用、生命周期维护、异常处理时,需要这两种语言交互,进行相互调用而在相互调用过程中,会占用一定的系统资源。使得系统之上的应用程序运行效率降低。

方舟编译器,是业界首个多语言联合优化的编译器,开发者在开发环境中可以一次性将多语言统一编译为一套机器码,运行时无需产生跨语言带来的额外消耗,并可以进行跨语言的联合优化。

2)方舟编译器直接编译出机器指令,无需繁琐的虚拟机运行

在Android系统中,程序的运行,需要借助ART虚拟机来执行,编译器是把源程序的每一条语句都编译成机器语言并保存成二进制文件,解释器在执行程序时,一条一条地解释成机器语言来让计算机执行。而在这个动态编译和解释过程中,消耗了大量的系统资源。

方舟编译器,可以在开发环境中,就可以完成全部代码的编译。所以在手机运营环境中,应用程序并不需要将进行语言的编译和解释,可以直接读取运行,提升运行效率。

3)方舟编译器提供高效的内存回收机制

早期C、C++需要开发人员自己管理程序,对系统内存的实用和释放,影响开发效率。Java的虚拟机模式提供了内存GC(垃圾回收)机制,但需要短暂中断应用,成为随机卡顿的根因之一。

方舟编译器,可以对内存进行随时回收,而是回收时,并不需要暂停应用,保证了系统和应用程序运行的流畅性和高效性。

全 文 总 结

1、鸿蒙OS,只是冰山一角

我们认为,鸿蒙OS只是华为建立自身IT生态体系的冰山一角。我们在之前的文章中分析了华为产品发展的逻辑。从IT产品形态角度来讲,华为经历了从早期的硬件产品向软件产品的演进。而在软件领域的不断突破,逐步奠定了华为在IT产业的核心地位。特别是在基础软件领域,华为的默默进取,在基础软件核心环节不断取得新的成就。

目前我们看到的是鸿蒙OS和方舟编译器,都只是华为自身IT生态底层软件的一小部分在芯片、数据库等领域,华为同样取得了一些突破性进展。我们知道,如果在一套新的IT生态中,让基础软件都能充分发挥其最高性能,需要各个基础软件不断适配和完善,最终达到完美耦合。这也是我们在PC时代看到的Wintel以及移动时代看到Android+ARM坚不可破的原因。因此,我们可以想象,华为自身开发的这些基础软件,从一开始就是高度耦合的

2、技术变革,带来产业格局变化

每一次的重大技术变革都会预示着产业格局的演变,甚至对产业链进行重构,促进主流企业的重新洗牌。目前,我们看到华为已经在多个IT领域进行了产业格局的重构,从早期的路由器,到现在手机、存储等市场。而以上我们看到的只是硬件部分。其实,更重要的是随着5G逐步商用,华为正逐步在最为艰难的核心底层基础软件部分,来对市场格局进行重构。目前,我们已经看到华为在5G通信领域占据了全球产业链的话语主导权。未来,我们有望看到在芯片、操作系统、数据库等领域的不断崛起。

3、硬件企业,软件化

硬件企业逐步向软件方向延伸,在IT领域我们经常看到这样的例子。这也是硬件企业发展到一定阶段的必然选择。而在这个演化方向上,往往只有行业的领导者才有可能取得一定成功。至于从硬件到软件转化的原因,我们的理解:

1)硬件发展到一定阶段,技术和架构逐步成熟,不同企业的硬件产品逐步趋同对于IT产品而言,只有差异化(有价值的差异化)才能获取高额利润。趋同带来的利润降低迫使行业领导者不断加快新技术的应用,即通过软件来增加硬件的功能或者提升硬件的性能。即硬件发展到一定阶段,可能决定硬件竞争力的倒不是硬件本身,而是软件。

2)从技术角度来看,硬件产品的迭代速度较慢,迭代慢带来的结果是,客户采购新产品的动力和需求降低。通过软件的应用来加快硬件产品的迭代速度,缩短客户的采购周期

3)在原来IT产业分工下,硬件和软件可以由不同的公司来提供,彼此发挥相对比较优势。但在现有的IT阶段下,硬件和软件的适配要求明显提高;在某些领域,硬件与软件只有做到相互定制、相互融合,其整体性能才能得到最大化释放。

1、操作系统与芯片的耦合度

鸿蒙OS的目标无疑是下一代5G通信技术下的核心操作系统。从IT底层软件发展规律来看,操作系统作用的发挥,需要与芯片进行长期、不断、反复的适配、修改和完善,以达到最大限度的相互耦合。这样才能最大发挥操作系统和芯片双方的功能。比如,PC时代的Windows操作系统与Intel芯片经历了几十年的适配,移动互联网时代的Android操作系统与ARM芯片也达到了高度耦合。对于鸿蒙OS操作系统,如果未来在5G时代发挥作用,需要不断与底层的芯片进行适配耦合。如果是华为自身开发的芯片,耦合度会非常高。如果是其他厂商的芯片,双方需要一段时间的适配过程

2、鸿蒙OS的微内核

微内核本身不是新鲜事物,相比安卓系统,华为鸿蒙OS将各种硬件驱动拿到核外进行处理,这在一定程度上带来了架构的灵活性。但凡事都是有利有弊,灵活性和扩展性增加的同时,对核内与核外之间的通信要求更高。未来鸿蒙OS在对全场景跨终端的适用方面,可能也需要与硬件厂商的产品不断进行适配。

3、鸿蒙OS全场景的适配,也需要不断迭代过程

鸿蒙OS的目标适用主题是全场景的IOT领域。客观来讲,这个适配的场景确实挺大的。从目前我们看到的历史操作系统来看,能够广泛适用这么多样化智能终端的的操作系统并不多。比如,PC、手机和汽车中适用的操作系统都是不一样的。鸿蒙OS要达到在每一个应用场景都能高效运行,需要其不断的根据不用应用场景对计算需求的特点,而不断改进和完善自身架构和性能。这是IT产品长期迭代的过程。

4、开放、开源,而不要打造封闭系统

核心底层基础软件的开发和应用,一方面是开发难度较大,更重要的是能否建立起以该基础软件为核心的一套完整的产业链,形成正向循环的产业生态体系。在全球IT发展历史上,我们既看到过封闭生态体系,比如苹果的产品;也看到开放生态体系,比如谷歌、微软的产品等。而对于未来的IT产业发展而言,只有不断开放,更加开放,才能与生态伙伴一起成长。

而从PC历史发展来看,目前还没有看到通过封闭系统,来持续获得不断扩大的业务规模的。对于华为而言,目前正在逐步建立自己的核心底层生态体现,从芯片、算法到操作系统、数据库,更不用说早期发展起来的服务器、存储和网络设备。而对于未来5G产业,只有不断开放、开源,才能获得人生的“开挂”。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/249604
推荐阅读
  

闽ICP备14008679号