摘要:
> 主要是关于标准库容器的整理 # 空间配置器 主要看SGI的实现,有两个空间配置器 - _malloc_alloc_template - __default_alloc_template 用户可以选择单独使用第一个分配器,或者一起使用两个分配器。 当用户选择使用两个分配器时,编译器会分别将上述两个 阅读全文
摘要:
# C++基础语法 ## 基本数据类型的大小 不同编译器的内置类型大小不同,比如指针类型,同是x86-64的CPU,g++的指针大小为8,visual的指针大小为4,minGW指针大小为8 C++标准只保证基本数据类型有一个最小大小: [图源](https://www.learncpp.com/cp 阅读全文
摘要:
# C++对象模型 主要参考资料: - 【1】《深入理解C++对象模型》,这本书的内容值得学习,但是没有讲解常用的现代编译器的做法,只给一个理论框架。而且知识点散乱,难以整理和回顾。你可以继续看看【5】这本书 - 【2】[学习使用GDB来观察C++对象模型](https://www.cnblogs. 阅读全文
摘要:
# 从内核到C++应用 关于C++内存管理方面的面试题有很多,但是这些问题的答案不能仅靠学习C++就能得出比较全面的答案 ,它还涉及C运行库和内核的方方面面。 本文给自己理一下思路,并在最后尝试回答几个常见的关于C++内存管理方面的面试题。 如果在linux开发环境下,整个系统的不同层级有着不同的内 阅读全文
摘要:
# JOS中的锁 JOS中只有自旋锁,用于大内核锁的实现: ~~~c static inline void lock_kernel(void) { spin_lock(&kernel_lock); } ~~~ 自旋锁结构如下: ~~~c struct spinlock { unsigned lock 阅读全文
摘要:
# MIT6.828_JOS进程切换 ## 进程状态 JOS共有5种进程状态: ~~~c enum { ENV_FREE = 0, ENV_DYING, ENV_RUNNABLE, ENV_RUNNING, ENV_NOT_RUNNABLE } ~~~ 我个人觉得`ENV_FREE`这个状态其实不算 阅读全文
摘要:
MIT6.828_JOS IPC(进程间通信) 进程间通信是微内核的重要组成部分,是JOS文件系统的前提,因此先来看一下JOS的IPC实现。 两个进程间通信的消息可以只是一个32位的整数,也可以使用一整个页作为消息载体。无论哪一种,都需要我们在 struct Env中额外添加下面这几个属性: str 阅读全文
摘要:
# MIT6.828_JOS进程创建 有关进程的内容有很多,本文先理清JOS进程相关的数据结构,JOS怎样创建进程,JOS的第一个进程做了写什么。 ## 进程相关数据结构 与xv6系统`struct proc`结构类似,JOS系统有一个`struct Env`作为进程控制块(PCB)。 顺带一提,l 阅读全文
摘要:
# MIT6.828_JOS中断与系统调用 ## 异常、中断、系统调用 异常和中断都是指"受保护的控制转移方法",都会使处理器从用户态转移为内核态 按照intel的定义,异常和中断的区别为: 中断是用来处理CPU外部的硬件请求(比如键盘、鼠标等),异常则用来处理CPU在执行过程中自己遇到的错误(比如 阅读全文
摘要:
# MIT6.828_JOS内存管理 内存管理有两个部分 - `物理内存`分配器, 以 4KB为一个页面进行管理 - 虚拟内存的管理 JOS`机器实际物理内存的大小是128MB`,JOS以4KB一页将其分为 32768个物理页。 ![image-20221020200629806](https:// 阅读全文