BUAA-OS Lab2 实验笔记
继上一篇,我们已经跳转到了init/init.c中的mips_init函数,即内核初始化的入口点,一起回顾一下:
123456789101112#ifdef MOS_INIT_OVERRIDDEN#include <generated/init_override.h>#elsevoid mips_init(u_int argc, char **argv, char **penv, u_int ram_low_size) { printk("init.c:\tmips_init() is called\n"); // lab2: //mips_detect_memory(ram_low_size); //mips_vm_init(); //page_init();}#endif...
CMU 14-445 Project#0(2024 Fall) C++ Primer
Lab0 C++ PrimerPrimer
写在开头
首先致谢CMU-db无私将这门质量极高、资源极齐全的数据库课程,以及相关基础设施(GradeScope,
Discord)和课程资料(Lectures, Notes,
Homework)完全开源,让一个在本科数据库课程上只学会了抽象理念和SQL语句的孩子,能踏上一条自学之路(手动狗头)
其次,感谢CS自学指南,将计算机领域的众多好课分享给我们.
本专题将详尽地记录2024 Fall对应Lecture和Lab的学习经历.
课程链接
课程主页:https://15445.courses.cs.cmu.edu/fall2024/
Discord:https://discord.com/channels/724929902075445281/752529819148877904
Gradescope:https://www.gradescope.com/courses/817458
Entry Code: WWWJZ5 (学校记得改成CMU) > In exchange for
making this...
C++面向对象程序设计
本篇隶属C++ Primer中类设计工具专题,当前集中于面向对象程序设计。 #
什么是面向对象编程?
在面向对象编程(缩写为OOP)中,重点是创建程序定义的数据类型,这些数据类型既包含属性,也包含一组定义明确的行为。OOP中的“对象”一词,是指我们可以从此类类型中实例化的对象。
面向对象编程的核心理念是:数据抽象,继承和动态绑定。
继承
概述
基类:位于层次关系中的根部,定义所有类共同的成员变量和成员函数;
派生类:通过继承自动接收基类的成员函数和成员变量;可添加想要的其他函数或成员变量。
类派生列表:明确指出当前派生类是从哪个基类继承而来,示例:
1234class Bulk_Quote : public Quote{ // Bulk_Quote继承Quote public: double net_price() const override;}
定义基类和派生类
定义基类
12345678910111213141516class...
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...