![[Pasted image 20260414141806.png]]

一、Linux内核

用内核管理全局资源

(1)进程

Linux内核负责进程的创建、销毁、进程和线程的调度和切换(分优先级放cpu里执行,在这之间切换),只有内核能管理全局资源:点击 App → 系统创建进程 → 进程里再跑应用代码

在计算机领域,进程是指由一个或多个线程执行的计算机程序实例(instance)

![[Pasted image 20260414142239.png]]

线程是由调度程序(通常是操作系统的一部分)独立管理的最小程序指令序列。 实例是基于类、过程调用等等的实例化

计算机程序是一组被动的指令集合,通常存储在磁盘上的文件中;而进程则是将这些指令从磁盘加载到内存后执行的过程。同一个程序可以关联多个进程;例如,打开同一个程序的多个实例通常会导致多个进程同时运行。

(2)内存管理

把物理内存取名字为虚拟内存,提供了“给定机器上实际可用的存储资源的理想化抽象” ,从而“为用户创造了拥有非常大的(主)内存的错觉”

计算机操作系统通过软硬件结合的方式,将程序使用的内存地址(称为虚拟地址)映射到计算机内存中的物理地址。对于进程或任务而言,主存储器表现为一个连续的地址空间或一组连续的段。操作系统负责管理虚拟地址空间以及将物理内存分配给虚拟内存。CPU 中的地址转换硬件(通常称为内存管理单元(MMU))会自动将虚拟地址转换为物理地址。操作系统中的软件可以扩展这些功能,例如利用磁盘存储,来提供一个容量超过物理内存的虚拟地址空间,从而引用比计算机实际物理内存更大的内存。

页表:是“虚拟地址”和“物理地址”的对照表。常见一页为4KB,程序访问一个地址时,用的是虚拟地址,CPU 和内核要通过页表查出来:这个虚拟地址,对应真实物理内存里的哪一块。

共享内存:正常情况下,进程之间内存是隔离的。但有时候两个进程确实需要共享一部分数据,就可以让它们都映射到同一块物理内存区域。

内存保护:内核作为管理员控制谁能访问哪个内存,谁不能

(3)文件管理

文件系统就是把“存储空间”组织成“文件和目录”的规则和实现。

管理文件系统和信息、权限、挂载

(4)设备驱动

(5)网络协议栈

TCP/IP (互联网协议套件)协议:互联网协议套件提供端到端的数据通信,规定了数据的打包、寻址、传输、路由和接收方式。该功能被组织成四个抽象层,这些层根据每个协议的网络范围对所有相关协议进行分类。特定应用程序的各层实现构成协议栈。从低到高,这些层分别是:链路层,包含单个网络段(链路)内数据的通信方法;网络层,提供独立网络之间的互联;传输层,处理主机到主机的通信;以及应用层,提供应用程序的进程间数据交换。

Socket 是上层程序和底层网络之间的重要桥梁

本地网络,局域网,WiFi,5G、热点、蓝牙

(6)安全

用户权限:安卓里每个 App 往往会对应独立的每个用户,决定能访问哪些文件、调用哪些资源、执行哪些操作

进程隔离

SELinux:更高级的全局保护

(7)IPC机制

IPC = Inter-Process Communication,进程间通信,因为每个进程彼此隔离,所以如果它们要合作,就得通过特定方式通信。

Linux 本来就有很多 IPC 方式,比如:管道、消息队列、共享内存、Socket

Binder:安卓专门设计的一套高效、安全、适合系统服务调用的 IPC 机制。

(8)电源管理

休眠、唤醒、cpu频率调节、

二、硬件抽象层

Linux 内核负责“直接控制硬件”,HAL 负责“把硬件能力整理成安卓上层能统一调用的接口,让软件用硬件用得更舒服”

安卓设备很多,要适配的硬件也很多,所以系统上层只面对统一接口,底层厂商自己去适配具体硬件,相当于把上层需求翻译成底层可执行动作。

  1. 统一接口;对上暴露统一函数和能力模型。 让 Framework 不用关心底下是高通、MTK 还是别的方案。
  2. 屏蔽硬件差异;同样叫摄像头、指纹、传感器,不同厂商实现方式不同。 HAL 把差异包起来。
  3. 参数转换:把上层给的参数编排,再按顺序调用底层驱动