百科问答小站 logo
百科问答小站 font logo



对于安卓是否可以理解为安卓系统其实跑的是Linux? 第1页

  

user avatar   mu-tou-long 网友的相关建议: 
      

一句话结论:这个理解并不太准确,正确的理解是完整的安卓操作系统由安卓userland和Linux内核两部分组成


类似Unix(Unix-Like)的操作系统都可以分为两部分:内核和userland。

  • 内核(以及内核模块)以内核模式,在内存的内核空间(kernel space)运行,直接访问内存的物理地址
  • userland(不知道中文应该如何翻译合适)是以用户模式,在内存的用户空间(user space)运行,通过访问虚拟内存地址并由内核/硬件转换成内存物理地址的方式间接访问内存的一系列程序和库。


以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]:en.wikipedia.org/wiki/G

[5]:Debian GNU/kFreeBSD




  

相关话题

  网卡是硬件设备,那为什么安装了linux虚拟机,会自带网卡呢,安装虚拟机不是完完全全的软件操作吗? 
  各位VIM大神,如何学习VIM,有很多命令感觉都没有什么意思的,如何记忆,熟能生巧耳? 
  为什么Google会在Android上推广使用64位应用,而微软却完全没有废弃32位应用的计划? 
  谷歌将启用 AAB 格式应用取代安卓 APK,将会对安卓使用者造成什么影响? 
  Build 2015上微软宣布Windows 10支持Objective-C与Java编写的应用,这对C#与Windows自身有什么长远影响? 
  MIUI 12 是否抄袭 iOS? 
  为什么这么多人吹wsl? 
  如果没有Android系统 国产手机能达到今天的成就吗? 
  如何看待长征七号发射用国产麒麟系统替代windows? 
  如何看待 Apple Mac 将无法支持最新微软 Windows 11 操作系统? 

前一个讨论
如何看待巨量引擎提出的“新搜索”概念?
下一个讨论
如果唐僧得了痔疮,你作为主刀医师,面对切下来的那块肉,你是选择要面子还是长生不老?





© 2024-06-26 - tinynew.org. All Rights Reserved.
© 2024-06-26 - tinynew.org. 保留所有权利