32、字符设备(上):如何建立直销模式?

上一节,我们讲了输入输出设备的层次模型,还是比较复杂的,块设备尤其复杂。这一节为了让你更清晰地了解设备驱动程序的架构,我们先来讲稍微简单一点的字符设备驱动。 这一节,我找了两个比较简单的字符设备驱动来解析一下。一个是输入字符设备,鼠标。代码在driv...

趣谈Linux操作系统

31、输入与输出:如何建立售前售后生态体系?

到这一节,操作系统作为一家外包公司,里面最核心的职能部门差不多都凑齐了。我们有了项目管理部门(进程管理),有为了维护项目执行期间数据的会议室管理部门(内存管理),有项目执行完毕后归档的档案库管理部门(文件系统)。 这一节,我们来规划一下这家公司的售前...

趣谈Linux操作系统

30、文件缓存:常用文档应该放在触手可得的地方

上一节,我们讲了文件系统的挂载和文件的打开,并通过打开文件的过程,构建了一个文件管理的整套数据结构体系。其实到这里,我们还没有对文件进行读写,还属于对于元数据的操作。那这一节,我们就重点关注读写。 系统调用层和虚拟文件系统层文件系统的读写,其实就是调...

趣谈Linux操作系统

29、虚拟文件系统:文件多了就需要档案管理系统

上一节,咱们的图书馆书架,也就是硬盘上的文件系统格式都搭建好了,现在我们还需要一个图书管理与借阅系统,也就是文件管理模块,不然我们怎么知道书都借给谁了呢? 进程要想往文件系统里面读写数据,需要很多层的组件一起合作。具体是怎么合作的呢?我们一起来看一看...

趣谈Linux操作系统

28、硬盘文件系统:如何最合理地组织档案库的文档?

上一节,我们按照图书馆的模式,规划了档案库,也即文件系统应该有的样子。这一节,我们将这个模式搬到硬盘上来看一看。 我们常见的硬盘是上面这幅图左边的样子,中间圆的部分是磁盘的盘片,右边的图是抽象出来的图。每一层里分多个磁道,每个磁道分多个扇区,每个扇...

趣谈Linux操作系统

27、文件系统:项目成果要归档,我们就需要档案库

咱们花了这么长的时间,规划了会议室管理系统,这样多个项目执行的时候,隔离性可以得到保证。但是,会议室里面保存的资料还是暂时的,一旦项目结束,会议室会被回收,会议室里面的资料就丢失了。有一些资料我们希望项目结束也能继续保存,这就需要一个和项目运行生命周...

趣谈Linux操作系统

26、内核态内存映射:如何找到正确的会议室?

前面讲用户态内存映射机制的时候,我们已经多次引申出了内核的映射机制,但是咱们都暂时放了放,这一节我们就来详细解析一下,让你彻底搞懂它。 首先,你要知道,内核态的内存映射机制,主要包含以下几个部分: 内核态内存映射函数vmalloc、kmap_ato...

趣谈Linux操作系统

25、用户态内存映射:如何找到正确的会议室?

前面几节,我们既看了虚拟内存空间如何组织的,也看了物理页面如何管理的。现在我们需要一些数据结构,将二者关联起来。 mmap的原理在虚拟地址空间那一节,我们知道,每一个进程都有一个列表vm_area_struct,指向虚拟地址空间的不同的内存块,这个变...

趣谈Linux操作系统

24、物理内存管理(下):会议室管理员如何分配会议室?

前一节,前面我们解析了整页的分配机制。如果遇到小的对象,物理内存是如何分配的呢?这一节,我们一起来看一看。 小内存的分配前面我们讲过,如果遇到小的对象,会使用slub分配器进行分配。那我们就先来解析它的工作原理。 还记得咱们创建进程的时候,会调用du...

趣谈Linux操作系统

23、物理内存管理(上):会议室管理员如何分配会议室?

前一节,我们讲了如何从项目经理的角度看内存,看到的是虚拟地址空间,这些虚拟的地址,总是要映射到物理的页面。这一节,我们来看,物理的页面是如何管理的。 物理内存的组织方式前面咱们讲虚拟内存,涉及物理内存的映射的时候,我们总是把内存想象成它是由连续的一页...

趣谈Linux操作系统