对linux操作系统中某些概念做简单预习,旨在为后续Android学习提供前提铺垫。例如学习binder、锁机制等等。
进程
Linux操作系统将运行中的程序成为进程。而Linux内核控制这Linux操作系统如何管理运行在系统上的所有进程。
内核创建了第一个进程(init进程)来启动系统上所有其他进程。 当内核启动时,他会将init进程加载到虚拟内存中。内核在启动任何进程时都会在虚拟内存中为该进程分配一块专有区域用于存储该进程用到的数据和代码。
进程隔离
- Linux中为每一个进程分配内存时都将内存划分为2部分:用户空间和内核空间。
- Linux中一个进程在运行时cpu的运行状态是用特权等级来区分,以arm64为例分为4个等级,从低到高分别是EL0~EL3。我们常接触的等级是EL0和EL1,EL0为用户态,EL1为内核态。当cpu处于用户态时不能访问内核空间的数据(除非通过系统调用将当前cpu状态转入内核态),但是反之如果cpu处于内核态时可以访问用户空间也可以访问内核空间。
- Linux中每个进程之间是相互隔离的,进程之间不能直接进行通信,这样保证了进程的安全性。
- 2个用户进程想要相互通信必须借助内核空间来完成,大概原理就是在内核空间中开辟出一块内存缓存区域,各个进程通过操作这块区域达到通信的目的。这就涉及到了用户进程想要访问内核空间的情况,此时只能通过系统调用(例如copy_from_user就是一个系统调用) 使cpu从用户态转入内核态,