三. 保护模式 发表于 2018-04-17 | 更新于 2018-12-09 | 分类于 kernel 实模式与保护模式下的分段机制程序想要在计算机上运行,就必须将源代码编译链接成二进制的可执行文件之后才可能被操作系统加载执行。如果在加载的过程中,程序的地址都是绝对的物理地址,那么程序就必须放在一个固定的地方,那么拥有两个相同地址的程序就只能运行一个了。 于是,分段机制就产生了。让CPU通过 段基址: ... 阅读全文 »
二. 编写mbr,让机器启动起来 发表于 2018-04-09 | 更新于 2018-12-09 | 分类于 kernel mbr简介大家都知道,在我们按下电脑电源的时候,首先启动的BIOS(基本输入输出系统),那么BIOS又是如何被启动的呢,谁来唤醒他呢,它又在何处运行呢。要了解这些的话,首先得介绍一下我们实模式的内存布局 实模式的内存布局 图中的内容我们现在只需要关注红色框出来的地方,可以看到BIOS的入口地址处只有 ... 阅读全文 »
一. bochs环境部署 发表于 2018-04-09 | 更新于 2018-12-17 | 分类于 kernel 配置要求一台linux操作系统的机器即可,最好是32位的。因为我们实现的小kernel是32位的,在64的机器上进行编译和链接可能会出现某些问题。笔者这里使用的是Ubuntu16.4 环境配置bochs安装与配置安装我们自制的操作系统也是运行在一个虚拟机中的,这里我们用的是bochs,bochs本身 ... 阅读全文 »
从零开始,打造自己的STL(五、deque) 发表于 2018-03-29 | 更新于 2018-12-09 | 分类于 STL deque简介deque是双向开口的连续线性空间,支持内部元素的随机访问。看到这个概念,相信大家一定会想起vector,vector是单向开口的连续线性空间,内部元素也是可以随机访问的。 deque的元素类似这样 那么deque像比于vector的差异在哪里 deque的头部插入是vector没 ... 阅读全文 »
从零开始,打造自己的STL(四、list) 发表于 2018-03-21 | 更新于 2018-12-09 | 分类于 STL 简述在前面我们看了vector的实现之后相信对容器有了一定的认识。容器即为存放物件之所,它代表着一块空间。想要直观的了解一个容器,那么看懂他的空间分配策略是一个非常有效的入手方式。接下来我们就来看看STL中的list又是如何实现的吧。 list的结构list就是我们常说的链表,说到链表相信大家就很熟 ... 阅读全文 »
从零开始,打造自己的STL(三、alloc) 发表于 2018-03-20 | 更新于 2018-12-09 | 分类于 STL 简述在stl中,所有的内存分配与释放都是交由allocator来实现的。在大部分情况下,我们都接触不到这里面的内容,因为它一直是隐藏在幕后悄悄的工作。 当然如果对于内存分配有特殊的要求的话,STL也提供了接口供我们使用自己的分配器 比如在vector的定义上1234template < ... 阅读全文 »
从零开始,打造自己的STL(二、vector) 发表于 2018-03-03 | 更新于 2018-12-09 | 分类于 STL vector的内存布局以及操作方式与array非常的类似,都是一段连续的内存空间。两者之间唯一的差距就是空间运用的灵活性。array的空间在配置好了之后就无法更改,它所存放的数据量是固定的,一但空间不够用之后需要重新配置一块更大的空间。vector则不然,它的内存空间会随着元素的加入自动扩充新的空间 ... 阅读全文 »
从零开始,打造自己的STL(一、简述) 发表于 2018-03-01 | 更新于 2018-12-09 | 分类于 STL 简介对于每一个热爱c++的人来说,STL都是他们日常撸码、高效工作的必定会使用到的标准模板库。STL取用范型的思想,通过模板元编程,去掉了不同型别所带来的差异性,极大的提高了代码的复用性。 既然STL如此强大与方便,我们当然要好好的学习它啊。仅仅停留在使用层面是是远远不够的,我们必须深入到代码内部, ... 阅读全文 »