文件子系统
- 索引节点表
- 文件表
- 用户文件描述符表
- 内核在逻辑级上只涉及文件系统,而不涉及磁盘。由磁盘驱动程序实现逻辑设备(文件系统)地址和物理设备(磁盘)地址之间的转换。
- 文件系统由一个逻辑块序列组成,每个块都为512字节的任意倍数。在一个文件系统中逻辑块大小是完全相同的。一个文件系统具有如下结构:
引导块 | 超级块 | 索引节点表 | 数据块 |
---|---|---|---|
占据文件系统的开头,是一个扇区。虽然为了引导系统只需要一个引导块,但每个文件系统都有一个引导块(可能是空的) | 描述了文件系统的状态,如文件系统大小,可存储多少文件,空闲空间位置等 | 是一张装有索引节点的表,内核通过索引来访问(索引节点)表中的(索引)节点 | 包含文件数据与管理数据 |
进程子系统
- 内核进程表
- u区
- 区表
- 本进程区表
- 每个进程在内核进程表都有一个表项,每个进程都被分配一个u区,u区包含仅被内核操纵的私用数据。进程表包含一个本进程区表,本进程区表的表项指向区表的表项。区表包含进程的正文区、数据区及栈区等。
- 进程上下文:包括进程状态、进程的全局变量、寄存器值、存储在进程表项和u区中的值,以及用户栈和核心栈的内容。
- 内核态进程不能被抢占,但可以被中断。内核态进程一直运行,直到自己睡眠或返回到用户态。
- 内核进入临界区时,可以提高中断优先级甚至禁止中断。并且内核是非抢占的,可以避免很多临界区的同步问题(好像关系不大?)。
内核的数据结构
- 多采用静态分配的固定长度的表(数组),优点是内核代码简单,并且效率也可以。