从这一个视频开始讲操作系统这个视频的内容可能很多人都讲过,但为了保证整个操作系统科普系列的完整性,这里也简单介绍一下,下面我们就来说一说关于手机操作系统实测?我们一起去了解并探讨一下这个问题吧!

手机操作系统实测(科技简章052-以安卓为例讲一下什么是操作系统)

手机操作系统实测

从这一个视频开始讲操作系统。这个视频的内容可能很多人都讲过,但为了保证整个操作系统科普系列的完整性,这里也简单介绍一下。

首先说一下什么是操作系统,操作系统属于软件,它负责两个事儿:

第一、为用户和应用程序提供硬件资源管理,包括CPU、内存、硬盘、各种输入输出设备等。

这一点落到实际的功能上就是向用户提供人机交互界面,向应用程序提供API。

所谓API,就是联系操作系统和应用程序之间的接口,API的本质就是一堆操作系统提供给应用程序的函数集,这些函数集封装了操作系统能提供的各种功能。

同类型的操作系统,无论底层硬件如何,API基本没有差别。因此,针对特定API编写的程序,在任何硬件上都能运行。就像采用安卓操作系统的手机,无论底层硬件是高通还是联发科,王者荣耀都能跑,因为API是一样的。

但基于安卓操作系统API开发的王者荣耀在苹果手机上就不能直接跑,因为操作系统不同,操作系统提供的API就不同。要想苹果手机用的王者荣耀在安卓机上也能跑,那就要进行王者荣耀的移植工作,也就是重写需要用到API的部分。

操作系统的第二个任务是为应用程序提供执行环境。

第二、为应用程序提供执行环境。

硬件 操作系统=运行环境,这里就有两层意思:

第一,不同的硬件和不同的操作系统构成不同的运行环境。

第二,操作系统和硬件是搭配使用的,进一步地说,不同的CPU类型匹配的是不同的操作系统。

为什么会这样?

大家都知道机器语言是唯一一种CPU能够直接执行的语言,不同种类的CPU使用的机器语言是不同的。这显然是与指令集相关的,关于指令集的内容大家可以往前翻一下相关的视频。

指令是CPU工作的基础,指令集就是CPU中用来计算和控制系统的一套指令的集合,因此,不同的CPU,指令集不同,能够理解和执行的机器语言也不同。比如X86架构的CPU,ARM架构的CPU,MIPS的CPU,它们的指令集和能够执行的机器语言都不同。

我们将机器语言构成的程序称为“本地代码”,将程序员用C语言或者Java等等语言写成的程序称为“源代码”。操作系统在工作的时候,需要用“编译器”或者“解释器”将源代码翻译成本地代码来让CPU运行。关于编译和解释的部分,将在后面的视频中做详细的介绍。

操作系统为程序提供执行环境,这里有两个概念:程序和进程。

所谓程序,就是指完成特定任务的一系列指令集合或者一个可执行文件,包含可运行的一堆CPU指令和相应的数据等信息,它是个死的。

进程,就是执行中的程序,将一个程序加载到内存后就是进程,它是活的,一个程序可以有一个进程,也可以有多个进程。

进程=程序 执行。

进程不仅包含代码段、数据段等信息,还包括运行时需要的资源。

这些进程运行起来需要的资源,比如内存空间、CPU时间片、活动信息和数据等等,就是由操作系统提供的执行环境。

进程是操作系统调度的实体,操作系统通过资源分配进行进程管理。

现在以安卓为例,简单讲一下操作系统。

安卓最底层就是Liunx内核,它提供内存管理、设备管理、文件系统等等。安卓中的虚拟机最终是通过调用Linux内核来执行功能。

内核之上是硬件抽象层HAL,简单来说,它就是把设备接口函数给封装起来,向上提供接口。这样做是将硬件抽象化,隐藏底层硬件的接口细节,为操作系统提供虚拟的硬件平台,使操作系统具有硬件无关性。

通常的Linux操作系统,硬件抽象是放在内核里面的,因为Linux内核本来就是专门要跟硬件打交道的。安卓之所以单独把这一层拿出来,一方面是安卓(谷歌)想实现厂商针对自家的操作系统标准化定义硬件驱动。另一方面就是商业原因,Linux遵循的是GPL开源协议,这意味着所有硬件驱动都应该是开源的,这对于很多硬件厂商来说比较难接受,毕竟驱动中会涉及到一些参数细节对他们来说至关重要。而安卓采用的是Apache协议,在这方面就自由很多。

硬件层抽象层之上是本地框架和Java运行环境层。

本地框架多数是由C/C 实现,所以一般也叫“C库层”,以区别于应用程序框架层。主要有:

系统C库(libc):这是从BSD继承过来的标准C系统函数库。

多媒体库:支持多种常用的音频、视频格式回放和录制,支持多种媒体格式的编和解码格式。

Suface Manager:显示子系统管理器,并且为多个应用程序提供2D和3D图层的无缝融合。

LibWebCore:Web浏览器引擎,支持Android浏览器,以及一个可嵌入式的Web视图。

SGL:2D图形引擎。

3D libraries:3D效果支持。

FreeType:字体显示。

SSL:位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。

SQLite :轻型关系型数据库引擎。

Java运行环境,分为两个部分,一个是Java核心库,一个是虚拟机。

核心库,安卓应用程序是使用Java语言编写的,大部分Java语言的基础功能都由核心库提供,比如基础数据结构、数学、I/O、工具、网络、数据库等等。同时,核心库也包括安卓的一些核心API。

虚拟机,本质上就是一个软件,为Java程序提供执行环境,但虚拟机最终还是通过调用Linux内核来执行功能的。关于虚拟机的部分内容比较多,以后单独细讲。

除此之外,还有个NDK,就是安卓原生库。在安卓上开发应用程序,谷歌提供了两种开发工具包,SDK和NDK。NDK就是让你可以不用java而用C/C 来写代码开发应用。

一般有三种情况才建议使用NDK,一是必须提高性能的情况下,第二是要使用第三方或者要自己用C/C 语言编写库的时候,第三是应用程序不想依赖虚拟机运行的时候。

再往上一层就是应用程序框架层,也称为Java层,因为这层框架层所提供的组件一般都是用java写的。

这一层一方面把各种下层提供的函数封装打包,以Java接口的形式为开发者和应用程序提供API;一方面还包含了不少系统级服务进程的实现。

这一层也是安卓应用开发者最直接打交道的一层。

应用程序框架之上就是各种应用了,安卓在这一层有一些原生应用,比如同步与账户设定、应用程序支持服务、自带的UI、闹钟啥的。

早期国内做操作系统的,将安卓原生应用进行修改、优化,自己再搞几个应用,并且做一套UI打包到一起,称为自家的操作提供,嗯,套壳。

操作系统第一讲就是这样,比较简单,主要是安卓架构很多人写过了,再讲没啥意思。后面的视频把操作系统的每个关键部分拆开来讲,下一个视频讲Linux内核。

,