一句话结论:这个理解并不太准确,正确的理解是完整的安卓操作系统由安卓userland和Linux内核两部分组成。
类似Unix(Unix-Like)的操作系统都可以分为两部分:内核和userland。
以Linux为例,常见的划分如下[1]:
+--------+---------+------------------------------------------------------------------+ | |User Apps| bash,FireFox,LibreOffice,ffmpeg... | | +---------+-----------------+----------------+--------------------+----------+ | User |Low-level| Daemons |Windowing System| Graphics |Other Libs| | Mode |Sys Comps|systemd,logind...| X11,Wayland... |Mesa,AMD Catalyst...|Qt,GTK... | | +---------+-----------------+----------------+--------------------+----------+ | | C Lib | glibc(POSIX compatible)/uClibc(Embedded)/bionic(Android)... | +--------+---------+------------------------------------------------------------------+ | | | system call Interface | | | +------------------+------+--------------+-------------+-----------+ | Kernel | Linux |Process scheduling| IPC |Mem Manegement|Virtual Files|Networking | | Mode | Kernel | Subsys |Subsys| Subsys | Subsys | Subsys | | | +------------------+------+--------------+-------------+-----------+ | | | Other components:LVM, DM, Linux Network Scheduler, Netfilter... | | | | Linux Security Modules: SELinux, TOMOYO, AppArmor, Smack... | +--------+---------+------------------------------------------------------------------+ | Hardware (CPU, main memory, block devices, NIC...) | +-------------------------------------------------------------------------------------+
题外话:这也是现在流行的容器(例如Docker)得以实现的基础,通过在内核提供的多种隔离机制,让不同的应用运行在自己独有的userland底层之上。
严格来说,Linux仅仅指内核,并不是一个完整的操作系统。我们常说的Linux都是一个名叫GNU(GNU is Not Unix!)的userland+Linux内核组成的操作系统,完整的写法应该是GNU/Linux。GNU本身是一个旨在用一系列开源软件替代商业Unix并实现类似功能的计划(GNU Project),由这一系列开源软件中的部分集合所组成的操作系统都叫GNU[2]。
事实上GNU有它自己的内核,叫GNU Hurd[3]。只是这个内核从1990年发布初始版本,至今将近30年了尚未成熟,还是处于Beta状态,而且2016年之后就没再更新了。因此,大部分的GNU操作系统,都用Linux或者FreeBSD/OpenBSD等内核替代GNU Hurd,并选择不同的GNU软件集合组成不同发行版,其中采用Linux内核的,就是我们今天常说的Linux操作系统,按照GNU的建议,完整的名称应该叫GNU/Linux(不过这种命名方式在Linux社区受到抵制,但Linux的创始者Linus Torvalds并不反对[4])。而采用FreeBSD内核的发行版,建议称之为GNU/kFreeBSD。例如大家非常熟悉的Debian发行版,完全遵从GNU的建议,有基于Linux内核的Debian GNU/Linux,也有基于FreeBSD内核的Debian GNU/kFreeBSD[5]。
而Android是谷歌开发的另外一个版本的userland,并且使用了Linux内核,所以如果遵从GNU的命名方式,完整写法是Android/Linux。所以很自然的,每个Android/Linux都有其对应的Linux内核版本。
[1]:参考自User space - Wikipedia
[2]:GNU - Wikipedia
[3]:GNU Hurd
[4]:https://en.wikipedia.org/wiki/GNU/Linux_naming_controversy