Linux体系结构
如右图所示,Linux体系结构,从大的方面可以分为用户空间(UserSpace)和内核空间(KernelSpace)。
用户空间中包含了C库,用户的应用程序。在个别体系结布光中还包含了shell,其实shell脚本也是Linux体系中不可缺乏的一部份。
内核空间包括硬件平台、平台依赖代码、内核、系统调用插口。
在任何一个现代操作系统中,都是分层的。为何须要分层呢?
从程序员的角度剖析linux网络体系结构:linux内核中网络协议的设计与实现,将linux底层和和应用分开,将linux底层和应用分开,做应用的做应用,做底层的做底层,各干各的。经济学的基本原理是,分工形成效率。
从安全性的角度剖析,是为了保护内核。现代CPU一般都实现了不同的工作模式。
以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则有好多的限制
假如剖析一下Android的linux桌面,这方面做的愈发“丧心病狂”,Android所有的APK应用程序linux网络体系结构:linux内核中网络协议的设计与实现,都是在Java虚拟机前面运行,应用程序愈加远离底层。
另外,用户空间和内核空间是程序执行的两种不同状态,我们可以通过“系统调用”和“硬件中断”来完成用户空间到内核空间的转移。
Linux内核结构
这一节,剖析一下内核结构。
如右图所示,是Linux内核结布光。
SCI层(SystemCallInterface),这一层是给应用用户空间提供一套标准的系统调用函数来访问Linux。上面剖析Linux体系结构的时侯,介绍过任何一类现代操作系统都不会容许下层应用直接访问底层,在Linux中,内核提供了一套标准插口,下层应用就可以通过这一套标准插口来访问底层。
PM(ProceesManagement),这一部发包括具体创建创建进程(fork、exec),停止进程(kill、exit),并控制她们之间的通讯(signal等)。还包括进程调度,控制活动进程怎么共享CPU。这一部份是Linux早已做好的,在写驱动的时侯,只须要调用对应的函数即可实现这种功能,比如创建进程、进程通讯等等。
MM(MemoryManagement),显存管理的主要作用是控制多个进程安全的共享显存区域。
VFS(VirtualFileSystems),虚拟文件系统,隐藏各类文件系统的具体细节,为文件操作提供统一的插口。在Linux中“一切皆文件”,这种文件就是通过VFS来实现的。Linux提供了一个大的通用模型,使这个模型包含了所有文件系统功能的集合。如右图所示,是一个虚拟文件系统的结布光。
DeviceDrivers设备驱动,这一部份就是须要学习和把握的。Linux内核中有大量的代码在设备驱动程序部份,用于控制特定的硬件设备。
Linux驱动通常分为网路设备、块设备、字符设备、杂项设备如何安装linux,须要我们编撰的只有字符设备,杂项设备是不容易归类的一种驱动,杂项设备和字符设备有好多重合的地方。
网路合同栈,Linux内核中提供了丰富的网路合同实现。
在学习Linux驱动之前须要理解和把握linux体系结构和Linux内核结构