内核的结构

Linux内核的主要部分
Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS),网络接口(NET)和
进程间通信(IPC) 5个子系统
进程调度
进程调度控制系统中的多个进程对CPU的访问,使得多个进程鞥够在CPU中“围观串行,宏观并行”。进
程调度处于系统的中心位置,内核中的其他系统都依赖于它,因为每个系统都需要挂起或恢复进程。
睡眠分为可中断睡眠和不可中断睡眠。两者的区别在于可中断的睡眠在收到信号的时候会醒。
完全处于TASK_UNINTERRUPTIBLE状态的进程甚至都无法被杀死。所以Linux2.6.26之后的内核也存在着
一种TASK_KILLABLE的状态,它等于TASK_WAKEKILL|TASK_UNINTERRUTIBLE,可以相应致命信号。
在Linux内核中,使用Linux中,使用task_struct结构体来描述进程,该结构体中包含描述该进程内存
资源,文件系统资源,文件资源,tty资源,信号处理等资源。Linux的线程采用轻量级进程模型来实现,
在用户空间通过pthread_create()API创建线程的时候,本质上内核只是创建了一个新的task_struct,并将
task_struct的所有资源指针都指向创建它的那个task_struct的资源指针。
绝大多数进程(以及进程中的多个线程)是由用户空间的应用创建的。当他们存在底层资源和硬件的访
问需求时,会通过系统调用进入内核空间。在内核编程当中,如果需要几个并发执行的任务,可以启动内核
线程,这些线程没有用户空间。启动内核线程的函数为
pid_t kernel_thread(int (* fn) (void *),void *arg,unsigned long flags);
内存管理
主要作用是控制多个进程安全地共享住内存的区域。如果CPU提供内存管理单元是,Linux内存管理对于
每个进程完成从虚拟内存到屋里内存的转换。Linux2.6引入了对无MMU CPU的支持。
内核空间对常规内存,I/O设备内存以及高端内存有不同的处理方式。在内核排至选项当中可以对界限进
行配置。
Linux内核的内存管理总体比较庞大,包含底层的Buddy算法。它用于管理每个页的占用情况内核空间的
slab以及用户空间的C库的二次管理。另外内核也提供缓存的支持。用内存来缓存磁盘。per-BDIflusher线程
用于刷回脏的页缓存到磁盘。Kswapd(交换进程)则是Linux用于页面回收(包括file-backed的页和匿名页)的
内核线程。
虚拟文件系统隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,而且,他独立于各个具体的
文件系统。是对文件系统的一种抽象。为上层的应用程序提供了统一的vfs_read(),vfs_write()等接口,
网络接口
网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可以分为网络协议和网络驱动程
序。
Linux内核支持的协议栈的种类众多。上层的应用程序统一使用套接字接口。

进程间通信:
支持进程之间的通信。通信的方式包括:信号量、共享内存、消息列队、管道、UNIX域套接字这些基址可以
协助多个进程,多资源的互斥访问。进程之间的同步和消息的传递。Android内核新增了Binder进程间通信方式.


Linux 5个部分之间的以来关系:
进程调度与内存管理之间的关系:这两个子系统相互依赖.在多程序环境下,程序要运行,,必须要为之创建进程.
而进程创建的第一件事,就是将程序和数据装入内存.
进程间通信与内存管理之间的关系:进程之间的通信子系统要依赖内存管理支持共享内存通信机制.这种机制
允许两个进程除了拥有自己的私有空间之外,还可以存取共同的内存区域.
虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统.

内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程定期由调度程序,这也是
内存管理依赖于进程调度的原因.当一个进程存取的内存映射被换出时,内存管理向虚拟文件系统发出请求.同时
挂起当前正在运行的进程.
Linux内核空间与用户空间。
现代CPU内部往往集成了不同的操作模式。不同的模式有不同的功能。高层程序往往不能访问低级的功能,必须
以某种方式切换到低级模式。
● 用户模式( usr):大多数应用程序运行在用户模式下,当处理器运行在用户模式下时,
某些被保护的系统资源是不能访问的。
● 快速中断模式( fiq) :用于高速数据传输或通道处理。
● 外部中断模式( irq) :用于通用的中断处理。
● 管理模式( svc) :操作系统使用的保护模式。
● 数据访问中止模式(abt):当数据或指令预取中止时进入该模式,可用于虚拟存储及
存储保护。
● 系统模式( sys) :运行具有特权的操作系统任务。
● 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协
处理器的软件仿真。

ARM Linux的系统调用实现原理是采用swi软软中断从用户usr模式陷入管理模式(svc).
又如:x86处理器包含4个不同的特权级,称为Range0~Range3.Range0可以执行特权级指令。

今天先写到这里,爱你,叶铮
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值