TCP 上篇:可靠数据传输原理 数据在信道传输的过程中,要考虑两种情况: 比特差错:分组能到达,但其中的比特可能受损; 丢包:分组可能被整个丢失,完全不能到达; 以下讨论中,我们暂且假设分组在发送方和接收方的信道中不会被重新排序,即发送方以 1,2 的顺序发包,接收方就不会在收到 2 之后才收到 1(如果先收到 2 说明 1 一定发生了丢包)。 针对比特差错的考虑先考虑信道只出现比特差错的情况。为处理这种情况,引入 ARQ( 2023-03-12 Network
eBPF 原理与应用纪要 网上有很多关于 eBPF 的资料,但是大多数还是“内核中的虚拟机,挂载到 kprobes”之类的车轱辘话,并没有解决初学 eBPF 的几个疑点。在这里记录一下 eBPF 出现的逻辑、eBPF 相较于 perf 等内核监测工具的区别以及当前 eBPF 前端常用的挂载流程这三个问题。 eBPF 概述eBPF(extended Berkeley Packet Filter)在本质上迎合了定制内核功能的需 2023-03-10 OS > Kernel
MIT 6.S081 2020 xv6 labs 20 年的 xv6 实验和 21 年主要有两个不同: 20 年多了一个 sbrk 的 Lazy allocation; 20 年的页表实验和 21 年有很大不同,难度较高; 代码:https://github.com/CH3CHOHCH3/xv6-labs-2020问答题直接看对应的 answers-lab.txt 即可。 Lab3 Page t 2023-02-28 OS > MIT6.S081
MIT 6.S081 2021 xv6 labs 汇总一下 2021 年度 MIT 6.S081 的 10 个实验。 代码:https://github.com/CH3CHOHCH3/xv6-labs-2021问答题直接看对应的 answers-lab.txt 即可。 Lab1 Utilities通过系统调用实现五个功能。 sleep用 atoi 把字符串转为数字,直接调用 sleep 即可。 pi 2023-02-22 OS > MIT6.S081
自顶向下的语法分析 自顶向下分析试图从初始符号开始,给出目标句子的一个推导。 递归下降分析法递归下降分析的实现递归下降分析法从直观上是很好理解的,以如下文法为例: $E\rightarrow T|T+E$ $T\rightarrow int|int\ast T|(E)$ 定义全局指针 next 指向下一个待读入的 token,以及函数 term 来判断该 token 是否为指定类型终结符:123bool term 2022-11-16 编译原理
ELGamal算法及其原根的求取 ELGamal 是 RSA 之外的另一个公钥加密体系,于 1985 年提出。相较于 RSA,ELGamal 的运算速度更慢,密文长度更大;其优势是对于质数大小的要求更低一些,而且由于随机数的选取,即使是同一个私钥,加密同样的信息,也会得到不同的结果,提高了安全性。 数学基础群设$G$是一个具有代数运算$\circ$的非空集合,满足: 结合律:$\forall a,b,c\in G$,有$(a\c 2022-11-15 数学 > 密码学
RSA算法介绍 非对称密码(公钥密码)体系非对称密码体系是 1976 年被正式提出的概念,弥补了对称密码的一些缺陷。 其基本方案是:用户生成公钥 $pub$ 和私钥 $pri$,公钥向他人公开并用于信息加密,私钥由本人保管并用于信息解密。 RSA 是 1977 年被提出的公钥密码算法,其核心原理是数论中的欧拉定理,被广泛用于互联网的方方面面(包括 ssh,https 等关键设施)。在量子 计算机还未成熟的今天,R 2022-10-20 数学 > 密码学
xv6 驱动和中断——输入输出 在 xv6 启动时,shell 会向屏幕打印 $ 表示等待用户输入;当用户从键盘输入 ls 时,屏幕会显示这两个字符。在这些设备工作的过程中,xv6 内核究竟扮演了什么角色,又是如何实现的呢? 设备驱动设备驱动是内核中的代码,用于管理特定硬件设备。驱动通常分为 top 和 bottom 两部分:top 通常是内核希望与设备沟通时调用的,而 bottom 则是设备向内核发起中断时的处理程序。 当内核 2022-08-31 OS > MIT6.S081
2021年ICPC国际大学生程序设计竞赛-C 原题链接:https://ac.nowcoder.com/acm/contest/35232/C 题意在区间 $[l,r]$ 内任意选取 $k$ 个数求最大公因数,问有多少种可能的结果。 $1\leq l\leq r\leq 10^{12},$ $2\leq k\leq r-l+1$ 题解数学本质首先,显然有: $(b-a)$ 是 $gcd(a,b)$ 的倍数。 由此可得: $gcd(a 2022-06-10 ACM
git三种协议的代理配置 最近在安装 MIT6.S081 的实验环境时又受到了国内网络的制裁,这里浅浅记录一下如何配置 git 的代理。 所用的环境是 WSL2 的 Ubuntu-20.04.4 LTS,SSR 运行在 windows 的 12345 端口,打开了允许来自局域网的连接。 获取windows的ip众所周知,WSL2 会把 windows 的虚拟网卡 vEthernet 作为默认网关,所以我们需要的代理地址就是 2022-05-11 开发实践