软件开发整体认知 & Android系统结构简述

前言:世间一切总是你中有我,我中有你,纠结在一起。对于全能的上帝,绝对是不放过任何一个细节,统筹地进行最高效和准确的思考。但对于我们凡人,我们脑容量有限,精力有限,注意力有限,才智有限,乃至人生也有限,只能将知识切割成很多方面,一生只重点研究几个领域,每次只重点关注一个方面,每个问题只关注主要矛盾。我们把知识分割成很多个学科,但是无论怎么分割,它们都必然你中有我,我中有你,互相依赖和关联。而一切事物的底层根本原理总是特别简单,复杂性是千百层简易的东西、无数细节累积交织在一起形成的!

#1.软件开发整体结构认知:

包括计算机在内的所有电子器件,都是帮人类解决问题的工具,软件是辅助这些工具工作的。软件硬件本是一体,在使用者眼中都是工具。软件逻辑一层层向底层产生作用,最终总归要借助硬件来与“外界”实际物理世界中的事物进行交互,发挥它的作用。

依赖链:

                   ·········更高层逻辑·········

        ——> 更上层软件逻辑结构

        ——> 底层软件逻辑结构 (操作系统)

        ——> 软硬件接口(硬件层面的一些指令集) 

        ——> 硬件设计 

        ——> 物理规律

&&.关于编程语言:

    硬件因为其设计结构,本身只识别0和1组成的二进制编码(二进制语言),它向软件逻辑层提供了一些二进制的指令集合。这些二进制编码在逻辑层面上等价于16进制的汇编编码(汇编语言),而通过对汇编语言进一步封装和设计,人们设计出了高级编程语言(例如C语言)和对应的编译器(把高级语言代码转换为对应的汇编语言代码)。而且不断推陈出新,利用已有工具制造新的工具,某些高级语言的编译器是用另一种高级语言写的(例如:java虚拟机就是用C语言写的)。

&&.关于操作系统:

    操作系统是一种特殊的应用程序,它以“大管家”的身份统筹管理各种硬件资源,充当了 普通应用程序 与 底层硬件之间的桥梁,上层应用程序在编写代码时,不需要考虑怎么直接管理各种硬件资源,只需要将诉求“告诉”操作系统,通过操作系统来间接管理硬件资源,大大降低了上层应用程序编写的难度。同时可由操作系统来统筹全局,协调各个上层程序的运作,提高整体效率。

    操作系统 = 内核(kernel) + 外壳(系统自带的图形交互界面)。其中,真正起到“大管家”作用的是内核,外壳主要是负责与用户的交互,最终还是要调用内核的功能。

依赖和影响链:

                  高级语言编写的程序源代码

        ——> 依赖于    编译器或解释器 (其实可看做特殊的应用程序,只不过其功能是编译或解释源代码而已)

        ——> 依赖于    操作系统  (统筹管理各种硬件资源的“大管家”,软件与硬件沟通的桥梁)

        ——> 依赖于    硬件层面(对于应用程序编写者而言是透明的)

1.其中编译器或解释器也可看做特殊的应用程序,只不过其功能是编译或解释源代码而已,也需要提前安装好。(例如java、python的开发环境。)

2.程序源代码可以用任意方式编写,只要写完了用编译器/解释器 去处理就行。例如可以在记事本里编写完,然后在命令行里通过指令编译;也可以在集成开饭环境里编写,直接用集成开发环境提供的功能编译。集成开发环境,其实也是一种应用程序,只不过其功能就是开发程序而已,跟简单的记事本相比,它通常提供附加的代码结构管理、打包编译、断点测试等额外功能。                                                                            

&&相关知识分支

其实就是大学里教得那些课程:计算机组成结构、操作系统、编译原理、高级程序语言开发等。

(现在回想一下,才感受到大学里安排这些课程都是很有意义、有作用的。它们或者直接在工作中有用,或者是帮助大家深化全局认知。只是当时没深刻明白它们未来的作用所在,而老师们似乎也只会讲自己课程本身内容细节,不太会耐心讲解它们在全局中的关联与作用。)

#2. Android系统结构

&&.整体认知:

        操作系统管理各种硬件资源,是沟通上层应用软件与底层硬件的桥梁,其设计受其使用的硬件平台的影响,所以特点各不相同。Windows、MacOs、Linux最初面向PC机而开发,而IOS、Android最初面向手机而开发。

&&.Android系统是分层设计的,一般分为4层

     

1.(最顶层)应用程序层

    各种APP都位于该层:系统原装的APP、第三方的APP;

2.( 第二层)Application FrameWork层(应用程序框架层)

    该层设计了Android系统的应用程序框架,包含一系列的预设组件、服务类,是使用java代码来编写的,供上层来直接使用或进一步封装使用。该层的很多API是调用native层或更底层的功能来实现的。

    例如:

    1)视图:View相关组件

    2) 活动管理器:ActivityManager

    3) 窗口管理器:WindowManager    

    4) 通知管理器:NotificationManager

    5) 包管理器:PackageManager

    6) 资源管理器:管理并向上层提供非代码资源,如layout布局文件、Drawble图片、String.xml本地字符串。

3.(第三层)系统库和运行时库支持层

        包含C/C++程序库、Dalvik虚拟机(java虚拟机的改造版) 、Java核心类库。

分为两部分:

3.1 C/C++程序库(即通常所指的native层)

    上层的很多功能都是调用这里的C/C++库来实际完成的。

3.2 Android运行时库

    1)android核心库,提供java核心类库的大多数功能

    2)Dalvik虚拟机(可以认为是google为Android特别打造的一款java虚拟机)

        如同java应用程序一样,每个Android应用程序在其自己的进程中运行。每个进程都包括一个Dalvik虚拟机实例,该虚拟机执行.dex文件。.dex文件是java编译器编译后的.class文件,经过SDK的“dx”工具转化成的,它在格式上做了一些优化,更适合在小内存环境中执行。

4.(最底层)Linux内核 

        包含Linux系统的内核,这一层位于硬件和软件栈之间。负责android的一些核心系统服务,如安全性、内存管理、进程管理、网络管理之类的。

猜你喜欢

转载自blog.csdn.net/u013914309/article/details/124781108
今日推荐