04-初始化-内存部分

总览

启动过后就是各个模块的初始化,具体包括以下内容(内存初始化一定在最前面,中断及其相关驱动保持前后关系,最后一个是init进程的初始化,其余随意即可):

  • 1、内存初始化
  • 2、中断初始化(包括软件中断-系统调用)
  • 3、字符设备、块设备缓冲区初始化
  • 4、各类驱动初始化,注册中断号(磁盘,键盘,时钟等等)
  • 5、文件系统初始化
  • 6、调度器初始化
  • 7、init进程初始化

初始化之后就是调度第一个进程使之进入用户态进行各类初始化。

内存初始化

内存初始化或者说内存管理涉及到几个部分:

  • 1、启动时内存分配器
  • 2、内存映射机制
  • 3、内核态内存分配器

因为启动时候已经通过虚拟地址映射的,所以此时能访问的内存地址是有限的。先对这部分内存进行管理,为下一步内核态内存分配器和内存映射机制提供帮助。

内存映射有内核态和用户态的区别,前者为静态映射,后者为动态映射。在实际内存初始化的时候,只用到了静态映射,随之就可以开始内核态内存分配器的初始化了。

内存分配器

这部分是大块头,我就不多啰嗦,有兴趣的可以直接翻阅相关技术文章,比如linuxbuddy systemslab/slubglibcptmalloc2等等。

比较常见的实现方式有:

  • 1、空闲链表
  • 2、内存池

具体实现

目前仅实现了buddy system。主要原因是armv7中的二级页表依赖于16KB对齐的一级页表,不得不实现伙伴系统,如果是单纯的x86的二级页表方式,可以简单处理为固定大小链表形式。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值