自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

翻译 《General overview of AMD SEV-SNP and Intel TDX》中文翻译

如今,软件公司正越来越多地将其应用程序迁移到云环境中,而不是在本地托管。这可能会对机密用户数据构成风险,因为云服务提供商(CSP)可以直接访问运行潜在安全关键应用程序的硬件。可信执行环境(TEEs)提供了一种安全执行代码的方式,而不会将敏感数据泄露给恶意行为者。此前,TEEs 是通过 Intel SGX 实现的。然而,SGX 的工作原理是将应用程序划分为由安全飞地(enclave)保护的可信部分和正常运行的不可信部分。

2025-02-10 23:01:34 123

原创 将D盘空间划分给C盘

前段时间换了刚刚换了新的机械革命的笔记本,发现拿到手时磁盘已经预先分好了区,但是 C 盘(系统盘)只分了 200 GB。在装了 WSL 等一些必备的环境后,就只剩下不到 100 GB,感觉很没有安全感(😩),于是就想办法给 C 盘划分更多的空间,以下是一些经验分享。more。

2025-02-03 19:50:01 542

原创 CSAPP Malloc Lab

本 Lab 需要实现一个内存分配器,技巧性较强,对应知识点为书中的第 9 章的第 9.9 节。个人认为是所有 Lab 中难度最高的一个,我这里也是时间所迫,只参照教材实现了隐式空闲链表,显式空闲链表的实现尚存在一些 bug,在本文暂不介绍。more。

2025-01-11 10:54:21 895

原创 CSAPP Shell Lab

本 Lab 需要实现一个简易的 shell,主要考察对进程和信号的理解,以及对与其相关的 POSIX API 的使用,对应知识点为书中的第 8 章内容。more。

2024-12-30 15:39:07 1025

原创 CSAPP Cache Lab

本 Lab 主要考察对计算机高速缓存(Cache)机制的理解,以及如何针对 Cache 进行程序的优化,对应知识点为书中的 6.4 ~ 6.6 节内容。more。

2024-12-20 21:52:39 862

原创 CSAPP Attack Lab

个人感觉非常有意思的一个 Lab,涉及的知识面比较窄,主要关注这一个方面,并基于此进行代码攻击,体验一把做黑客的感觉,对应知识点为书中的 3.10 节内容。more这个 Lab 上手便给了我当头一棒,在环境配置上琢磨了好一阵。直接运行,程序没有让进行输入,而是直接触发了段错误,后来尝试在跑在学校的 Linux 服务器上得以正常运行,原因不明,推测是 WSL 的锅??

2024-09-25 17:39:29 1347

原创 CSAPP Bomb Lab

本 Lab 可以说是 CSAPP 的几个 Lab 中最为人津津乐道的一个,对应知识点为书中的第 3 章(程序的机器级表示),要求使用 GDB 调试器,对汇编语言进行调试,从而得出正确的“拆弹密码”。共分为 6 个关卡和一个隐藏关卡,每个关卡都分别考察了一种语法结构或数据结构的汇编表示,部分关卡逻辑比较复杂,要求对 x86 汇编有一定的熟悉度。

2024-09-19 15:05:21 1055

原创 CSAPP Data Lab

tags:- 计算机基础- 位运算- 经验categories: 计算机基础CSAPP 的第一个 Lab,对应知识点为书中的第 2 章(信息的表示与处理),要求使用受限制的运算符和表达式实现一些位操作。主要分为两个部分:整数部分和浮点数部分。其中整数部分限制较多,比较偏重技巧性,部分题个人认为很有难度。而浮点数部分则比较基础,主要考察对 IEEE 754 标准的熟悉程度,代码较长,但思路相对简单。more。

2024-09-01 15:37:47 1096

原创 MIT6.s081 2021 Lab File system

xv6 文件系统的 inode 中地址域addrs[]由 12 个直接地址和 1 个一级间接地址组成,本实验要求将地址域更改为 11 个直接地址、1 个一级间接地址和 1 个二级间接地址组成,以支持更大文件的存储。代码的实现有了直接地址和一级间接地址做参考,就很简单了,直接查看代码部分即可。

2024-08-16 19:37:49 608

原创 MIT6.s081 2021 Lab Multithreading

xv6 已经实现了进程的切换机制,本实验要求参考进程的切换,实现一个用户态线程的切换。要实现线程切换,必然涉及上下文,即寄存器的保存和恢复,那么需要保存哪些寄存器?实际上,只需要保存被调用者保存寄存器(callee-saved registers),而实现调用者保存寄存器(caller-saved registers)的保存与恢复的代码由编译器自动生成。关于调用者保存与被调用者保存寄存器有哪些可以参照下述 RISC-V 的 calling convention:另外,根据的注释,最后通过ret。

2024-08-14 16:25:27 823

原创 MIT6.s081 2021 Lab Copy on-write

xv6 使用fork()系统调用创建子进程时,需要将父进程的地址空间进行,即将页表和实际物理空间同时进行拷贝,以实现父进程和子进程地址空间的独立性。但很多时候,如 shell 程序,fork()通常与exec()搭配使用,首先使用fork()创建子进程,随后在子进程中使用exec()将指定的程序加载到当前地址空间,这样在fork()中进行的地址空间拷贝就白白浪费了。本实现要求实现一个写时复制(copy-on write)的fork()系统调用。

2024-08-13 17:59:28 980

原创 MIT6.s081 2021 Lab Traps

此时。

2024-07-07 16:14:19 1037

原创 MIT6.s081 2021 Lab Page tables

题目要求在每个进程初始化时为它的页表插入一个页表项,内核通过这样预先缓存页表项的操作,来加速特定系统调用的执行速度。遍历空闲链表,寻找一个可分配的物理页面。若找到,返回该页面的首(物理)地址;否则,返回 0 (空指针)。释放已分配的首地址为pa的物理页面,并更新空闲链表。遍历进程数组proc,寻找未被使用的。若找到,则初始化其状态,为创建一个新的,并返回指向它的指针;否则,返回 0(空指针)。释放与进程p相关的数据的内存空间,并清空p的的所有信息。在页表pagetrable中创建从起始虚拟地址va。

2024-07-01 15:21:38 1008

原创 MIT6.s081 2021 Lab System calls

不同于 Lab1 利用已实现的系统调用来实现一些用户态下的命令行程序,本 Lab 是要在内核层面实现一些系统调用。这其中难免涉及到一些对内核数据结构的操作,以及处理器体系结构(本系列 Lab 基于 RISCV)相关的内容,那么首先有必要梳理一下 xv6 下系统调用的实现过程。tracetrace:这是一个Perl脚本的“shebang”行,指定使用解释器执行此脚本,并开启警告(-w)选项。:打印注释说明此文件是由usys.pl脚本自动生成的,不应手动编辑。:输出一条预处理器指令,包含一个名为。

2024-06-27 11:51:03 724

原创 MIT6.s081 2021 Lab Utilities

按照示例切换到util分支后,看到目录下包含Makefile文件,执行make qemu即可。

2024-06-24 21:09:17 1166

原创 OSTEP Projects:KV

本文将介绍操作系统导论(Operating Systems: Three Easy Pieces)作者所开源的操作系统相关的 KV 部分,包含个人的代码实现和设计思路。more。

2024-05-10 21:20:47 489 2

原创 OSTEP Projects:Reverse

本文将介绍操作系统导论(Operating Systems: Three Easy Pieces)作者所开源的操作系统相关的 Reverse 部分,包含个人的代码实现和设计思路。more。

2024-05-06 19:55:48 475

原创 OSTEP Projects:Unix Utilities

本文将介绍操作系统导论(Operating Systems: Three Easy Pieces)作者所开源的操作系统相关的 Unix Utilities 部分,包含个人的代码实现和设计思路。more。

2024-05-04 18:30:59 573

原创 高效的区间二叉搜索树:线段树

与树状数组类似,线段树也是一种用来维护区间信息的数据结构,可以在对数时间复杂度内实现更新和查询等操作。但相较于树状数组多用于前缀和查询不同,线段树的应用范围更为广泛,例如区间最值等问题,代价是需要消耗更多的存储空间。more。

2024-03-18 14:57:54 486

原创 动态前缀和数组:树状数组

前缀和是一种常见的算法思想,能够实现在常数时间复杂度下得到某个子区间内所有元素和。以一维数组 nums 为例,定义前缀和数组 preSum,preSum[i]表示 nums 前 i 个元素的和,利用动态规划的思想,易得的递推关系,因此构造一个前缀和数组的时间复杂度为 O(n),而查询前 i 个元素的和只需查询preSum[i]的值,为常数时间。

2024-03-04 15:22:09 923

原创 从机器指令的角度看一些位级操作

C/C++ 中有时会遇到一些位级操作,通常是一些隐式的类型转换,它们往往很难凭借高级语言层面的直觉来理解或记忆。本文旨在分析这些操作对应的汇编代码,从机器指令的角度来理解这类操作。more。

2024-01-19 21:52:05 479

原创 二分搜索的几种写法与常见问题

最近在比赛和刷题的时候经常遇到二分答案的题,但时不时会因为一些细节上的错误而浪费时间,本文旨在整理常见的二分搜索的写法、二分搜索可能会遇到的一些小问题,以及C++中与二分搜索相关的库函数,以免今后再犯类似的错误。

2023-09-18 11:58:13 379

原创 算法分析与设计编程题 回溯法

中搜索状态,每种状态下需要 O(n) 时间来进行最优解的更新,因此两种算法的渐进时间复杂度都为 O(n * 2。(n 为被搜索对象的数目,在本例中为货物的总数)。由于递归回溯的本质可以看作是对一棵二叉树进行的搜索,每次选或者不选都将产生两个分支,那么所有情况的数量为 2。有没有被选择,通常用 1 代表被选择,0 代表不被选择。,关注它的 n 位二进制形式,其中 mask 的第 i 位二进制位就代表对应的货物。了,可以遍历 0~n-1 的所有整数 i,并将其右移 i 位,将。事实上,对于此类涉及。

2023-09-14 22:19:37 254

原创 算法分析与设计编程题 贪心算法

/ 顶点数组// 邻接矩阵。

2023-09-14 22:16:04 765 1

原创 算法分析与设计编程题 动态规划

intint。

2023-09-14 22:13:18 270

原创 算法分析与设计编程题 递归与分治策略

【代码】算法分析与设计编程题 递归与分治策略。

2023-09-14 22:09:52 227

原创 常见排序算法

【代码】常见排序算法。

2023-09-09 22:25:07 101

原创 王道数据结构编程题 查找

以下为本文解题代码的二叉树定义。

2023-09-09 22:23:58 198

原创 王道数据结构编程题 图

已知无向连通图 G 由顶点集 V 和 边集 E 组成,当 G 中度为奇数的结点个数为不大于 2 的偶数时,G 存在包含所有边且长度为 |E| 的路径(称为 EL 路径),假设图采用邻接矩阵存储。分别采用基于深度优先遍历和广度优先遍历算法判别以邻接表形式存储的有向图中是否存在由顶点 vi 到顶点 vj 的路径(i ≠ j)。假设图用邻接表表示,设计一个算法,输出从顶点 vi 到顶点 vj 的所有简单路径。写出图的深度优先搜索 DFS 算法的非递归算法(图采用邻接表形式存储)。

2023-09-09 22:23:23 197

原创 王道数据结构编程题 二叉树

以下为本文解题代码的二叉树定义。

2023-09-09 22:22:45 745 1

原创 王道数据结构编程题 栈和队列

假设 I 和 O 分别表示入栈和出栈操作,栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由 I 和 O 组成的序列,可以操作的序列称为合法序列,否则称为非法序列。编写一个算法,判定所给的序列是否合法。若合法,返回 true,否则返回 false.

2023-09-09 22:21:54 280

原创 王道数据结构编程题 链表

以下为本文解题代码的链表定义。

2023-09-09 22:19:59 209

原创 王道数据结构编程题 顺序表

从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

2023-09-09 22:18:40 167

原创 有关C++字符串拷贝的一个小问题

最近面试被问到了一个 C++ 中的小问题,就是如果有字符串 s1 和 s2,将 s1 赋值给 s2 后,它们的内存分布是什么样的。当时感觉可能是共享的,但也不太确定,回来后查阅资料发现结果并不是那么简单。more。

2023-04-04 16:49:37 187

原创 计算机基础面试题总结

大端和小端是指在多字节数据类型的存储方式中,高位字节和低位字节的存储顺序。大端模式是指高位字节存储在低地址,低位字节存储在高地址;小端模式是指低位字节存储在低地址,高位字节存储在高地址。死锁是指两个或多个进程在执行过程中,因争夺资源而造成的一种僵局,若无外力作用,它们都将无法继续执行下去。分段是将程序分成若干个逻辑段,每个段可以包含一个模块或若干个模块,每个段的长度是不固定的,每个段都有一个段名和段长,段名是一个符号,段长是指该段所包含的字节数。

2023-04-04 16:48:07 857

原创 C++面试题总结

野指针是指指向不可用内存的指针,可能会导致内存泄漏和程序崩溃。const 定义的常量是变量,带有数据类型,而 define 定义的常量是预处理器替换的文本,不带数据类型。const 定义的常量在编译运行时起作用,可以进行调试,而 define 定义的常量在预处理阶段起作用,不能进行调试。const 定义的常量可以进行作用域限制,而 define 定义的常量没有作用域的概念。const 定义的常量可以进行类型检查,而 define 定义的常量不能进行类型检查。

2023-03-24 12:41:48 591

原创 C++中的静态(static)

一般来说,C++ 中的 static 关键字具有不同的含义,而这取决于它的使用场景。

2023-03-06 22:30:44 342

原创 用DFS解决最终幻想13-2时钟谜题

一个简单的DFS问题

2022-08-08 21:52:36 486

原创 Ping命令的实现

Ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。本文将基于 Socket 编程,实现一个基本的 Ping 命令程序。

2022-06-03 09:43:13 2207 7

原创 使用遗传算法解决旅行商问题

遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。本文利用遗传算法解决经典的NP问题——旅行商问题,并加深对该算法的理解。问题描述有若干个城市,每个城市给定一个坐标,一个旅行商需要经过每个城市各一遍且不能重复经过城市,起点可以任意选择,求旅行商经过所有城市的总距离的最小值及其最

2022-05-26 12:57:23 7376 13

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除