课程简介:

本课程的内容非常简单,对一个简单的文件系统进行彻底的分析,对一个设备驱动进行彻底的分析,
课后检查和作业也很简单,学习者独立写一个简单的文件系统,独立写一个设备驱动。
如果你完成了课程,达到了课后的目标,相信我,你已经超过了国内大多数主流公司的核心水平。
 
老师给学习者的话:
在我看来,计算机技术可以分为系统和架构、语言和编译OS。系统核心无疑是最困难、最陡峭的学习路径之一。既然你选择业余时间学习这门艰苦的课程,你一定对自己有期待和投资计划。诚实地说,这门课程真的不容易通过,但对于那些有抱负的人来说,如果很容易通过,那么其他人就会很容易。既然每个人都很容易得到,那么价值就会大大降低。因此,对此感兴趣的学习者需要为挑战做好准备。
教师只是课程的指导者,而不是那些取代学习者实践和思考的人。学习者可以使用在线搜索和自己找到答案,我认为这肯定会大大提高学习者的信心。
 
本课程不需要太多的核心知识。毕竟,这是一门从基础开始的课程。基本的C语言编程知识仍然需要,至少要编译内核,可以配置内核编译选项。 
 
本课程的内容设置不同于典型的教科书,也不同于其他类似的教程。课程设置充分反映了教师对国内工业现实的思考和理解。将OS内核分为基本层次和应用层次是作者的创造,也是引导学习者快速入门和应用所学知识的关键。本课程包括OS内存和任务调度的应用,但不包括这些原理。因为老师不认为知识的积累可以加深理解和思考,学习-应用-创新-再学习是作者理解的最佳途径。若能学以致用,就已经达到了很深的水平。毕竟这只是起步阶段,太多的知识只会打击初学者的信心。
 
虽然课程有很多学习内容,但课程的目的不是掌握一些知识,而是了解学习方法,进一步了解思维方法。我一直认为独立学习很重要,独立思考是最重要的。因此,课程作业可能与课程内容无关,甚至与课程内容无关。没问题。如果你深入思考,作业不会超过初学者能达到的水平,找到答案的学习者会发现他们已经找到了自己的学习道路。
 
课程大纲:
第一课前言(第一阶段:基础知识)
国内核应用现状
各大公司内核应用介绍(百度、阿里、腾讯、IBM、intel、华为等)
国内常见的核心应用模式和问题
 
核心在当前主流应用中的应用
应用云计算和虚拟化中内核
设备开发驱动的开发
分布式系统应用:分布式文件系统,
 
如何学习内核?
以使用为目的学习内核,边学边用,学以致用
阅读和修改活的代码,而不是阅读书籍
主要是培养阅读代码的能力,而不是学习特定的知识
 
内核基础层的范畴
内核基础层和应用层的划分逻辑
理解应用层和基础层,从代码量和应用模式中理解应用层和基础层
 
学习方法和内容
不要贪大求全,专注于关键应用领域
一步一步地奠定基础
兴趣是第一驱动力
本课程提出的学习方法和内容
 
第二课核基础层数据结构(第一阶段:基础知识)
核数据结构
双向链表
Hash链表
单向链表
红黑树
Radix树
 
核心同步机制
自旋锁
内核信号量
自旋锁与内核信号量的区别
原子变量
completion
每个CPU变量
RCU无锁机制
 
第三课核基础层提供的服务
内存用于核心
Linux内存管理基础-伙伴系统和slab
向合作伙伴系统申请内存
从slab系统申请内存
 
内核中的任务调度
内核过程调度的目的和应用范围
从例子程序学习过程中调度
内核过程调度的几种方法
 
软中断和tasklett
软中断与中断的关系
内核缺失定义的软中断—BLOCK_SOFTIRQ、NET_TX_SOFTIRQ、NET_RX_SOFTIRQ
takslet
 
工作队列
可调度的工作队列
创建自己的工作队列
 
第四课(第二阶段:文件系统)
文件系统的基本概念
VFS虚拟文件系统
超级块
dentry目录项目
inode索引节点
与过程相关的概念
 
文件系统的架构
超级块在文件系统中的基本作用
Dentry—将文件组织成树状
Inode—文件的代表
与过程相关的逻辑对象
 
从代码层次理解文件系统
写一个最简单的文件系统
注册文件系统
申请自己的数据结构的文件系统
文件系统创建目录和文件
 
打开第五课文件的过程
 
sysfs文件系统第六课(第二阶段:文件系统)
Sysfs—为设备服务的特殊文件系统
Sysfs的作用以及Sysfs和dev目录、proc文件系统的区别
Sysfs文件系统的初始化
创建目录文件
创建一般文件
 
打开文件的过程
与普通文件打开过程的衔接
为文件创建inode结构
dentry结构绑定属性
将私有数据保存在文件中
 
文件的读写
阅读文件的过程分析
写文件的过程分析
 
Kobject结构为对象属性服务
Kobject概念和功能
使用koject了解总线注册情况
 
第七课文件系统的读写(第二阶段:文件系统)
文件系统的page cache机制
buffer I/O和direct I/O
块缓存和page cache
Page 管理cache
Page cache状态
 
文件预读
预读的作用
预读机制的架构和算法
 
文件锁的概念和应用
建议锁和强制锁
读锁和写锁
 
文件阅读过程代码分析
硬盘操作模式与文件读写的关系
文件同步操作和异步操作
页面状态与读取操作的关系
阅读操作的返回
 
编写文件的过程代码分析
 
第八课通用块层和scsi层(第二阶段:文件系统)
块设备队列
Scsi块设备队列
电梯算法和电梯对象
HBA硬盘抽象层
 
控制IO的顺序
 
IO调度算法
IO调度算法的架构
Noop调度算法
deadline调度算法
 
IO处理过程
IO插入队列的过程
IO排队的过程
IO返回路径
 
ext2(第二阶段)是第九课的真实文件系统
Ext2文件系统布局
Ext2文件系统目录树
Ext2文件系统的内容管理
Ext2文件系统的读写
 
第10课设备概念和架构(第三阶段)
设备概念和架构
设备端口和设备内存
设备中断和DMA
总线扫描设备
设备驱动管理
 
了解PCI总线
Pci设备工作原理
Pci总线域
Pci资源管理
设置和读取Pci配置空间
 
扫描和发现PCI设备
0号总线扫描系统
扫描总线上的pci设备
扫描多功能设备
扫描single设备
设备信息及属性
 
第11课字符设备和input
文件系统与设备的关系
代表设备的文件
字符设备和字符设备缺乏处理函数
 
注册Input设备
主从设备号
注册设备范围
注册字符设备
打开input设备
 
Input设备的架构分析
注册input设备的驱动
设备与驱动的匹配模式
注册input设备
 
platform总线第12课
从驱动中发现设备的过程
Q40kbd键盘驱动的初始化
注册platform驱动
将驱动程序注册到总线
驱动加载
设备遍历总线
 
从设备中找到驱动器的过程
注册设备及总线
注册设备资源信息
添加设备对象
 
第13课块设备
块设备的架构
块设备、通用磁盘对象和队列
绑定块设备和通用磁盘对象
块设备的队列和应用
 
块设备的创建和使用过程分析
nbd驱动的初始化
为通用磁盘对象创建队列
通用磁盘对象加入系统
 
块设备文件系统
块设备文件系统的设计理念
块设备文件系统初始化
 
打开块设备的过程
块设备对象
块设备的开启过程
 

[我要扒资料]

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。