mirror of
https://github.com/MintCN/linux-insides-zh.git
synced 2026-04-24 18:50:42 +08:00
Merge pull request #103 from mudongliang/master
Add one more chapter : KernelDatastructures
This commit is contained in:
5
KernelStructures/README.md
Normal file
5
KernelStructures/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Linux 内核内部`系统`数据结构
|
||||
|
||||
这不是 `linux-insides` 中的一般章节。正如你从题目中理解到的,它主要描述 Linux 内核中的内部`系统`数据结构。比如说,中断描述符表 (`Interrupt Descriptor Table`), 全局描述符表 (`Global Descriptor Table`) 。
|
||||
|
||||
大部分信息来自于 [Intel](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) 和 [AMD](http://developer.amd.com/resources/developer-guides-manuals/) 官方手册。
|
||||
190
KernelStructures/idt.md
Normal file
190
KernelStructures/idt.md
Normal file
@@ -0,0 +1,190 @@
|
||||
interrupt-descriptor table (IDT)
|
||||
================================================================================
|
||||
|
||||
Three general interrupt & exceptions sources:
|
||||
|
||||
* Exceptions - sync;
|
||||
* Software interrupts - sync;
|
||||
* External interrupts - async.
|
||||
|
||||
Types of Exceptions:
|
||||
|
||||
* Faults - are precise exceptions reported on the boundary `before` the instruction causing the exception. The saved `%rip` points to the faulting instruction;
|
||||
* Traps - are precise exceptions reported on the boundary `following` the instruction causing the exception. The same with `%rip`;
|
||||
* Aborts - are imprecise exceptions. Because they are imprecise, aborts typically do not allow reliable program restart.
|
||||
|
||||
`Maskable` interrupts trigger the interrupt-handling mechanism only when RFLAGS.IF=1. Otherwise they are held pending for as long as the RFLAGS.IF bit is cleared to 0.
|
||||
|
||||
`Nonmaskable` interrupts (NMI) are unaffected by the value of the rFLAGS.IF bit. However, the occurrence of an NMI masks further NMIs until an IRET instruction is executed.
|
||||
|
||||
Specific exception and interrupt sources are assigned a fixed vector-identification number (also called an “interrupt vector” or simply “vector”). The interrupt vector is used by the interrupt-handling mechanism to locate the system-software service routine assigned to the exception or interrupt. Up to
|
||||
256 unique interrupt vectors are available. The first 32 vectors are reserved for predefined exception and interrupt conditions. They are defined in the [arch/x86/include/asm/traps.h](http://lxr.free-electrons.com/source/arch/x86/include/asm/traps.h#L121) header file:
|
||||
|
||||
```
|
||||
/* Interrupts/Exceptions */
|
||||
enum {
|
||||
X86_TRAP_DE = 0, /* 0, Divide-by-zero */
|
||||
X86_TRAP_DB, /* 1, Debug */
|
||||
X86_TRAP_NMI, /* 2, Non-maskable Interrupt */
|
||||
X86_TRAP_BP, /* 3, Breakpoint */
|
||||
X86_TRAP_OF, /* 4, Overflow */
|
||||
X86_TRAP_BR, /* 5, Bound Range Exceeded */
|
||||
X86_TRAP_UD, /* 6, Invalid Opcode */
|
||||
X86_TRAP_NM, /* 7, Device Not Available */
|
||||
X86_TRAP_DF, /* 8, Double Fault */
|
||||
X86_TRAP_OLD_MF, /* 9, Coprocessor Segment Overrun */
|
||||
X86_TRAP_TS, /* 10, Invalid TSS */
|
||||
X86_TRAP_NP, /* 11, Segment Not Present */
|
||||
X86_TRAP_SS, /* 12, Stack Segment Fault */
|
||||
X86_TRAP_GP, /* 13, General Protection Fault */
|
||||
X86_TRAP_PF, /* 14, Page Fault */
|
||||
X86_TRAP_SPURIOUS, /* 15, Spurious Interrupt */
|
||||
X86_TRAP_MF, /* 16, x87 Floating-Point Exception */
|
||||
X86_TRAP_AC, /* 17, Alignment Check */
|
||||
X86_TRAP_MC, /* 18, Machine Check */
|
||||
X86_TRAP_XF, /* 19, SIMD Floating-Point Exception */
|
||||
X86_TRAP_IRET = 32, /* 32, IRET Exception */
|
||||
};
|
||||
```
|
||||
|
||||
Error Codes
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
The processor exception-handling mechanism reports error and status information for some exceptions using an error code. The error code is pushed onto the stack by the exception-mechanism during the control transfer into the exception handler. The error code has two formats:
|
||||
|
||||
* most error-reporting exceptions format;
|
||||
* page fault format.
|
||||
|
||||
Here is format of selector error code:
|
||||
|
||||
```
|
||||
31 16 15 3 2 1 0
|
||||
+-------------------------------------------------------------------------------+
|
||||
| | | T | I | E |
|
||||
| Reserved | Selector Index | - | D | X |
|
||||
| | | I | T | T |
|
||||
+-------------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
* `EXT` - If this bit is set to 1, the exception source is external to the processor. If cleared to 0, the exception source is internal to the processor;
|
||||
* `IDT` - If this bit is set to 1, the error-code selector-index field references a gate descriptor located in the `interrupt-descriptor table`. If cleared to 0, the selector-index field references a descriptor in either the `global-descriptor table` or local-descriptor table `LDT`, as indicated by the `TI` bit;
|
||||
* `TI` - If this bit is set to 1, the error-code selector-index field references a descriptor in the `LDT`. If cleared to 0, the selector-index field references a descriptor in the `GDT`.
|
||||
* `Selector Index` - The selector-index field specifies the index into either the `GDT`, `LDT`, or `IDT`, as specified by the `IDT` and `TI` bits.
|
||||
|
||||
Page-Fault Error Code format is:
|
||||
|
||||
```
|
||||
31 4 3 2 1 0
|
||||
+-------------------------------------------------------------------------------+
|
||||
| | | R | U | R | - |
|
||||
| Reserved | I/D | S | - | - | P |
|
||||
| | | V | S | W | - |
|
||||
+-------------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
* `I/D` - If this bit is set to 1, it indicates that the access that caused the page fault was an instruction fetch;
|
||||
* `RSV` - If this bit is set to 1, the page fault is a result of the processor reading a 1 from a reserved field within a page-translation-table entry;
|
||||
* `U/S` - If this bit is cleared to 0, an access in supervisor mode (`CPL=0, 1, or 2`) caused the page fault. If this bit is set to 1, an access in user mode (CPL=3) caused the page fault;
|
||||
* `R/W` - If this bit is cleared to 0, the access that caused the page fault is a memory read. If this bit is set to 1, the memory access that caused the page fault was a write;
|
||||
* `P` - If this bit is cleared to 0, the page fault was caused by a not-present page. If this bit is set to 1, the page fault was caused by a page-protection violation.
|
||||
|
||||
Interrupt Control Transfers
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
The IDT may contain any of three kinds of gate descriptors:
|
||||
|
||||
* `Task Gate` - contains the segment selector for a TSS for an exception and/or interrupt handler task;
|
||||
* `Interrupt Gate` - contains segment selector and offset that the processor uses to transfer program execution to a handler procedure in an interrupt handler code segment;
|
||||
* `Trap Gate` - contains segment selector and offset that the processor uses to transfer program execution to a handler procedure in an exception handler code segment.
|
||||
|
||||
General format of gates is:
|
||||
|
||||
```
|
||||
127 96
|
||||
+-------------------------------------------------------------------------------+
|
||||
| |
|
||||
| Reserved |
|
||||
| |
|
||||
+--------------------------------------------------------------------------------
|
||||
95 64
|
||||
+-------------------------------------------------------------------------------+
|
||||
| |
|
||||
| Offset 63..32 |
|
||||
| |
|
||||
+-------------------------------------------------------------------------------+
|
||||
63 48 47 46 44 42 39 34 32
|
||||
+-------------------------------------------------------------------------------+
|
||||
| | | D | | | | | | |
|
||||
| Offset 31..16 | P | P | 0 |Type |0 0 0 | 0 | 0 | IST |
|
||||
| | | L | | | | | | |
|
||||
-------------------------------------------------------------------------------+
|
||||
31 16 15 0
|
||||
+-------------------------------------------------------------------------------+
|
||||
| | |
|
||||
| Segment Selector | Offset 15..0 |
|
||||
| | |
|
||||
+-------------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
Where
|
||||
|
||||
* `Selector` - Segment Selector for destination code segment;
|
||||
* `Offset` - Offset to handler procedure entry point;
|
||||
* `DPL` - Descriptor Privilege Level;
|
||||
* `P` - Segment Present flag;
|
||||
* `IST` - Interrupt Stack Table;
|
||||
* `TYPE` - one of: Local descriptor-table (LDT) segment descriptor, Task-state segment (TSS) descriptor, Call-gate descriptor, Interrupt-gate descriptor, Trap-gate descriptor or Task-gate descriptor.
|
||||
|
||||
An `IDT` descriptor is represented by the following structure in the Linux kernel (only for `x86_64`):
|
||||
|
||||
```C
|
||||
struct gate_struct64 {
|
||||
u16 offset_low;
|
||||
u16 segment;
|
||||
unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1;
|
||||
u16 offset_middle;
|
||||
u32 offset_high;
|
||||
u32 zero1;
|
||||
} __attribute__((packed));
|
||||
```
|
||||
|
||||
which is defined in the [arch/x86/include/asm/desc_defs.h](http://lxr.free-electrons.com/source/arch/x86/include/asm/desc_defs.h#L51) header file.
|
||||
|
||||
A task gate descriptor does not contain `IST` field and its format differs from interrupt/trap gates:
|
||||
|
||||
```C
|
||||
struct ldttss_desc64 {
|
||||
u16 limit0;
|
||||
u16 base0;
|
||||
unsigned base1 : 8, type : 5, dpl : 2, p : 1;
|
||||
unsigned limit1 : 4, zero0 : 3, g : 1, base2 : 8;
|
||||
u32 base3;
|
||||
u32 zero1;
|
||||
} __attribute__((packed));
|
||||
```
|
||||
|
||||
Exceptions During a Task Switch
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
An exception can occur during a task switch while loading a segment selector. Page faults can also occur when accessing a TSS. In these cases, the hardware task-switch mechanism completes loading the new task state from the TSS, and then triggers the appropriate exception mechanism.
|
||||
|
||||
**In long mode, an exception cannot occur during a task switch, because the hardware task-switch mechanism is disabled.**
|
||||
|
||||
Nonmaskable interrupt
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
**TODO**
|
||||
|
||||
API
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
**TODO**
|
||||
|
||||
Interrupt Stack Table
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
**TODO**
|
||||
132
README.md
132
README.md
@@ -21,81 +21,83 @@ Linux 内核揭密
|
||||
|├ [1.4](https://github.com/MintCN/linux-insides-zh/blob/master/Booting/linux-bootstrap-4.md)|[@zmj1316](https://github.com/zmj1316)|已完成|
|
||||
|└ [1.5](https://github.com/MintCN/linux-insides-zh/blob/master/Booting/linux-bootstrap-5.md)|[@chengong](https://github.com/chengong)|正在进行|
|
||||
| 2. [Initialization](https://github.com/MintCN/linux-insides-zh/tree/master/Initialization)||正在进行|
|
||||
|├ 2.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 2.1|[@dontpanic92](https://github.com/dontpanic92)|正在进行|
|
||||
|├ 2.2|[@dontpanic92](https://github.com/dontpanic92)|正在进行|
|
||||
|├ 2.3|[@dontpanic92](https://github.com/dontpanic92)|正在进行|
|
||||
|├ 2.4|[@bjwrkj](https://github.com/bjwrkj)|已完成|
|
||||
|├ 2.5|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|├ 2.6|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|├ 2.7|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|├ 2.8|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|├ 2.9|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|└ 2.10|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
| 3. [Interrupts](https://github.com/MintCN/linux-insides-zh/tree/master/interrupts)||正在进行|
|
||||
|├ 3.0|[@littleneko](https://github.com/littleneko)|正在进行|
|
||||
|├ 3.1|[@littleneko](https://github.com/littleneko)|正在进行|
|
||||
|├ 3.2|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ 3.3|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ 3.4|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ 3.5|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ 3.6|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ 3.7|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ 3.8|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ 3.9|[@zhangyangjing](https://github.com/zhangyangjing)|已完成|
|
||||
|└ 3.10|[@worldwar](https://github.com/worldwar)|已完成|
|
||||
|├ [2.0](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [2.1](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-1.md)|[@dontpanic92](https://github.com/dontpanic92)|正在进行|
|
||||
|├ [2.2](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-2.md)|[@dontpanic92](https://github.com/dontpanic92)|正在进行|
|
||||
|├ [2.3](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-3.md)|[@dontpanic92](https://github.com/dontpanic92)|正在进行|
|
||||
|├ [2.4](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-4.md)|[@bjwrkj](https://github.com/bjwrkj)|已完成|
|
||||
|├ [2.5](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-5.md)|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|├ [2.6](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-6.md)|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|├ [2.7](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-7.md)|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|├ [2.8](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-8.md)|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|├ [2.9](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-9.md)|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
|└ [2.10](https://github.com/MintCN/linux-insides-zh/blob/master/Initialization/linux-initialization-10.md)|[@bjwrkj](https://github.com/bjwrkj)|正在进行|
|
||||
| 3. [Interrupts](https://github.com/MintCN/linux-insides-zh/tree/master/Interrupts)||正在进行|
|
||||
|├ [3.0](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/README.md)|[@littleneko](https://github.com/littleneko)|正在进行|
|
||||
|├ [3.1](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-1.md)|[@littleneko](https://github.com/littleneko)|正在进行|
|
||||
|├ [3.2](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-2.md)|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ [3.3](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-3.md)|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ [3.4](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-4.md)|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ [3.5](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-5.md)|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ [3.6](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-6.md)|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ [3.7](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-7.md)|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ [3.8](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-8.md)|[@cloudusers](https://github.com/cloudusers)|正在进行|
|
||||
|├ [3.9](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-9.md)|[@zhangyangjing](https://github.com/zhangyangjing)|已完成|
|
||||
|└ [3.10](https://github.com/MintCN/linux-insides-zh/blob/master/Interrupts/interrupts-10.md)|[@worldwar](https://github.com/worldwar)|已完成|
|
||||
| 4. [System calls](https://github.com/MintCN/linux-insides-zh/tree/master/SysCall)||正在进行|
|
||||
|├ 4.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 4.1|[@qianmoke](https://github.com/qianmoke)|已完成|
|
||||
|├ 4.2|[@qianmoke](https://github.com/qianmoke)|已完成|
|
||||
|├ 4.3|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|└ 4.4|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ [4.0](https://github.com/MintCN/linux-insides-zh/blob/master/SysCall/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [4.1](https://github.com/MintCN/linux-insides-zh/blob/master/SysCall/syscall-1.md)|[@qianmoke](https://github.com/qianmoke)|已完成|
|
||||
|├ [4.2](https://github.com/MintCN/linux-insides-zh/blob/master/SysCall/syscall-2.md)|[@qianmoke](https://github.com/qianmoke)|已完成|
|
||||
|├ [4.3](https://github.com/MintCN/linux-insides-zh/blob/master/SysCall/syscall-3.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|└ [4.4](https://github.com/MintCN/linux-insides-zh/blob/master/SysCall/syscall-4.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
| 5. [Timers and time management](https://github.com/MintCN/linux-insides-zh/tree/master/Timers)||正在进行|
|
||||
|├ 5.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 5.1|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ 5.2|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ 5.3|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ 5.4|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ 5.5|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ 5.6|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|└ 5.7|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ [5.0](https://github.com/MintCN/linux-insides-zh/blob/master/Timers/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [5.1](https://github.com/MintCN/linux-insides-zh/blob/master/Timers/timers-1.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ [5.2](https://github.com/MintCN/linux-insides-zh/blob/master/Timers/timers-2.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ [5.3](https://github.com/MintCN/linux-insides-zh/blob/master/Timers/timers-3.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ [5.4](https://github.com/MintCN/linux-insides-zh/blob/master/Timers/timers-4.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ [5.5](https://github.com/MintCN/linux-insides-zh/blob/master/Timers/timers-5.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|├ [5.6](https://github.com/MintCN/linux-insides-zh/blob/master/Timers/timers-6.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
|└ [5.7](https://github.com/MintCN/linux-insides-zh/blob/master/Timers/timers-7.md)|[@1a1a11a](https://github.com/1a1a11a)|正在进行|
|
||||
| 6. [Synchronization primitives](https://github.com/MintCN/linux-insides-zh/tree/master/SyncPrim)||正在进行|
|
||||
|├ 6.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 6.1|[@keltoy](https://github.com/keltoy)|已完成|
|
||||
|├ 6.2|[@keltoy](https://github.com/keltoy)|正在进行|
|
||||
|├ 6.3|[@huxq](https://github.com/huxq)|已完成|
|
||||
|├ 6.4|[@huxq](https://github.com/huxq)|正在进行|
|
||||
|├ 6.5||未开始|
|
||||
|└ 6.6||未开始|
|
||||
|├ [6.0](https://github.com/MintCN/linux-insides-zh/blob/master/SyncPrim/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [6.1](https://github.com/MintCN/linux-insides-zh/blob/master/SyncPrim/sync-1.md)|[@keltoy](https://github.com/keltoy)|已完成|
|
||||
|├ [6.2](https://github.com/MintCN/linux-insides-zh/blob/master/SyncPrim/sync-2.md)|[@keltoy](https://github.com/keltoy)|正在进行|
|
||||
|├ [6.3](https://github.com/MintCN/linux-insides-zh/blob/master/SyncPrim/sync-3.md)|[@huxq](https://github.com/huxq)|已完成|
|
||||
|├ [6.4](https://github.com/MintCN/linux-insides-zh/blob/master/SyncPrim/sync-4.md)|[@huxq](https://github.com/huxq)|正在进行|
|
||||
|├ [6.5](https://github.com/MintCN/linux-insides-zh/blob/master/SyncPrim/sync-5.md)||未开始|
|
||||
|└ [6.6](https://github.com/MintCN/linux-insides-zh/blob/master/SyncPrim/sync-6.md)||未开始|
|
||||
| 7. [Memory management](https://github.com/MintCN/linux-insides-zh/tree/master/MM)||正在进行|
|
||||
|├ 7.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 7.1|[@choleraehyq](https://github.com/choleraehyq)|已完成|
|
||||
|├ 7.2|[@choleraehyq](https://github.com/choleraehyq)|已完成|
|
||||
|└ 7.3||未开始|
|
||||
|├ [7.0](https://github.com/MintCN/linux-insides-zh/blob/master/MM/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [7.1](https://github.com/MintCN/linux-insides-zh/blob/master/MM/linux-mm-1.md)|[@choleraehyq](https://github.com/choleraehyq)|已完成|
|
||||
|├ [7.2](https://github.com/MintCN/linux-insides-zh/blob/master/MM/linux-mm-2.md)|[@choleraehyq](https://github.com/choleraehyq)|已完成|
|
||||
|└ [7.3](https://github.com/MintCN/linux-insides-zh/blob/master/MM/linux-mm-3.md)||未开始|
|
||||
| 8. SMP||上游未开始|
|
||||
| 9. [Concepts](https://github.com/MintCN/linux-insides-zh/tree/master/Concepts)||正在进行|
|
||||
|├ 9.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 9.1|[@up2wing](https://github.com/up2wing)|正在进行|
|
||||
|├ 9.2|[@up2wing](https://github.com/up2wing)|正在进行|
|
||||
|└ 9.3|[@up2wing](https://github.com/up2wing)|正在进行|
|
||||
|├ [9.0](https://github.com/MintCN/linux-insides-zh/blob/master/Concepts/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [9.1](https://github.com/MintCN/linux-insides-zh/blob/master/Concepts/per-cpu.md)|[@up2wing](https://github.com/up2wing)|正在进行|
|
||||
|├ [9.2](https://github.com/MintCN/linux-insides-zh/blob/master/Concepts/cpumask.md)|[@up2wing](https://github.com/up2wing)|正在进行|
|
||||
|└ [9.3](https://github.com/MintCN/linux-insides-zh/blob/master/Concepts/initcall.md)|[@up2wing](https://github.com/up2wing)|正在进行|
|
||||
| 10. [DataStructures](https://github.com/MintCN/linux-insides-zh/tree/master/DataStructures)||正在进行|
|
||||
|├ 10.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 10.1|[@oska874](http://github.com/oska874) [@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 10.2|[@oska874](https://github.com/oska874)|已完成|
|
||||
|└ 10.3|[@cposture](https://github.com/cposture)|已完成|
|
||||
|├ [10.0](https://github.com/MintCN/linux-insides-zh/blob/master/DataStructures/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [10.1](https://github.com/MintCN/linux-insides-zh/blob/master/DataStructures/dlist.md)|[@oska874](http://github.com/oska874) [@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [10.2](https://github.com/MintCN/linux-insides-zh/blob/master/DataStructures/radix-tree.md)|[@oska874](https://github.com/oska874)|已完成|
|
||||
|└ [10.3](https://github.com/MintCN/linux-insides-zh/blob/master/DataStructures/bitmap.md)|[@cposture](https://github.com/cposture)|已完成|
|
||||
| 11. [Theory](https://github.com/MintCN/linux-insides-zh/tree/master/Theory)||正在进行|
|
||||
|├ 11.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 11.1|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 11.2|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|└ 11.3||未开始|
|
||||
|├ [11.0](https://github.com/MintCN/linux-insides-zh/blob/master/Theory/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [11.1](https://github.com/MintCN/linux-insides-zh/blob/master/Theory/Paging.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [11.2](https://github.com/MintCN/linux-insides-zh/blob/master/Theory/ELF.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|└ [11.3](https://github.com/MintCN/linux-insides-zh/blob/master/Theory/asm.md)||未开始|
|
||||
| 12. Initial ram disk||上游未开始|
|
||||
| 13. [Misc](https://github.com/MintCN/linux-insides-zh/tree/master/Misc)||正在进行|
|
||||
|├ 13.0|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ 13.1|[@oska874](https://github.com/oska874)|已完成|
|
||||
|├ 13.2|[@zmj1316](https://github.com/zmj1316)|已完成|
|
||||
|├ 13.3||未开始|
|
||||
|└ 13.4|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|
||||
|├ [13.0](https://github.com/MintCN/linux-insides-zh/blob/master/Misc/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|├ [13.1](https://github.com/MintCN/linux-insides-zh/blob/master/Misc/how_linux_compile.md)|[@oska874](https://github.com/oska874)|已完成|
|
||||
|├ [13.2](https://github.com/MintCN/linux-insides-zh/blob/master/Misc/linkers.md)|[@zmj1316](https://github.com/zmj1316)|已完成|
|
||||
|├ [13.3](https://github.com/MintCN/linux-insides-zh/blob/master/Misc/contribute.md)||未开始|
|
||||
|└ [13.4](https://github.com/MintCN/linux-insides-zh/blob/master/Misc/program_startup.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
| 14. [KernelStructures](https://github.com/MintCN/linux-insides-zh/tree/master/KernelStructures)||正在进行|
|
||||
|├ [14.0](https://github.com/MintCN/linux-insides-zh/tree/master/KernelStructures/README.md)|[@mudongliang](https://github.com/mudongliang)|已完成|
|
||||
|└ [14.1](https://github.com/MintCN/linux-insides-zh/tree/master/KernelStructures/idt.md)||未开始|
|
||||
##翻译认领规则
|
||||
|
||||
为了避免多个译者同时翻译相同章节的情况出现,请按照以下规则认领自己要翻译的章节:
|
||||
|
||||
Reference in New Issue
Block a user