• Stars
    star
    454
  • Rank 96,373 (Top 2 %)
  • Language
    C
  • Created over 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

赵炯老师《linux-0.12 内核完全剖析》读书笔记及linux-0.12注释源码

《linux-0.12 内核完全剖析》

1528507608975.png

赵炯,上海同济大学计算机通信专业毕业,多年从事操作系统,计算机网络和系统软件的研究工作,具有很高的学术水平。2004年编写的《Linux内核完全注释 -基于0.12内核》(Linux 0.12版本发布于1992年1月15日)一书,一年内印刷4次,在各大计算机排行榜始终名列前茅,并被《中华读书报》评为“2004年度十大电脑图书”之一。

1528517709173.png

本仓库内容

  1. linux 0.12 源码
  2. linux 0.12 各个章节笔记
  3. 源码编译脚本及bochs启动运行脚本
Something I hope you know before go into the coding~
First, please watch or star this repo, I'll be more happy if you follow me.
Bug report, questions and discussion are welcome, you can post an issue or pull a request.

目录

相关站点

思维导图

1530928925710.png

1530928941007.png

1530928957834.png

1530936626048.png

1530960311089.png

1531454085477.png

1531473293936.png

20210109_164241_23

一些个人看法

  • 首先,读者如果是大佬,懂点Linux源码基础的可能会觉得这本书特么的废话注释真多~但身为菜鸡,读过一遍之后回过头来再看,个人觉得有些东西讲的细一点有好处,源码分析不能只讲理论,废话多的注释提供了很多信息,足够详细。但是缺点就是好比嚼烂了喂给你,你说恶心不恶心
  • 因人而异吧,不少听到某某大佬直接间接批评国内内核书籍只是做注释,这本书,其实很到位,理论有了,注释有了。很适合菜鸡入门。大佬你就特么的闭嘴少说话,你要牛逼你也写一个。
  • 读这本书需要掌握正确方法,论内核解析的正确打开姿势。首先,前面几章节基础,纯理论,必不可少的体系结构和基础汇编,如果掌握不了,或者看烦了,后面基本没啥玩头。如果你不知道体系结构,后面看的再透彻,你的瓶颈还是很明显的。反过来前面掌握透彻,后面,其实就是扩展补充
  • 然后从第七章,第七章是个过渡,很重要的过渡,影响到你后面的阅读,第七章之前,引导程序和初始化程序有着很深刻的流程化节奏,你把握流程就ok了哟~
  • 第八章开始,特么的就是一个一个文件的注释,谁看谁懵逼,谁看谁吐槽四不四
  • 其实不然,你必须知道一点,内核其实就是一堆函数的集合,这对函数划分不同功能模块,但是内核要自举啊,自举肯定是流程化的,自举结束了呢?正常运行呗,然后接下来所有功能模块都只是在需要的时候调用,不需要的时候不去动,不过每个模块在使用之前都肯定要初始化,初始化干了些啥?无非就是占坑,预存一些数据结构,参数什么的,硬件呢就是设置寄存器,告诉硬件要工作在什么模式。。其实我个人感觉硬件最蛋疼,因为太规矩,你必须怎么滴怎么滴才能怎么滴。
  • 感觉入门OS基础不可或缺两点 1.中断机制 2.段页式内存管理机制。
  • 对于中断而言,了解一下它的历史,会对它的作用意义有比较深的理解。然后我觉得理解中断不可或缺的一个概念或者说一种思路,就是中断的最高频率和CPU的处理速度之间的关系。
  • 假设中断频率100HZ(1000ms为1HZ,100HZ时,周期为1000/100=10ms),CPU处理速度1.1GHz(约为9000MIPs,MIPs为每秒百万条指令,1ms指令数约为9000/1000 = 9百万条指令),也就是说外部中断顶多顶多每隔10ms发生一次,但是CPU在1ms间就可以搞定9百万条指令,而一个外部中断其实指令数一般不过千,因此不必担心中断嵌套过深以及处理器过于处理速率跟不上中断丢失的情况,不用担心下一次中断来临前任务完不成的情况。基本可以理解为发生的外部中断不会嵌套发生,但是CPU内部中断,比如外部中断过程中发生系统调用中断是可以的哦,系统调用属于软中断,用了陷阱门,IDT[128],0X80号中断,DPL=3。但是依然能够在外部中断间隔内完成。HZ不是个固定不变的值,它是可以更改的,可以在内核源代码中修改。
  • 在单处理器系统中,每个tick只发生一次时钟中断。在对应的中断处理程序中完成更新系统时间、统计、定时器、等全部功能;而在多处理器系统下,需要考虑更多问题,多处理器每个CPU都有自己的时钟,时钟中断实际上是分成两个部分:1、全局时钟中断,系统中每个tick只发生一次。对应的中断处理程序用于更新系统时间和统计系统负载; 2、本地时钟中断,系统中每个tick在每个CPU上发生一次。对应的中断处理程序用于统计对应CPU和运行于该CPU上的进程的时间,以及触发对应CPU上的定时器;于是,在多处理器系统下,每个tick,每个CPU要处理一次本地时钟中断;另外,其中一个CPU还要处理一次全局时钟中断。 至于谁去更新全局,这不固定,谁有空谁去更新
  • 时钟中断存在丢失的可能。内核中的某些临界区是不能被中断的,所以进入临界区前需要屏蔽中断。当中断屏蔽取消的时候,硬件只能告诉内核是否曾经发生了时钟中断、却不知道已经发生过多少次。于是,在极端情况下,中断屏蔽时间可能超过1个tick,从而导致时钟中断丢失。 如果计算机上的时钟振荡器有很高的精度,linux内核可以读振荡器中的计数器,通过比较上一次读的值与当前值,以确定中断是否丢失。如果发现中断丢失,则本次中断处理程序会给jiffies_64增加相应的计数。但是如果振荡器硬件不允许(不提供计数器、或者计数器不允许读、或者精度不够),内核也没法知道时钟中断是否丢失了,实际丢了会咋滴?如果对实时性要求很高,那就不精确,否则都ok。
  • jiffies存在溢出(回绕问题)。jiffies变量总是无符号长整数,在32位体系结构上时32位,在64位体系结构上时64位。32位的jiffies变量,如果HZ = 100,497天后会溢出,如果HZ = 1000,49.7天后会溢出。而64位则别指望能看到溢出。一般就算是64位也只是读取低32位就够用。内核提供四个宏来帮助比较节拍计数,能正确处理节拍计数的回绕问题。
  • 要知道外部中断信号产生的时候,IF位被CPU置0,也就是你不处理不继续相应。所以CPU一般都是已处理完成紧急的该处理的工作之后就IF=1开启中断,酱紫就能够尽快响应。你要说丢失中断信号有没有可能?这就好比你生产手机的时候客户问你电池会不会爆炸?凭什么说不会
  • 外部中断HZ频率,可以说,外部中断肯定一定绝对的必须是在时间间隔发生,要么发生,要么不发生。时钟中断处理程序可以划分为两个部分:体系结构部分和体系结构无关部分
  • 实时性是个指标,绝对实时就没有实时的概念,基本上套路就是规定的时间内完成或者必要的响应。如果发生的中断1ms内响应算实时,1ns内响应算实时,1us内响应算实时,只是有比较才有优秀。
  • 能响应的最大中断频率还是看是否能在中断时间内完成所有计算,比如500KHz的中断频率就需要在2us之内完成所有计算。
  • 画图理解 - 不画图学起来比较吃力~

总结

  1. 基础永远值得花费90%的精力去学习加强。厚积而薄发~
  2. 要理解一个软件系统的真正运行机制,一定要阅读其源代码~

参考博客

More Repositories

1

learn-kvm

Qemu KVM(Kernel Virtual Machine)学习笔记
C
830
star
2

os-elephant

《操作系统真象还原》源码及学习笔记(os-elephant)还原真相
C
230
star
3

sparrow

郑钢《自制编程语言》随书源码及读书笔记
C
212
star
4

c

C语言学习
189
star
5

LinuxKernelTravel

Linux 内核之旅公众号文章
HTML
119
star
6

jz2440

ARM体系结构学习+ARM uboot+Linux内核+Linux驱动
110
star
7

vita

《深度探索Linux操作系统 : 系统构建和原理解析》 学习笔记
Shell
72
star
8

learn-tlpi

TLPI(The Linux Programming Interface)《linux/unix系统编程手册(上、下册)》学习笔记
C
61
star
9

Code-virtualization-and-automation-analysis

代码虚拟化与自动化分析
C++
60
star
10

LinuxDev

Linux阅码场(LinuxDev)公众号文章收集
HTML
56
star
11

X86-assembly-language-from-real-mode-to-protection-mode

x86汇编语言 从实模式到保护模式
Assembly
54
star
12

linux-3

《深入理解Linux网络(张彦飞)》; 《内核解密》;
C
39
star
13

bash

《Linux命令行与Shell脚本编程大全》 学习笔记
36
star
14

CodingInterview2

《剑指Offer》第二版源代码及相关学习笔记~
C++
31
star
15

linux-3.13.0

linux kernel 3.13.0 研究学习 & 电子科技大学 李林 《Linux操作系统内核技术》课程PPT
C
31
star
16

learn-network

计算机网络学习笔记~
30
star
17

Android-software-security-and-reverse-analysis

Android软件安全与逆向分析
Smali
27
star
18

learn-linux

linux基本用法,基本概念,基本原理笔记
26
star
19

linux-net

Linux 1.2.13 网络协议栈学习
C
25
star
20

python

Python 学习笔记
16
star
21

learn-make

GNU Make及Makefile语法语义分析学习笔记
15
star
22

Software-protection-and-analysis-techniques---principles-and-practices

软件保护及分析技术——原理与实践
C++
14
star
23

linux-2.4.0

linux kernel 2.4.0 研究学习
C
13
star
24

parser-elf

ELF解释器及相关学习笔记
Python
13
star
25

learn-cpp

C++学习笔记~汇编C++
C++
12
star
26

learn-vim

vim基本学习
JavaScript
12
star
27

learn-LDDD

《Linux 设备驱动开发详解》(宋宝华) 学习笔记
C
12
star
28

awesome-asm

12
star
29

linux-kernel-driver

Linux内核驱动demo仓(lkm、ldd)
C
11
star
30

learn-unp2

《UNIX网络编程·卷2:进程间通信(第2版)》学习笔记
C
11
star
31

crash

内核crash分析
C
11
star
32

linux-2

《深入理解LINUX内核第三版》、《深入理解LINUX网络内幕》、《深入理解LINUX虚拟内存管理》、《Linux那些事儿之我是USB》学习笔记
C
11
star
33

learn-unp1

《UNIX网络编程 卷1:套接字联网API(第3版)》学习笔记
C
10
star
34

FriendlyARM-Tiny6410

友善之臂(FriendlyARM)开发板Tiny6410学习笔记
9
star
35

learn-linux_exploit

Linux Exploit 学习笔记~
C
9
star
36

learn-awk

awk基本功;学习笔记;上古神器;文本处理三剑客;文本格式化工具;报告生成器
8
star
37

kflow

kenrel 内核函数调用关系分析工具
Python
8
star
38

learn-git

Git学习笔记
7
star
39

markdown-image-paste-delete

Atom markdown快速贴图/删图插件(atom markdown image paste delete plugin)
CoffeeScript
6
star
40

gdb

gdb学习笔记
C
6
star
41

go-raft

raft协议学习
Go
5
star
42

learn-systemd

linux systemd工具学习
5
star
43

eaidk-610

eaidk-610
C++
5
star
44

linux-syscall

linux syscall handbook
5
star
45

learn-ebpf

ebpf学习笔记~
5
star
46

learn-autotools

Autotools : a practitioner's guide to GNU Autoconf, Automake, and Libtool
5
star
47

koji

基于Rocky Linux 8.6/Fedora基础设施koji项目/koji-1.30.1
Python
5
star
48

linux-0.11-lab

C
4
star
49

rocky-linux

Rocky Linux 学习笔记
4
star
50

learn-IMX6U

I.MX6U 开发板学习笔记
4
star
51

those-things-of-linux

《Linux那些事儿》系列读书笔记~TTL(Those Things of Linux)
4
star
52

firefly-rk3399

firefly rk3399玩耍记录
4
star
53

learn-skynet

skynet学习笔记
4
star
54

OpenWrt-gdock

竞斗云2.0 OpenWRT-p2w_r619ac-128m-firmware
Shell
4
star
55

linux-6

Debian kernel 6.1.20
C
4
star
56

learn-imx6ull

跟着原子哥学嵌入式~
4
star
57

SEAL

微软开源同态加密函数库
C++
4
star
58

Ubuntu18.04-MacOS-themes

Ubuntu18.04 MacOS themes
4
star
59

learn-qianfengedu

千锋教育 学习笔记
4
star
60

32to64

x86汇编语言从实模式到保护模式
Assembly
4
star
61

learn-apue

APUE(Advanced Programming in the UNIX)《UNIX环境高级编程(第3版)》学习笔记
C
4
star
62

Android-system-source-code-scene-analysis

android系统源代码情景分析,基于android2.3.1
Java
4
star
63

markdown-preview-auto-open-close

Atom插件:开启/关闭 Markdown 文件时自动开启/关闭预览功能 (Automatically turn on/off preview when opening/closing Markdown files)
JavaScript
4
star
64

learn-mips

MIPS 体系架构学习
4
star
65

pungi

基于Fedora36/Fedora基础设施pungi项目/pungi-4.3.6
Python
3
star
66

learn-kernel

Learn Linux Kernel~
3
star
67

write-a-C-interpreter

C
3
star
68

LinuxHacker

Linux内核学习笔记
C++
3
star
69

runninglinuxkernel_4.0

C
3
star
70

git

git 相关操作,免密码登录等。自己弄一波脚本,自己搞的自己清楚,免得去记忆一波锤子配置文件,懒有懒得技巧~
Shell
3
star
71

pciutils-3.7.0

pciutils-3.7.0
C
3
star
72

createrepo_c

基于Rocky Linux 8.6/rpm-software-management基础设施之createrepo_c解析
C
3
star
73

learn-bcc

bcc学习笔记
3
star
74

ndb

ndb内核调试
3
star
75

rk3399-evb

rk3399-evb(Rockchip RK3399pro evb v11 board)
3
star
76

analysis-cve

CVE Analysis and Exploit
3
star
77

learn-debian

《The Debian Administrator's Handbook》- Debian 管理员手册
3
star
78

learn-kerberos

kerberos协议及工具学习
3
star
79

go-keep

Golang 不停服、不停机、热重启、热升级、热更新
3
star
80

learn-tmux

tmux基本功学习
3
star
81

kdev

Linux内核开发环境构建工具 (2.*/3.*/4.*/5.*/6.*)
Python
3
star
82

learn-m4

GNU m4 是一个通用的宏处理器,由 Brian Kernighan 和 Dennis Ritchie 设计
3
star
83

numactl

numactl解析
Shell
2
star
84

vscode

vscode
2
star
85

skill-idea

IDE 编辑器技巧总结
2
star
86

microsegment

微隔离(Micro-segmentation)
2
star
87

usbutils-010

usbutils-010
2
star
88

repo

repo工具使用
Python
2
star
89

redis-5.0.3

redis-5.0.3
C
2
star
90

tmux

tmux 配置文件
Shell
2
star
91

learn-etcd

etcd raft 高可用、分布式 Key/Value 存储系统
2
star
92

learn-markdown

markdown学习笔记
2
star
93

kubernetes-1.14.0

kubernetes-1.14.0
Go
2
star
94

learn-re

正则表达式学习笔记
2
star
95

learn-zabbix

zabbix学习笔记
2
star
96

patch-2.7.6

patch-2.7.6
C
2
star
97

arch-mips

mips体系架构学习
2
star
98

dnf

dnf-4.7.0
Python
2
star
99

OpenCloudOS

OpenCloudOS 开源操作系统社区
2
star
100

OpenEuler

OpenEuler 开源操作系统社区
2
star