自己动手写操作系统(五)
2017-07-16 21:37
113 查看
这里开始就进入了core的启动流程(类似于linux的kernel)。core的入口函数是start_core,如何定义如何函数呢?我们这里通过编译指令就可以了。参看下面的配置文件:
ENTRY (start_core)
SECTIONS
{
. = 0x100000;
.text :{
*(.text)
}
.rodata ALIGN (0x1000) : {
*(.rodata)
}
.data ALIGN (0x1000) : {
*(.data)
}
.bss ALIGN (0x1000) : {
sbss = .;
*(COMMON)
*(.bss)
ebss = .;
}
}
ENTRY就是入口函数的定义方法。我们自己编写的进程都是以main作为入口函数的。可能用这个也可以修改为其他函数哈~~。
start_core里面做的处理基本就是gdt,中断,内存,时钟等的初始化。我们这里主要先关注一下内存的初始化。
内存目前来说分配器有3个:coalition,fragment,vm。coalition用于内核kmalloc分配连续的物理内存。fragment用于分配4K的页给内核vmallc和用户态的mallc。
vm用来管理每个进程的虚拟地址。相关介绍如下图:
![](https://img-blog.csdn.net/20170716213440575?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ19zdW5fMTk4Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
接下来我们会逐一介绍每个内存分配器的实现和遇到的问题点。哈哈,简直就是天坑~~~。大家有兴趣的话可以看一下我的github针对mm的修改。改的天翻地覆~~~。
谢谢。
arale os的github:https://github.com/wangsun1983/arale
ENTRY (start_core)
SECTIONS
{
. = 0x100000;
.text :{
*(.text)
}
.rodata ALIGN (0x1000) : {
*(.rodata)
}
.data ALIGN (0x1000) : {
*(.data)
}
.bss ALIGN (0x1000) : {
sbss = .;
*(COMMON)
*(.bss)
ebss = .;
}
}
ENTRY就是入口函数的定义方法。我们自己编写的进程都是以main作为入口函数的。可能用这个也可以修改为其他函数哈~~。
start_core里面做的处理基本就是gdt,中断,内存,时钟等的初始化。我们这里主要先关注一下内存的初始化。
内存目前来说分配器有3个:coalition,fragment,vm。coalition用于内核kmalloc分配连续的物理内存。fragment用于分配4K的页给内核vmallc和用户态的mallc。
vm用来管理每个进程的虚拟地址。相关介绍如下图:
接下来我们会逐一介绍每个内存分配器的实现和遇到的问题点。哈哈,简直就是天坑~~~。大家有兴趣的话可以看一下我的github针对mm的修改。改的天翻地覆~~~。
谢谢。
arale os的github:https://github.com/wangsun1983/arale
相关文章推荐
- 自己动手写操作系统(一)
- 自己动手写操作系统(1)---环境搭建
- 自己动手写操作系统
- 《自己动手写操作系统第六章》引入minix中断处理方式
- 自己动手写操作系统(二)
- 自己动手写操作系统(三)
- 自己动手写操作系统之PCDOS安装以及DOS Addition安装
- 自己动手写操作系统
- 自己动手写操作系统(一)
- 自己动手写操作系统 开发工具
- 自己动手写操作系统(二)——搭建bochs环境
- <<自己动手写操作系统>>学习笔记(一)---后记
- 自己动手写操作系统2 安装dos
- InitKernel 自己动手写操作系统
- 《自己动手写操作系统》源码解析——第三章pmtest5.asm
- 自己动手写操作系统(六)
- 自己动手写操作系统(第一天)
- 自己动手写操作系统(七)
- 自己动手写操作系统(一)
- 自己动手写操作系统之第一部分笔记