BUAA-OS Lab1 实验笔记
总前言 操作系统是大二下学期的一门核心专业课,实验部分分为6个实验(Lab1 ~ Lab6)。采用增量式实验设计思想,每个实验包含的内核代码量在几百行左右,并提供了代码框架和代码示例,要求阅读源码、理解机制并补全核心代码。每个实验可以独立运行和评测,最后实现一个可以在MIPS平台上运行的小型操作系统。以此专题,纪念大二下的每个“备受折磨”的日夜,重温操作系统的核心理念。 实验代码仓库位于OS_on_MIPS. 总流程:实验编写的操作系统代码在Linux系统中,通过Makefile组织,通过交叉编译产生可执行文件;再使用QEMU模拟器运行该可执行文件,实现MOS操作系统的运行。 内核与启动 内核是操作系统最核心的部分,负责与硬件直接交互,并为用户进程提供服务。在计算机启动时,内核需要被加载到内存中,但不宜放在磁盘(CPU无法直接从磁盘访问数据)或内存(易失性)中,因此放在一个非易失性存储器中(如ROM或FLASH)。不过,将操作系统直接放入ROM或FLASH会面临以下几个问题: 1. 存储空间限制: ROM或FLASH的存储空间有限,无法存放较大的内核;...
C++标准库:容器、动态内存、同步原语
接上一篇知识。 C++标准库容器 std::vector std::vector 是一种动态数组,可以根据需要自动调整大小,能够存储任意类型的元素。 向向量中添加元素 push_back 和 emplace_back 都用于向向量中添加元素。 emplace_back 通常比 push_back 更高效,因为它直接在内存中创建元素,而不需要先构造一个临时对象然后再移动。 12point_vector.push_back(Point(35, 36)); // 使用 push_back 添加元素point_vector.emplace_back(37, 38); // 使用 emplace_back 添加元素 遍历向量 直接/用下标遍历元素 12345std::cout << "Printing the items in point_vector:\n";for (size_t i = 0; i < point_vector.size(); ++i) { ...
Hello,world!C++中的引用、移动语义、模板、包装类、迭代器和命名空间
前言 Hello,world!今天是2025年3月12日,这是本站的第一篇博客,也是我重新踏上自学CS之路的起点! 回想已流逝的两年半多本科时光,很多课程因为时间紧、任务重,学得像个“快餐式”程序员——知识点匆匆下肚,消化得却不咋样;ppt上的知识点背了一打,实践起来“一问三不知”。猛然发现,自己像个“半成品”,代码写得像“面条”,bug多得像“打地鼠”。 恰逢找到第一个日常实习,初尝真实的工作环境。实习之余决定重启学习,重新修炼“代码内功”。 从哪里开始呢?第一站是C++的基本语法。之前刷算法题时用过C++,每次没有类、没有封装、没有 unit test、没有 Makefile、没有 Git,唯一的优点是它确实能跑,缺点是“能跑”的补集;大三上做过一个4000行代码的Qt小项目,实现简单图像识别与参量的自动化计算(可见:https://github.com/WenLiuyi/fiber_Analysis )现已经成功打包成exe文件,可在Windows系统执行。但那过程简直像“渡劫”——装了几十个 G 的 Visual...