- 博客(29)
- 资源 (3)
- 收藏
- 关注
原创 3.Default Constructor的构造操作
如果一个class没有任何的constructor,但是它内含一个member object,而后者有一个default constructor,那么这个class 的implicit default constructor就是nontrivial,编译器需要为该class合成一个default constructor。例如如下的代码,代码中A,B,C均需要合成一个default constructor,并在里面安插那些“允许每一个virtual base class的执行期存取操作”的代码。
2024-08-18 11:01:12
646
原创 1. C++对象模型简介
为什么C++可以“自动完成”这么多事情,多态的底层实现是什么样子的,理解了C++的对象模型后,可以写出比较没有错误且比较有效的代码。
2024-08-02 08:57:52
968
原创 ucoreOS操作系统博客导航栏
跟着清华大学的学堂在线公开课,对操作系统的原理和实验有了更加深刻的理解。回顾自己2年来从不懂实验的基本的宏定义,到能用预编译指令展开宏,从代码深奥无比,支离破碎的理解,到能全局的理解一个或多个实验。其中最值得肯定的是走了一条正确的道路,即理论加实验学习,尤其提高实验的投入时间。其次,清华大学的操作系统学习是一门十分的系统课程,有利于提高系统思维。
2024-04-03 07:50:13
536
原创 实验二 物理内存管理-实验部分
在X86系统中,正好支持分段和分页这两种机制。将逻辑地址转换成线程地址空间的过程,称为分段,而将线性地址转换成物理地址空间的过程称为分页。分段和分页的过程如下图所示。图3-1 分段和分页分段提供一种划分处理器地址内存空间成更小的保护地址空间,这种地址空间称为段。段可以用来维持一个程序的代码、数据、堆栈。或者用来维持一个系统的数据结构,如TSS、LDT。
2024-02-17 12:33:33
1066
2
原创 实验五 用户进程管理-实验部分
由于进程的执行空间扩展到了用户态空间,且出现了创建子进程执行应用程序等与lab4有较大不同的地方,所以具体实现的不同主要集中在进程管理和内存管理部分。在内存管理部分,与lab4最大的区别是增加了用户态虚拟内存的管理。为了管理用户态的虚拟内存,需要对页表的内容进行扩展,能够把部分的物理内存映射成用户虚拟内存。如果某进程执行的过程中,CPU在用户态下执行,则可以访问本进程页表描述的用户态虚拟内存(如下代码的cr3),由于权限不够,不能访问内核态虚拟内存。
2023-12-24 14:54:53
173
原创 Lab5用户进程管理内存布局解析
关于用户进行内存布局,最重要的是代码段、数据段、调试段的符号地址。这些地址在链接器的控制下,给定symbols table。其中ENTRY(kern_entry)规定加载器的加载地址,其中. = 0xC0100000;规定bin/kernel的内存布局起始地址,其中symbol table中的地址顺序是依靠实际链接目标文件顺序。在bin/kernel中有三类数据段,分别是.rodata、.data、.bss。最让人分不清的是.data和.bss的区别。
2023-10-29 10:42:22
192
原创 实验四 内核线程管理-实验部分
进程是指具有一定独立功能的程序在一个数据集合上的一次动态执行过程。每一个进程都有它独立的main函数,独立的功能。每一个进程都在自己的内存空间执行,这个内存空间就是数据集合。每一个进程都在CPU上的一次动态执行,这个动态执行依靠的是进程在CPU上的并发执行。lab2和lab3完成了对内存的虚拟化,但整个控制流还是一条线串行执行。lab4将在此基础上进行CPU的虚拟化,即让ucore实现分时共享CPU,实现多条控制流能够并发执行。
2023-10-03 21:42:02
288
原创 实验六 调度器-实验部分
本章介绍调度器涉及的核心知识点以及进程调度器设计的目标进程的生命周期的角度看,、切换、退出属于操作系统课程的第5个实验的重要内容。本章继续从进程的生命周期角度出发,对进程调度进行设计与分析。
2023-07-29 21:43:32
1020
原创 实验八 文件系统-实验部分
针对ucore的实验八--文件系统,本文从两个方面进行详细的介绍。一是文件系统所涉及的核心知识点。二是针对实验,详细解读实验的如何设计和思考的。
2023-07-02 20:06:39
1353
原创 0. C语言中可变参数打印代码解读
可变参数打印使用C语言的同学都知道,C语言的打印函数printf();是可以打印可变参数的,比如:printf("hello world!My name is %s,I am %d years old\n","Jack",98);printf("hello world!My name is %s\n","Jack");对于计算机程序来说,总是一行行执行代码,对于C语言来说,可变参数是如何实现的呢?可变参数实现的知识点对于可变参数的实现,首先是函数调用栈的入栈顺序,以及基于栈的参数寻.
2022-04-22 19:31:15
2910
原创 C++编译报错有迹可寻
1. 什么是编译1.1. 计算机程序设计语言的三个层次在计算机系统中,主要有三种层次的语言,他们是机器语言、汇编语言、高级语言。机器语言是可以被计算机理解的语言,计算机只能理解01二进制序列,但是机器语言特别难记。汇编语言在机器语言的基础上引入了助记符,方便记忆一些,但是要熟悉目标机器的指令特点,使用效率低,对人要求高。正是如此引用高级语言,高级语言采用类似数学定义或者自然语言的简洁形式,接近人的习惯并不依赖特定机器。图1 -1计算机程序设计语言的三个层次1.2. 三种语言的关系
2022-03-22 16:01:48
2801
原创 光刻工艺公开资料汇总:
[1]韦亚一,超大规模集成电路先进光刻理论与应用[M],科学出版社,2016[2]王向朝,集成电路与光刻机[M],科学出版社,2020[3]伍强,衍射极限附近的光刻工艺[M],清华大学出版社,2020[4]马科斯.波恩,光学原理(光的传播、干涉和衍射的电磁理论)(第7版)[M],电子工业出版社,2016[5]王向朝,光刻机像质检测技术(上下册)[M],科学出版社,2021[6]李金龙,ArF浸没光刻双工件台运动模型研究[D],中国科学院大学,2013[7]刘晓林,浸没式ArF光刻机物镜的光学设计
2022-02-13 18:35:49
2624
4
原创 C++中容器存放堆内存动态数据
1.通过C++的析构函数,自动释放堆内存数据,达到内存自动释放的目的。2.通过C++的拷贝构造函数,容器中的数据属于深拷贝,完成对象自动申请内存与自动释放内存。3.通过重载赋值运算符,完成两个对象之间的赋值规则制定。#include <iostream>#include <vector>using namespace std;class Message{public: //默认构造函数 Message() { data
2021-12-29 23:18:04
928
2
原创 物理内存管理-ucore操作系统的PADDR宏
PADDR宏在pmm.c文件中的pmm_init(void)函数中会有如下奇怪的宏定义用法,以前从未见,PADDR完成了去除内核的虚拟起始地址,这个宏是如何工作的?
2021-03-14 16:09:10
587
原创 多线程-H2O生成
H2O生成现在有两种线程,氧 oxygen 和氢 hydrogen,你的目标是组织这两种线程来产生水分子。存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。氢和氧线程会被分别给予 releaseHydrogen 和 releaseOxygen 方法来允许它们突破屏障。这些线程应该三三成组突破屏障并能立即组合产生一个水分子。你必须保证产生一个水分子所需线程的结合必须发生在下一个水分子产生之前。换句话说:如果一个氧线程到达屏障时没有氢线程到达,它必须等候直到两个氢
2020-09-29 20:24:25
306
原创 多线程-打印零和奇偶数
打印零和奇偶数要求假设有这么一个类:class ZeroEvenOdd { public ZeroEvenOdd(int n) { ... } // 构造函数 public void zero(printNumber) { ... } // 仅打印出 0 public void even(printNumber) { ... } // 仅打印出 偶数 public void odd(printNumber) { ... } // 仅打印出 奇数}相同的一个 Ze
2020-09-28 23:09:28
772
原创 shell脚本两个文件关键行合并
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2020-08-19 20:15:19
3493
原创 缩短循环码BCH(26,16)编解码原理与二进制算法
1.BCH(26,16)的基本简介BCH(26,16)是一种缩短循环校验码,它的数据位为16位,校验位是10位,码字的长度为26位。BCH(26,16)码取(31,21)循环码中的前5位信息位为0的码字作为码字,构成(21-5)维的线性子空间,它最多能够纠正t=2位错误(,其中m是GF(p^m)中的m,这里的m=5,n=31,k=21)。对于铁路在800M频段上的数据业务,它采用的生成多项式为...
2018-11-29 13:39:31
13933
7
原创 一眼看懂各个物联网平台性能怎么样:loRa、NB-IOT、CC1310
无线低功耗广域网(LPWAN)在国内外蓬勃发展。目前SigFox由于使用超窄带技术虽然是传输距离最远,基站负载设备最多,部署在免费频段上。但是由于其技术及解决方案完全私有,造成在中国推广困难。SigFox 100bps的低速率,网络的延迟更大,相比较NB-IoT、LoRa、CC1310而言吞吐量更低。LoRa采用的是线性扩频技术,可变的传输速率以及更高的发射功率,这便带来了更加长的传输距离。但是有
2017-07-23 12:18:37
9764
2
原创 CCF认证 201612-3 炉石传说
问题描述 《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示)。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游戏的简化规则如下: * 玩家会控制一些角色,每个角色有自己的生命值和攻击力。当生命值小于等于 0 时,该角色死亡。角色分为英雄和随从。 * 玩
2016-12-15 21:40:59
491
原创 CCF认证 201612-2 火车购票
问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。 购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应
2016-12-15 09:05:34
670
H.264视频字节流解析成NALU
2020-08-18
devicetree-specification-v0.2.pdf
2020-06-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人