04 2014 档案

通用双向链表C实现
摘要:注意: 1.封装函数,使用者不需要要了解底层细节,我们把内部使用的函数用static 声明. 2.我们存储的数据类型为void *, 由用户决定函数类型 3.代码尽可能减少代码量#ifndef DLINK_H#define DLINK_H//用户应该只操作Dlink,避免操作节点.不需要了解细... 阅读全文

posted @ 2014-04-14 22:25 敷衍。 阅读(493) 评论(0) 推荐(0)

回调函数
摘要:当我们的代码量比较大的时候,需要思考一个问题,是否需要合并重复代码. 这里用链表举例.比如:我们有两个需求 1.求和 2.求最大值 对于链表来说,这两个函数均会遍历链表,那么我们可以把遍历链表的方法提取出来,因为这个方法很常用,我还可以用来排序的时候用,所以如果我有很多函数用到遍历的... 阅读全文

posted @ 2014-04-14 22:04 敷衍。 阅读(396) 评论(0) 推荐(0)

函数指针
摘要:首先,需要说明的是,一个函数名代表的是一个地址,即一个函数的首地址。 知道了这一点便很容易理解函数真正的意义了。 void Fun( int a );void main() { int (*pFun)(int); //这里定义了一个函数指针pFun pFun = Fun; //这里传值,可以任意形式如 pFun =&Fun,之类的,最后编译器都会认为是一个地址 (*pFun)(2); } void Fun( int a ){ return;} 接着,我定义出一种函数指针类型,方便我操作,比如我可以这样定义我的类型... 阅读全文

posted @ 2014-04-11 16:30 敷衍。 阅读(124) 评论(0) 推荐(0)

内核引导的捷径(grub2安装到U盘,虚拟镜像等方法)
摘要:对于之前我们制作好的内核文件,我们还需要下面三个步骤一:制作镜像二.安装grub2三.启动这里不描述U盘如何安装了,如果你能掌握制作虚拟镜像的方法,自然U盘不在话下了,只需修改一下有些步骤即可完成了.这里所有的步骤都是在UBUNTU 下完成的,其他linux命令稍有不同,本人没有安装其他版本的linux 也就没有实验过,不过你可以参考我的思路,然后修改修改命令,你的制作文档就完成了.一 制作虚拟设备镜像,这里我们模拟一个U盘1 产生虚拟镜像方法一:DD工具创建镜像 dd if=/dev/zero bs=512 count=20480 of=a.img*方法二:(需要安装BOCHS,当然还有各种 阅读全文

posted @ 2014-04-11 11:37 敷衍。 阅读(2268) 评论(0) 推荐(0)

内核引导的捷径(代码)
摘要:上一篇讲完简述了利用grub内核引导的流程.下面就是代码时间了.首先来看boot.S,规范上提供了范例代码,这里用NASM语法改写global loader ; making entry point visible to linkerextern kmain ; 这是kernel的入口函数 global start,_start ;默认的链接入口地址 MODULEALIGN equ 1<<0 ; align loaded modules on page boundaries... 阅读全文

posted @ 2014-04-11 11:10 敷衍。 阅读(433) 评论(0) 推荐(0)

内核引导的捷径(准备工作)
摘要:在制作操作系统的过程中,首先的第一步就是要加载内核,但是加载内核又涉及到一个很长的话题. 曾经做过一个FAT32文件系统下加载内核的一整段汇编代码,感觉到这样写代码万分有压力,而且这方面的东西,太过底层,甚至上说和操作系统没有什么直接的关系. 所以,为了简化这步骤,我们利用上一个很强大的加载器,grub2. 如何用grub2等引导程序去引导我们制作的内核呢? 这里给出一个答案:我们必须受到一些约束才能完成这些工作,关于这个约束就是multiboot规范(当然还有别的解决办法) 接下来,我们开始用grub2+multiboot来引导我们的简易操作系统内核. 首先,还是介绍一下大致... 阅读全文

posted @ 2014-04-10 23:32 敷衍。 阅读(445) 评论(0) 推荐(0)