设备环境初始化及激活进程0
现在开始执行main函数,初始化使得用户程序以进程的方式运行
进程管理信息的数据结构:
task_struct:标识进程的各项属性值
task[64]:存储系统中所有进程的task_struct
GDT:针对索引进程的索引结构
一、设置根设备、硬盘
设置根设备为软盘,设置硬盘参数表
二、规划物理内存格局,设置缓冲区、虚拟盘、主内存
决定所有进程使用内存的数量与方式,运算速度
具体规划:除内核代码和数据所占内存外,其余物理内存主要分为三部分(主内存区、缓冲区和虚拟盘)
主内存:进程代码运行的主要空间
缓冲区:主机与外设进行数据交互的中转站
虚拟盘区:可选区,先将外设数据复制到虚拟盘,然后加以使用,提高系统执行效率
三、设置虚拟盘空间并初始化
makefile文件中虚拟盘使用标志
四、内存管理结构mem_map初始化
主内存区起始区域重新确定之后,系统开始执行mem_init()函数,先设置主内存的管理结构
mem_map[]管理1MB以上的内存分页,记录一个页面的使用次数
mem_init()先将所有内存页面使用技术设为USED(100),然后清零(使用次数为0的页面看作空闲)
内核采用分页管理(线性地址与物理地址一样)
用户进程这两者差异很大,无法通过线性地址推出物理地址,使得用户进程无法访问其他的用户进程
五、异常处理类中断服务程序挂接
系统调用使用中断来实现
trap_init()函数将中断、异常处理程序与IDT挂接,逐步重建中断处理体系
32位中断服务体系位被动响应,替代主动轮询 。
六、初始化块设备请求项结构
linux设备分为两类:块设备与字符设备
块设备:将空间分为同样大小的块,每个块有块号,独立、随机读写,进程通过缓冲区与与块设备交互(请求项管理结构,需要操作的设备记录在请求项上)
字符设备:以字符为单位进行IO
七、与建立人机交互界面相关的外设的中断服务程序挂接
字符设备的初始化:为进程与串行口主备IO环境(与IDT相挂接)
1.对串行口进行设置
2.对显示器进行设置
3.对键盘进行设置
八、开机启动时间设置
time_init()函数
九、初始化进程0
进程0是linux系统中第一个进程,创建父子进程的第一个父进程
(1)系统先初始化进程0
(2)设置时钟中断
(3)要具备处理系统调用的能力,每个进程在运算时可以与内核交互,设置系统调用的入口system_call
十、初始化缓冲区管理结构
缓冲区:对数据进行保存,查找组织之类的间接性辅助运算。
os通过hash_table[NR_HASH]与buffer_head双向链表组成的复杂哈希表管理缓冲区
十一、初始化硬盘
为进程与硬盘IO打下基础