自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 6.S081——CPU调度部分(Xv6中的进程的状态转换)——xv6源码完全解析系列(11)

好了,我们终于可以总结一下进程的各个状态,以及它们的具体含义和转换方式啦,这就当作一个完美的收官吧,Xv6内核中进程相关的状态及其转换关系如下图所示:哎呀,从没想过这篇博客会写这么长,不过这篇文章算是将Xv6中与进程有关的内容彻底收了个尾,也算是可以安心地进入Xv6中最复杂和体量庞大的文件系统了!

2024-06-18 11:11:27 1127 5

原创 2024届秋招小记

但我回顾过去的求学和生活经历,好像那些岁月静好的日子只是点缀,反而那些经历过的一个个挫折,一些伤心和痛苦的经历,一个个解过的bug才是构成我所有认知和个体的“骨架”。企业会收到很多优质的简历,但却无法分清这里有哪些人是真心想来的,只能不断地反复决策,等前面的人放弃了机会再联系排位靠后的人,整个招聘流程变得非常漫长和缓慢,尽管这样的情况一直存在,但海投一定会让事情变糟很多倍。这些留言和问题我都看到了,有关于Xv6系统的博客依然会更新下去,包括繁复冗长的文件系统的代码,我都会写下去的(又开新坑…

2023-10-21 01:53:03 800 4

转载 Embedded Linux Development——Note (2)——字符设备驱动的开发流程

这篇文章是我学习Linux设备驱动开发的笔记,是在阅读正点原子的教程中的摘要,所以版权将会被标记为转载。我们首先梳理一下开发一款字符设备驱动程序的流程,然后在此基础上分析一下最简单的设备驱动程序LED的开发流程。最后作为补充,再加入一些关于新版驱动程序编写的流程。吐槽一下,正点原子的教程,逻辑太乱了,看的时候绕来绕去。假设我们我们已经有了一个字符设备驱动模块,驱动编译完成之后的模块后缀是.ko,有两种方法可以加载驱动模块:insmod和modprobe,它们的基本用法如下:insmod和rmmod是配对的

2023-08-05 16:42:27 514

原创 6.S081——CPU调度部分(CPU的复用和调度)——xv6源码完全解析系列(10)

终于到这里了,我们在之前阅读很多地方的内核代码时,总是习惯性地绕开CPU调度的部分(比如yield函数)。现在我们总算可以深入进去一探究竟了,这次总算是将整个操作系统中的一块重要拼图拼上去了。有操作系统相关基础概念的人应该知道,操作系统的其中一个重要功能是虚拟化(Virtulization)。这是OSTEP(Operating System : Three Easy Pieces,中译名:操作系统导论)提出的操作系统三大主题之一,另外两个是并发(Concurrency)和持久性(Consistency)。虚

2023-07-11 17:04:40 1319 18

原创 6.S081——并发与锁部分(自旋锁的实现)——xv6源码完全解析系列(9)

这段代码还会调用__sync_lock_release函数来原子地对锁进行释放,其实就是将锁的被占用标志原子地置为0。所以逻辑还是比较简单的,在阅读上述代码时,请多注意这些原子访存指令和内存屏障指令,它们是构成锁机制的核心。

2023-07-02 19:12:58 766 3

原创 6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(8)

真的是很复杂的流程啊,想必看到这里人都懵逼了吧,其实我也开始混乱了…console、键盘、屏幕、shell、串口,它们是怎么交互和连接的,现在是有点太过于拘泥于细节而失去了全局观了。下面我就画出整个连接关系的全貌,作为这两篇博客的总结。在上图中,循着任何一种颜色的线条都可以将流程顺利捋顺,这就是对整个部分的总结。console的定位就是一个软件抽象出来的设备体,它专门用来缓存用户输入的字符,并对其中输入的特殊字符和组合键进行预处理,使得串口可以正常打印,shell可以正常解析。

2023-06-26 23:38:10 801 2

原创 6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(7)

后续会将上述内容一一解释清楚。

2023-06-23 22:03:26 1346 2

原创 6.S081——Lab4——trap lab

但我们在实验中没有这么做,Xv6的内核实现中整个栈只有一页(4K)大小,所以我们完全可以。

2023-06-16 22:50:29 1027

原创 6.S081——陷阱部分(内核陷阱与时钟中断)——xv6源码完全解析系列(6)

在上一篇博客中,我们通过系统调用这个重要的机制了解了Xv6操作系统中。这篇博客则准备研究一下,在研究内核陷阱流程中一个麻烦的家伙是定时器中断,首先它是一种由CLINT转发而来的本地中断,定时器终端往往会导致CPU的调度,进而将陷阱的处理流程变得错综复杂,这篇博客并不打算深入研究调度过程,这部分内容我们放在后面阅读对应源码时仔细研究。上次我们在阅读。

2023-06-01 21:14:02 1395

原创 6.S081——补充材料——RISC-V架构中的异常与中断详解

在RISC-V标准中,将异常(exception)定义为当前CPU运行时遇到的与指令有关的不寻常情况,而使用中断(interrupt)定义为因为外部异步信号而引起的让控制流脱离当前CPU的事件。而陷阱(trap)表示的则是,由异常或者中断引起的控制权转移到陷阱处理程序的过程。其实Xv6的定义和RISC-V的定义是相互兼容的,我们说在Xv6中有三种方式会触发陷阱:系统调用、中断和程序异常,其实系统调用中的ecall指令和程序执行中的异常都属于RISC-V标准中定义的异常情况,而。

2023-05-30 23:56:35 5541 9

原创 6.S081——陷阱部分(一文读懂xv6系统调用)——xv6源码完全解析系列(5)

在动笔写下这篇博客时,我只是想把Xv6的系统调用过程一点点弄清楚梳理下来,在这个过程中我查阅了许多RISC-V规范和相关书籍,并一直参阅Xv6 Book。结果没想到弄清一个小小的write系统调用,我竟然写了1.2万字,才将这过程中每一行代码研究清楚。即便如此,这个过程中还是有一些残留的问题,比如开关中断的时机(intr_on,intr_off),以及为什么要在usertrap中再保留一份epc的值,这些要完全搞明白需要后面中断、调度的相关知识。

2023-05-03 17:12:03 2646 11

原创 6.S081——Lab3——page table

至此,就完成了6.S081 Fall 2021的第三个实验,有关虚拟内存和页表机制的实验内容。总的来说实验难度都没有很大,在指导书的帮助下可以很快完成。但是对于内核代码的研究却远远没有结束,接下来的实验内容涉及到操作系统中最重要的一个部分,那就是终端和陷阱机制的实现。已经迫不及待去扒一下对应的源码了…哈哈。

2023-04-19 14:18:14 1673 4

原创 6.S081——虚拟内存部分——xv6源码完全解析系列(4)

不妨去看看:)

2023-04-12 21:10:49 1406 3

原创 6.S081——虚拟内存部分——xv6源码完全解析系列(3)

没想到vm.c这份代码文件还没有读完,不过剩下的也就。这篇博客就将整个虚拟内存部分的代码收个尾,然后。

2023-04-10 12:29:18 1385 1

原创 6.S081——虚拟内存部分——xv6源码完全解析系列(2)

上一篇博客中,我们详细分析了xv6内核代码中有关虚拟内存的部分,主要剖析了vm.c这个文件中的三个全局变量和6个函数,这篇博客。接着剖析和阅读接下来的源码,同样

2023-04-06 13:04:19 2146

原创 6.S081——虚拟内存部分——xv6源码完全解析系列(1)

希望可以更好地理解OS内核本质

2023-04-01 13:30:11 3095 4

原创 6.S081——Lab2——system calls

本实验的目的是在xv6中实现系统调用,这个过程中涉及到一些xv6中系统调用的基本机制,如系统调用号、如何从用户态向内核传参数、如何将结果从内核空间再传回用户空间(copyout)等。但要更加深入的理解系统调用的全过程,还需要在后面。argraw的逻辑非常简单,就是从对应的trapframe中返回a0-a7寄存器,因为根据RISC-V的calling convention,头几个寄存器是。,上一个实验更多的是使用已有的设施去实现一些功能各异的程序,这需要我们对系统调用的过程有更加深入的理解。

2023-03-26 13:05:09 1188 1

原创 6.S081——Lab1——Xv6 and Unix utilities

这就是6.S081的第一个实验,主要考察的就是系统编程,其实其中后三个任务还是有一定难度的。不过经过编写这些代码,多少还是对系统调用有了更深的认识,这是很大的收获。其实在做xv6的实验时,更大的收获不是解决实验内容本身,这些实验内容只是xv6的很小一部分功能,要在解决问题的同时和内核代码一起玩耍,调试并阅读源码,这才是学习这门课的精华所在。

2023-03-23 23:45:56 1018

原创 LeetCode刷题笔记和周赛题解总目录

LeetCode刷题笔记与周赛题解总目录

2023-02-16 16:13:10 324

转载 Embedded Linux Development——Note (1)——嵌入式开发环境的搭建

这个系列博客记录在嵌入式Linux开发过程中,内容参考了的教程。首

2022-12-31 11:42:19 318

原创 LeetCode——Weekly Contest 321

这段时间经历了组会、开题、回家等等,这才发现周赛已经打到325场了,而我还没有写完321场的题解记录,真是汗颜啊。

2022-12-20 11:23:09 409

原创 Reading Note(10)——AutoBridge

这篇论文是FPGA 2021年的best paper award,主要解决的是在HLS编译过程中优化布局和布线,最终达到整个multi-die的FPGA板上的大规模HLS设计时钟频率尽可能提升的目的,这篇工作在当前chiplet工艺铺展开来的当下更加有现实意义,通过这篇文章学习一下如何对Multi-Die场景下的模块进行建模。这部分首先肯定了HLS作为工具链的高效性和实用性,但是也指出HLS工具目前的一个问题在于HLS和RTL级代码之间可以达成的性能差距很大。

2022-12-05 13:04:02 605 2

原创 LeetCode——Weekly Contest 320(附动态规划解题思路)

LeetCode周赛第320场记录。

2022-11-29 16:23:24 694

原创 Reading Note(8) ——GNN for DSE Optimization

这部分作为全文的摘要, 和上一篇AutoDSE一样,提出了当前开发FPGA加速器的主要难点在于FPGA的开发门槛太高。另一方面虽然HLS的诞生在一定程度上缓解了这个问题,但是它在很多层次上涉及到HLS参数的选择,这个解决空间是非常大的,这个选择非常依赖于设计者的经验。另一方面,从HLS工具获得结果反馈耗时也非常大,一般在几分钟到数小时。这篇工作针对这种情况开发了DSE-GNN框架,主要方法是通过GNN来拟合HLS模型来使得它可以应用于非常广泛的应用场景,从而使得设计者在毫秒级就可以得到。

2022-11-21 11:40:33 650

原创 LeetCode——Weekly Contest 319

LeetCode周赛第319场记录

2022-11-18 12:48:24 714

原创 LeetCode——Weekly Contest 318

LeetCode周赛第318场记录

2022-11-11 11:03:22 403

原创 Reading Note(7)——AutoDSE

AutoDSE论文精读

2022-11-07 10:27:53 411 2

原创 LeetCode——Weekly Contest 315&317

LeetCode周赛第315&317场记录

2022-10-30 20:32:30 578

原创 Let‘s Talk About HeteroCL(1)—— Reading Paper

摘要部分指出了当前应用需要部署在异构系统上的切实需求,但是由FPGA构成的异构系统往往面临着使用门槛高,使用不方便的现状,只有拥有丰富硬件知识和设计经验的程序员才可以自如地使用FPGA来进行异构计算加速。HeteroCL就是来解决这一问题的,HeteroCL由基于python的DSL和面向FPGA的编译流组成。除此之外,HeteroCL提供了一个非常干净的抽象层,可以将算法描述和计算调度、数据类型、访存结构三者解耦开来。

2022-10-23 13:18:58 486

原创 LeetCode——Weekly Contest 314

LeetCode周赛第314场记录周赛第一题,根据题意写出代码即可。首先根据logs计算出每项工作的实际用时,然后根据用时长短对员工的ID号进行排序即可。给出完整代码如下:2433. 找出前缀异或的原始数组这道题也很简单,主要就是考察异或运算的性质。本题考察的实际上就是性质2,我们只需要将pref的相邻两个数字两两异或就可以解密出原有数组arr,以下是完整代码:2434. 使用机器人打印字典序最小的字符串(模拟栈+贪心)这道题很容易在比赛时卡住,从题面的描述上可以很快地反应出对机器人的两种操作

2022-10-11 18:18:39 399 1

原创 LeetCode——Weekly Contest 313

LeetCode周赛第313场记录。

2022-10-08 20:56:52 289

原创 LeetCode——Weekly Contest 312

LeetCode周赛第312场记录。

2022-09-28 23:53:55 360

原创 LeetCode题解内容迁移

LeetCode题解不再发布在CSDN,未来会就近记录在codetop.cc的个人题解,这样更加方便我快速复习。

2022-09-02 10:18:53 120

原创 LeetCode41——First Missing Positive——hashing in place & swap

这道题让我们找出一个数组中的缺失的第一个元素,也就是最小的一个正数,题面如下:其实如果只实现这个功能的话并不难,难点在于题目中对算法的时间和空间复杂度同时做出了约束,即时间复杂度是O(n)O(n)O(n),与此同时空间复杂度是O(1)O(1)O(1)。在完成这道题之前,有一个点非常重要的观察就是:对于长度为N的数组nums,其最小缺失的正数只会位于区间[1,N+1][1, N + 1][1,N+1]内,也就是说,长度为N的数组最多只会占用[1,N][1,N][1,N]这N个正整数,从而使缺失的第一个正

2022-06-28 21:18:04 212

原创 Advanced Computer Network Review(5)——COPE

本文参考资料来自:1.论文原文《XORs in The Air: Practical Wireless Network Coding》(SIGCOMM’06)2.课程演示文稿根据复习提纲,对于COPE应该弄懂以下几个问题:1.理解butterfly网络2.理解COPE的编码算法3.理解COPE的一个实例全文的一个核心是利用了异或(XOR)运算的一个特点,即a⊕b⊕b=aa \oplus b \oplus b = aa⊕b⊕b=a,即原始值经过两次异或某一个相数值后会变成原来的值,这是本文使用的

2022-06-12 00:36:58 798 2

原创 Advanced Computer Network Review(4)——Congestion Control of MPTCP

这篇文章对有关MPTCP的拥塞控制进行理解和梳理,参考资料来自:《Design, implementation and evaluation of congestion control for multipath TCP》(NSDI’11)和老师上课时的PPT。复习提纲中要理解的问题是:1.MPTCP拥塞控制的目标2.理解EWTCP和Coupled3.可以判断EWTCP和Coupled各自获取的带宽一、MPTCP拥塞控制的目标这部分是自己的理解和总结,从论文中来看,MPTCP拥塞控制的目标有两个:

2022-06-08 21:47:17 1664 9

原创 Advanced Computer Network Review(3)——BBR

这是复习系列的第三篇,主要梳理BBR拥塞控制有关的一些要点,老师给出的复习要点如下:1.基于loss的拥塞控制存在什么问题?为什么?2.理解下面这张图这篇文章的梳理部分参考了中科大郑烇老师《高级计算机网络》的相关部分,特此声明。一、基于loss的拥塞控制存在什么问题?为什么?在BBR没有出现之前,以往的一些拥塞控制协议(如Reno、Cubic)等都是基于丢包率(loss)的,也就是它将loss作为衡量网络是否拥塞的标准,单位时间内丢包丢得越多,协议就会单纯地认为网络的拥塞情况越严重,从而会进行一系

2022-06-06 19:52:47 1477 5

原创 Advance Computer Network Review(1)——FatTree

这个系列是对21~22学年夏季学期高级计算机网络课程的复习提纲,这是本系列的第一篇:FatTree在数据中心中的使用,主要覆盖的内容如下:1.拓扑结构和编址方案2.路由算法,找出任意两个主机之间的路由路径论文原文:《A Scalable, Commodity Data Center Network Architecture》SIGCOMM’08一、拓扑结构和编址方案首先这篇文章回顾了数据中心通信中存在的一些问题,然后针对这些问题提出了一种基于胖树(Fat Tree)的Clos拓扑来连接商品级以太网

2022-05-24 21:33:12 2098 7

原创 LeetCode144——Binary Tree Preorder Traversal——Iteration & Morris Traversal

一道很简单的题,二叉树的前序遍历,这道题一般三种解法:1.递归2.迭代3.Morris迭代算法这篇文章主要对后两者进行记录。一、递归法递归法基本上是所有人的首选,代码实现也比较简单,在这里从略,直接给出代码:class Solution { void preorder(TreeNode* root, vector<int>& Result) { if(!root) return; Result.pus.

2022-05-22 17:41:13 238

原创 TVM的安装过程

最近在看深度学习编译器相关的工作,其中FlexTensor给我留下了比较深刻的印象,加上这项工作是开源的,所以想看看这份工作的源码。首先是怎么把工程跑起来,FlexTensor倚仗TVM做代码生成,所以首先得安装TVM。首先给出官方网站的安装教程TVM安装流程-从源码安装,最好的安装步骤就是从上面一步步来,正如教程所说,整个安装过程分两个大步骤:1.从C++代码构建共享库2.安装语言支持首先是获取源码到本地并解压:在写这篇文章时,tvm源码的版本是v0.8.0,下载下来解压之就可以了,我使用的是W

2022-05-20 16:25:36 2863

空空如也

空空如也

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

TA关注的人

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