内核
文章平均质量分 83
小白起步
每天都要学到新东西
展开
-
一. bochs环境部署
配置要求一台linux操作系统的机器即可,最好是32位的。因为我们实现的小kernel是32位的,在64的机器上进行编译和链接可能会出现某些问题。笔者这里使用的是Ubuntu16.4环境配置bochs安装与配置安装我们自制的操作系统也是运行在一个虚拟机中的,这里我们用的是bochs,bochs本身也是基于x86架构的,这也是我之前说我们的小kernel也是32位的原因 bochs下载地址 点击链接原创 2018-04-23 15:34:31 · 510 阅读 · 0 评论 -
二. 编写mbr,让机器启动起来
mbr简介大家都知道,在我们按下电脑电源的时候,首先启动的BIOS(基本输入输出系统),那么BIOS又是如何被启动的呢,谁来唤醒他呢,它又在何处运行呢。要了解这些的话,首先得介绍一下我们实模式的内存布局实模式的内存布局图中的内容我们现在只需要关注红色框出来的地方,可以看到BIOS的入口地址处只有16BYTE的空间,很显然,这一小块空间肯定存放的不是数据,只能是指令了,图中也写的很明显了jmp f0原创 2018-04-23 15:36:48 · 2101 阅读 · 0 评论 -
三. 保护模式
实模式与保护模式下的分段机制程序想要在计算机上运行,就必须将源代码编译链接成二进制的可执行文件之后才可能被操作系统加载执行。如果在加载的过程中,程序的地址都是绝对的物理地址,那么程序就必须放在一个固定的地方,那么拥有两个相同地址的程序就只能运行一个了。于是,分段机制就产生了。让CPU通过 段基址:段内偏移 来访问任意内存,这样程序就可以实现重定位。也就是说,段内偏移相对于段基址是不变的。无论段基址是原创 2018-04-23 15:38:54 · 1014 阅读 · 0 评论 -
四. 获取内存容量
前言在前面一篇文章中介绍了进入保护模式的方法: 1. 打开A20 2. 加载gdt 3. 将控制寄存器cr0的pe位置1 通过这三步成功的进入到保护模式下,但是在进入保护模式之前,还需要对进行内存的检测工作,启动分页机制等等,最后还要将内核加载到内存当中。这些是之前没有完成的,接下来就要完成这些进入到保护模式之前的准备工作获取物理内存大小在linux中,获取内存容量的方法有很多种,比如det原创 2018-04-23 15:40:13 · 712 阅读 · 0 评论 -
五. 开启分页机制
为什么有进行内存分页目前我们的小kernel还一直在分段机制下工作,因为还只有一个loader在内存中跑,所以不会出现内存不足的问题。假如说此时未开启分页功能,而物理内存空间又不足了,如下图此时进程C想要执行,但是内存空间已经不足。要么就等待进程A或者进程B执行完成,这样就有连续的内存空间了。要么就讲进程A的A3段或者进程B的B1段换到硬盘上,腾出一部分空间,同样可以容纳进程C执行等待是极其不好的用原创 2018-04-23 15:49:40 · 471 阅读 · 0 评论 -
七. 中断
简介中断是指CPU获知了计算机中发生的某些事,CPU暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完了之后,CPU继续执行刚才的程序。通过中断可以极大的提高CPU的执行效率,如果没有中断,在处理器与外部设备通信时,他必须在向该设备发送指令后进入忙等待,反复轮询该设备是否就绪,这样就浪费了大量处理器的执行周期。引入中断之后,当处理器发出设备请求后就可以立即返回处理其他任务,而当设备动作原创 2018-04-23 15:50:53 · 341 阅读 · 0 评论 -
六. 函数调用约定与系统调用
函数调用约定调用约定从字面上理解,他是调用函数的一套约定。主要体现在一下三个方面 1. 参数的传递方式,参数是存放在寄存器中还是栈中 2. 参数的传递顺序,是从左到右传递还是从右到左传递 3. 是调用者保存寄存器环境还是被调用者保存在进行函数调用的时候,函数所需要传递的参数往往是不固定的。在计算机中并没有专门储存参数的硬件,因为参数的不确定性,该硬件的容量并不好确定,而且如果传递参数的过程中,原创 2018-04-23 15:52:14 · 426 阅读 · 0 评论