/**linux
以下图所示,Linux体系结构,从大的方面能够分为用户空间(User Space)和内核空间(Kernel Space)。 程序员
用户空间中包含了C库,用户的应用程序。在某些体系结构图中还包含了shell,固然shell脚本也是Linux体系中不可缺乏的一部分。shell
内核空间包括硬件平台、平台依赖代码、内核、系统调用接口。安全
在任何一个现代操做系统中,都是分层的。为何须要分层呢?网络
从程序员的角度分析,将linux底层和和应用分开,将linux底层和应用分开,作应用的作应用,作底层的作底层,各干各的。经济学的基本原理是,分工产生效率。函数
从安全性的角度分析,是为了保护内核。现代CPU一般都实现了不一样的工做模式。post
以ARM为例:ARM实现了7种工做模式,不一样模式下CPU能够执行的指令或者访问的寄存器不一样: (1)用户模式 usr (2)系统模式 sys(3)管理模式 svc(4)快速中断 fiq(5)外部中断 irq(6)数据访问终止 abt(7)未定义指令异常。若是任何一个上层应用均可以调用均可以调用寄存器,那样确定是没法稳定执行的。并且由于出现了这个问题,出现了一个新的学科“现代操做系统”,若是你们感兴趣能够看一下“现代操做系统”相关文章或者书籍。学习
以X86为例:X86实现了4个不一样级别的权限,Ring0—Ring3 ;Ring0下能够执行特权指令,能够访问IO设备;Ring3则有不少的限制spa
若是分析一下Android的,这方面作的更加“丧心病狂”,Android全部的APK应用程序,都是在Java虚拟机上面运行,应用程序更加远离底层。操作系统
另外,用户空间和内核空间是程序执行的两种不一样状态,咱们能够经过“系统调用”和“硬件中断”来完成用户空间到内核空间的转移。
这一节,分析一下内核结构。
以下图所示,是Linux内核结构图。
SCI层(System Call Interface),这一层是给应用用户空间提供一套标准的系统调用函数来访问Linux。前面分析Linux体系结构的时候,介绍过任何一类现代操做系统都不会容许上层应用直接访问底层,在Linux中,内核提供了一套标准接口,上层应用就能够经过这一套标准接口来访问底层。
PM(Procees Management),这一部分包括具体建立建立进程(fork、exec),中止进程(kill、exit),并控制他们之间的通讯(signal等)。还包括进程调度,控制活动进程如何共享CPU。这一部分是Linux已经作好的,在写驱动的时候,只须要调用对应的函数便可实现这些功能,例如建立进程、进程通讯等等。
MM(Memory Management),内存管理的主要做用是控制多个进程安全的共享内存区域。
VFS(Virtual File Systems),虚拟文件系统,隐藏各类文件系统的具体细节,为文件操做提供统一的接口。在Linux中“一切皆文件”,这些文件就是经过VFS来实现的。Linux提供了一个大的通用模型,使这个模型包含了全部文件系统功能的集合。以下图所示,是一个虚拟文件系统的结构图。
Device Drivers设备驱动,这一部分就是须要学习和掌握的。Linux内核中有大量的代码在设备驱动程序部分,用于控制特定的硬件设备。
Linux驱动通常分为网络设备、块设备、字符设备、杂项设备,须要咱们编写的只有字符设备,杂项设备是不容易归类的一种驱动,杂项设备和字符设备有不少重合的地方。
网络协议栈,Linux内核中提供了丰富的网络协议实现。