RCore-三叶虫 最近在准备 OS 内核赛,需要熟悉下 rust + OS 的技术栈 背景知识 只是查漏补缺以及一些感兴趣的知识 运行环境Rust编译器通过 目标三元组 (Target Triplet) 来描述一个软件运行的目标平台。它一般包括 CPU、操作系统和运行时库等信息,从而控制Rust编译器可执行代码生成。这里我们选择 riscv64gc-unknown-none-elf 目标平台。这其中的 CPU 2025-01-18 #Operating-System
计算机网络:链路层 概述运行链路层协议的任何设备称为节点,沿着通信路径连接相邻节点的信道称为链路。链路层的主体部分在网络适配器中实现,也叫网络接口卡。即NIC。链路层部分需要通过软件实现,比如响应中断、处理差错、传递给网络层。 差错检测和纠正技术奇偶校验对于一段长为d bit的数据,加上一个检验的bit,使得这d+1个bit有偶数个1。显然,当d个bit里面只有一个地方出现差错,可以发现且纠正,但对于两个差错的话就无 2024-10-03 #Computer-Networking
CS144-check7 overview我们已经实现了完整的TCP/IP栈,可以与现实世界通信了! test因为没有CS144学习的搭子,只能自己测试了。 我在macbook的基础上,又搞来了一台windows的机器,在上面配置好了一样的环境。将我最终的实现推上了github,在windows机上clone下来运行。注意mac上的utm还是要调成Shared Network的模式。 result通过keithw 2024-09-30 #Computer-Networking
CS144-check6 overview虽然一共有8个lab,但本质上这就是最后一个了:第八个lab是检查你的实现是否正确,并在真实的网络环境下运行。check6需要我们实现路由:将同一个路由器的不同网络接口收到的报文分发到正确的网络接口。确定网络接口使用了Longest-prefix match。 具体的,我们需要记录一张路由表,并根据匹配+动作的路由规则正确处理。 简单得出乎意料,并不需要实现路由选择算法之流。 im 2024-09-30 #Computer-Networking
CS144-check5 overview在这个checkpoint中,我们需要实现network interface,即网络接口。一台路由器/主机会有多个网络接口。我们实现的network interface,连接了物理层和链路层,即会将IP报文封装成Ethernet frame。 现在我们需要研究怎么正确地封装,并附上正确的物理地址。 一般来说,我们会在网络接口处维护一张IP地址-MAC地址的转换表,并按照这 2024-09-30 #Computer-Networking
计算机网络:网络层 overviewbasic网络层可以被分为数据平面和控制平面。数据平面的功能可以理解为每台路由器的控制功能,控制平面可以理解为对整个网络的控制。在进入正式的讨论之前,还需要区分两个概念: 转发:路由器将输入链路的分组正确地移动到输出链路(或者阻挡)。 路由选择:网络层决定分组所采用的路由和路径,使用合适的路由选择算法来决定一个分组流动的路径。 PART1:数据平面 网络服务模型Inter 2024-09-26 #Computer-Networking
CS144-check4 overview这个实验相当于测试前几个实验的搭建的TCP栈的正确性,我的代码实现没有问题,所以在实验4不再需要改主要的代码。只需要在webget中修改TCPSocket为CS144TCPSocket并加上对应的头文件,运行配置的脚本,就可以使用我们自己实现的TCP协议栈在网络中通信了! 值得注意的是,UTM的Emulated VLAN模式下好像并不能ping,要使用Shared Network才 2024-09-25 #Computer-Networking
CS144-check3 overview这个lab需要我们实现TCP协议中的发送方。 接收方只需要接收就行了,但发送方要考虑的就多了… 大概来说,需要实现下面的功能: 根据接收方提供的信息,去发送尽可能大的报文填满接收方的window 记录发送了但还没被接收方确认的报文 超时重传 implement以下为我的实现(可能并非最终版),本质是一坨面向测试的屎山,以后报错严重有可能要重构。 members1234567 2024-09-24 #Computer-Networking
CS144-check2 overview这个lab需要我们实现TCP协议中的接收方,具体的,负责实现确认(acknowledgement)和流控制(flow control)。 64bit index - 32bit seqno第一个部分,需要我们实现将上一个lab里面stream的index转换为TCP报文的序列号,指导书给出了序列号的特点: 序列号只有32位,属于阿贝尔群 序列号并不一定从0开始,可以是随机数。第一 2024-09-19 #Computer-Networking
CS144-check1 overview需要我们构造一个神奇的类Reassembler,接受无序的substring,并在该类中恢复其顺序。capacity我认为为bytestream的buffer的capacity,available_capacity我认为为bytestream的available_capacity,下文称为有效区 process刚完全理解时,觉得还挺简单的,具体的思路为,用一个链表将接收的subst 2024-09-12 #Computer-Networking