Linux内核笔记 -- 内核中层设施

来源:互联网 发布:oa系统的数据库设计 编辑:程序博客网 时间:2024/05/17 18:49

内核中层设施

在阅读内核源码时,有一个重要的问题。内核将一部分东西放进kernel文件夹中,其他一些东西放进mm、ipc、net、fs、sound、block等文件夹中。这样的划分依据是什么?

  • 在系统实现了IRQ之后,就能处理机器相关的中断,能够获取到系统的精确时间并实现计时的功能,借助IPI可以通知其他的处理器。
  • 实现了粗细粒度的锁就能确保多核心执行过程中数据的正确性。
  • 通过封装机器MMU的内存管理指令,就能实现对Cache的管理,实现内存屏障、写回、缓存无效等通用功能。

这些功能都是机器提供给用户的功能,操作系统的最核心部分是这些下层的基础设施,对系统而言,这些东西逻辑简单,贴近机器,但是功能不健全,要有效的使用机器就要对其在使用方式上进行扩展,通过一定的数据结构构建出能够有效操作下层设施的中层模块。

中层设施实现的功能

  • 当我们有了基础的功能,我们能够给串口或者显示器输出一段字符串日志,但我们在输出时不能每次都处理一个个字节来生成这个字符串,这时我们利用状态机来实现一个专门按照一定格式填充字符串生成目标字符串的函数(printf)。[linux4.13.12/lib/vsprintf.c]然后我们就能够非常快捷的生成目标字符串了。

  • 我们利用RCU机制在spinlock基础上实现了一个类似版本控制的数据同步模块,减少了数据同步中的挂起问题,加快了内核中多线程对数据访问和修改的效率。

  • 借鉴BPF中状态机的思想,实现了在内核中免复制的性能监控和数据过滤。

  • 在拥有基本的执行能力后,通过task_struct来分割各个执行体,以执行体为单元实现了多任务的调度和资源分配,让用户通过fork、clone等系统调用来说执行自己的代码。

  • 通过在线程执行体上添加时间标记,在调度前后统计线程在系统上的执行时间(acct)。

  • 借助计时函数实现完成对象实现多线程的更加灵活的等待。

  • 在基本的机器资源使用中,引入CGroup的树状结构对各个子系统的资源进行定量的约束,在请求资源过程中插入函数来查询Cgroup来判断是否可以分配资源。引入Namespace对系统的各个子系统进行环境隔离。

中层设施的定位

中层设施在机器的下层基础上扩展了系统的功能,但主要的工作区域还是CU、ALU、MMU和基本的内存使用上,这些上层扩展增强了内核自身的能力,也划定了内核的最核心的结构。其他的各个子系统都是在这个中层结构上构建数据结构、注册处理过程把自己挂接到系统相应、预留自己的接口。最终其他的子系统也都会落在这个中层核心上,扩展系统功能,就像身体的躯干和四肢的关系一样。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 拉皮肉丝 拉皮诺埃 大拉皮 凉拌大拉皮 五彩拉皮 拉皮电波 拉皮紧肤 拉皮怎么做 拉皮凉菜 肉丝拉皮 拉皮的费用 拉皮祛皱术 拉皮费用 抬头纹拉皮 面部拉皮术 拉皮术祛皱 拉皮拉皮 抽脂拉皮 拉皮的价格 超声波拉皮 微创拉皮 年轻化拉皮 怎样拉皮 prt电波拉皮 深蓝拉皮 韩式拉皮 拉皮 美容 做拉皮 拉皮美容 电子拉皮 拉皮是啥 拉皮除皱方法 大拉皮的做法 凉拌东北大拉皮 东北拉皮做法 冰电波拉皮仪价格 拉皮整容多少钱 迷你腹部拉皮后图片 电波拉皮多少钱 电波拉皮多少钱一次 美容拉皮多少钱