1 Star 0 Fork 58

随心录123 / linux-0.11-note

forked from 沈lifeng / linux-0.11-note 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Structure.md 4.01 KB
一键复制 编辑 原始数据 按行查看 历史
moonfish930 提交于 2022-11-25 16:50 . 优化注释格式

0. 前言

本文档主要记录了项目的目录结构,以及每个目录下文件的功能。文件很多,一开始不必胡子眉毛一把抓,笔者根据自己的经验列出了需要重点关注的文件与阅读顺序,供读者参考。

linux-0.11作为一个完整的操作系统,主要实现了以下几方面的基本功能:

  1. 文件系统(在fs文件夹中)
  2. 内存管理(在mm文件夹中)
  3. 进程管理和调度(在kernel文件夹中)
  4. 设备管理(在kernel文件夹中)

其他还有如启动(boot),初始化(init),系统调用(lib)等功能。

如果想要详细了解其全貌,推荐阅读材料与顺序如下

  1. 闪客微信公众号: 你管这破玩意叫操作系统源码 | 第一回 最开始的两行代码 (qq.com) 特点是图片较多,语言通俗易懂,据说文科生也能看,方便入门,了解一般的启动流程和程序调度过程
  2. 新设计团队: 《Linux内核设计的意图》 同样是图解为主,配上一些简明扼要的文字说明,就算不看源代码,也能掌握操作系统的整体脉络;但是更加科学,更加详尽,而且有实际的程序例子详解应用层程序的工作流程
  3. 赵炯老师: 《Linux内核完全注释》(内核版本0.11) 极为详细的代码注释,适合深入研究;缺点是如果一开始没有操作系统的流程概念,只是从前往后阅读会抓不住重点

1. boot

阅读本文件夹需要有汇编基础,里面的三个.s文件跟操作系统代码在内存上的加载有关,并做了初步的内存规划

2. fs

本文件夹主要涉及文件相关的操作

  1. 文件在硬盘和内存中的组织结构,包含bitmap.c, super.c, inode.c, block_dev.c, file_dev.c file_table.c,namei.c等. 这一部分内容需要优先了解。linux-0.11主要靠inode结构管理硬盘信息,并提供给文件存储文件信息。inode->block(硬盘中的块) filep(文件描述符)->file_table(文件表)->file(文件的元信息)->inode_table->inode
  2. 文件状态管理,包含fcntl.c, ioctl.c, stat.c等
  3. 文件开关,包含openc.c等
  4. 文件读写, 包含read_write.c等
  5. 其他,包括super.c(超级块管理), exec.c(程序执行,不明白为啥要放在这个文件夹里), pipe.c(管道)等

3. include

所有头文件所在,一开始的时候就需要阅读其中的关键若干文件,等到一段时间后,对操作系统有了初步的概念,再进行通读。比较重要的头文件如下

  1. fs.h
    inode结构必须清清楚楚,是一切文件管理实现的核心; 超级块也要了解,系统通过超级块的方法管理磁盘;buffer_head是缓冲区头数据结构,极为重要
  2. sched.h 其中有两个最重要的结构体,task_struct(任务(进程/线程)数据结构,结构体变量非常多,一开始全部搞懂,需要不断的回看), tss_struct(任务状态段,用于任务切换时保存上下文,内部有很多寄存器信息) 如果此处有疑问,建议先了解计算机组成特别是寄存器相关的知识,推荐王爽老师的《汇编语言》
  3. a.out.h 主要是执行文件结构相关的数据和函数,需要不错的C语言基础 推荐布莱恩特老师的《CSAPP》
  4. unistd.h 一些常用的标准库函数,知道其含义即可,一般C语言的开发者会比较熟悉,不用细看

4. init

只有一个main.c文件,是程序的主流程,用于环境初始化。

在此文件中初始化了4个进程

  • 进程0:初始化内存布局,设备,时间,硬盘,特权级翻转等
  • 进程1:文件系统初始化,文件交互功能初始化
  • 进程2:加载配置文件(/etc/rc)并退出
  • 进程3:初始化shell程序

5. kernel

6. lib

7. mm

8. tools

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ddsuixinlu/linux-0.11-note.git
git@gitee.com:ddsuixinlu/linux-0.11-note.git
ddsuixinlu
linux-0.11-note
linux-0.11-note
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891