FreeNOS学习笔记二(阅读)

本文围绕FreeNOS开源项目展开,它是用C++编写的操作系统微内核。介绍了查看源码的方法,包括通读和详读的要点,还说明了根目录下各文件夹及部分文件含义。此外,讲解了涉及的C++知识,如纯虚函数、虚函数等,最后给出学习知识点的相关地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FreeNOS简介:

FreeNOS是github上一个开源项目,该项目是用C++写的一个操作系统微内核,各种宏内核中的服务作为一个独立的services在微内核中,基于消息的通信方式,该项目代码风格良好,完全基于面向对象,还有常见的设计模式,良好的注释,doxygen,scons。对深入理解操作系统以及代码习惯风格的养成很有帮助。

关于如何看:

  • 通读:建议参照文档查看,附文档地址: http://www.freenos.org/doxygen/

  • 详读:从FreeNOS/kernel/intel/pc/Main.cpp开始看(不要太关注如何装载内核等等,更多的关注代码风格,常用函数实现等等)

根目录下文件含义

  • bin文件夹:封装的是一些常用命令,如ls、cat等等,想让内核运行成功,再细看这些功能的实现。
  • config文件夹:配置文件。
  • kernel文件夹:重中之重,内核文件,从这里开始看。
  • lib文件夹:标准库,分配器、仿真库、posix标准等等;知道文件实现了哪些功能,然后了解相关函数接口,有空回头详细看,由整体到部分的过程。
  • server文件夹:提供相应的服务,网络、序列化、终端等等,还没仔细看…
  • support文件夹:工具依赖,doxygen与scons。

1、Main.cpp:

  • 初始化堆Kernel::heap()函数,启动内核调试串行控制台(生成IntelSerial对象,调用setMinimumLogLevel()函数),构造函数(constructors()),创建并运行内核(生成IntelKernel()对象,运行run()函数)

2、Kernel类(继承于单例类):类API,分体式分配器,int控制器,计时器

  • 数据结构:CPU状态

  • 所包含的函数:中断处理程序,中断钩子处理,内核堆,获取物理内存分配器,获取进程管理,API,获取内存上下文,获取核心信息,获取计时器,执行run(),硬件中断处理,函数挂接处理硬件中断,执行中断处理程序,装载boot镜像,装载boot程序。

3、InterKernel类继承于Kernel类:

  • 功能:X86兼容,Intel内核陷阱(trap),执行内核陷阱,CPU检测到故障时调用,系统时钟中断处理程序,实例PIT计时器,实例APIC,实例PIC。

4、Allocator类:(分配器)分配器地址对齐,子类:BitAllocator,BubbleAllocator,PageAllocator,PoolAllocator,
SplitAllocator。

涉及的部分C++知识:

1、纯虚函数与虚函数:

  • 虚函数:父类中提供虚函数的实现,为子类提供默认的实现,子类可以重写父类中的虚函数。

  • 纯虚函数:C++中包含纯虚函数的类称之为"抽象类",父类不提供实现,由子类实现。

2、虚构函数:

  • 虚构函数在以下三种情况时,会被调用:(1)实例化对象的生命周期结束销毁时。(2)delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类虚构函数是虚函数时。(3)对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。

  • 虚函数的调用顺序是子类先调用,父类后调用,多继承时,后继承的先调用。

  • 如果父类的析构函数不加virtual关键字 :子类继承父类,父类的指针指向子类时,delete掉父类的指针,只调动父类的析构函数,而不调动子类的析构函数。 如果父类的析构函数加virtual关键字 :子类继承父类,父类的指针指向子类时,delete掉父类的指针,先调动子类的析构函数,再调动父类的析构函数。

  • 注:若类中存在成员变量类时,会先调用该类的的析构函数,然后再接着调用成员变量类的析构函数。

3、可以直接使用"类名.静态成员名"访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存。

学习出现的知识点部分地址

未完待续~(这个工程还是有点大)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值