自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CS144 Lab:Lab3

本文详细介绍了TCPSender类的实现过程。该类负责TCP协议中发送方的核心功能,包括超时重传、报文确认以及SYN/FIN标志设置。作者通过分析实验文档,梳理出TCPSender与TCPReceiver的协作关系,并着重解决了三个关键问题:1) 数据发送机制(通过_segments_out队列);2) 超时重传实现(使用计时器变量和deque结构存储未确认报文);3) 窗口填充算法(处理SYN/FIN标志及数据分段)。特别强调了当接收方窗口为0时需发送探测报文的特例,完成了符合TCP协议的可靠传输机制。

2025-11-25 13:21:13 723

原创 CS144 Lab:Lab2

本文记录了TCP协议实验Lab2的实现过程。实验主要完成TCP接收端(TCPReceiver)的实现,重点解决序列号转换问题。通过wrap/unwrap函数实现了32位循环序列号与64位绝对序列号的相互转换,并处理了SYN/FIN标志位的影响。实验还涉及TCP报文解析、数据重组和窗口管理等功能,最终成功构建了TCP接收端的基本框架。作者总结指出,实验需要深入理解TCP协议细节,特别是序列号转换和边界条件的处理,完整实现后才能获得更深刻的理解。

2025-11-22 20:22:50 952

原创 Docker 介绍和常用命令

Docker是一个轻量级的容器化平台,通过进程级隔离实现环境一致性,解决了在我电脑能运行,在你的电脑上也能运行的问题。它基于镜像(只读模板)和容器(运行实例)两个核心概念,不同容器环境相互隔离。常用命令包括:run创建容器、ps查看容器、stop/start启停容器、rm删除容器等。相比虚拟机,Docker更轻量且便于环境配置,通过端口映射等方式实现内外通信,特别适合跨平台项目部署(如在Mac上运行CS144课程环境)。操作逻辑类似Git,具有本地/远程仓库概念。

2025-11-18 00:29:49 353 1

原创 CS144 Lab:Lab1

摘要:本实验基于ByteStream实现TCP字节流重组功能,处理网络传输中可能出现的乱序、丢失数据包。实验通过StreamReassembler类维护两个容器:一个存储接收到的乱序字节流(使用map<uint64_t,char>结构),一个存储有序字节流(ByteStream实例)。关键实现包括:1) 定义总容量限制为两个容器之和;2) 采用滑动窗口策略仅接收有效范围内的字节;3) 通过索引管理实现乱序数据的按序重组。

2025-11-18 00:03:44 609

原创 CS144 知识笔记二

本文摘要: 本文系统介绍了计算机网络核心协议的工作原理。首先分析了字节序的分类与区别,包括大端和小端模式的特点及应用场景。其次探讨了路由转发的原理,重点阐述了最长前缀匹配原则。文章详细讲解了ARP协议的运作机制,包括其在局域网中的广播解析过程及特殊应用场景。针对TCP协议,深入解析了三次握手过程、协议头格式以及流量控制机制,比较了滑动窗口协议中回退N步与选择重传策略的差异。此外,还介绍了UDP协议的简单特性及其应用场景,以及ICMP协议在网络诊断中的作用,包括ping和traceroute的实现原理。

2025-11-16 20:34:31 607

原创 CS144 Lab:Lab0

CS144 Lab 0 总结了 ByteStream 的实现。在通过 telnet 和 Webget 体验字节流后,核心是使用 std::vector 和读写指针 (_buffer_read, _buffer_write) 构建环形队列。实现遵循了现代 C++ 规范(RAII、const、初始化列表),关键是精确管理剩余容量 (_buffer_remain) 和正确处理 std::string 长度,最终通过了所有测试。

2025-11-05 23:53:00 707

原创 CS144 知识笔记一(网络概述)

本文梳理了计算机网络核心技术。NAT技术通过地址转换使局域网共享公网IP,虽导致内网设备难以直接访问,但可通过中介服务器实现反向连接。网络通信遵循TCP/IP四层模型,数据经层层封装与解封。其中IP协议设计简洁,仅提供基本路由分组,将可靠性交由上层处理;TCP协议则通过三次握手等机制实现可靠传输。VPN技术通过创建虚拟网卡、修改路由及加密封装,建立安全隧道访问内网,这与需要解析应用数据的系统代理有本质区别。

2025-10-30 17:25:51 1069

原创 CS144 学习导航

摘要:完成MIT6.S081后,开始学习斯坦福CS144计算机网络课程。相关资源包括:CS自学指南的课程介绍、B站中英字幕视频、LRL52的Lab题解博客以及个人GitHub实验仓库(poiyth/CS144-Sponge)。实验笔记博客待更新。这些资源将辅助完成CS144的Sponge版本实验项目。

2025-10-23 17:13:17 122

原创 Git相关操作

文章摘要:GitHub协作开发中,fork是将他人项目复制到自己的仓库,获得修改权限;clone则是将远程仓库下载到本地。标准工作流程包括:fork项目到个人仓库、clone到本地修改、推送回个人仓库,最后通过Pull Request(PR)向原项目提交修改请求。PR是贡献者对无写入权限项目提交修改供审阅合并的机制。

2025-10-23 16:58:01 133

原创 MIT 6.S081 Lab11:mmap

本文介绍了mmap系统调用的实现过程。mmap用于将文件或对象映射到进程虚拟地址空间,简化文件操作并支持进程间通信。实验重点包括:1)在进程结构中添加VMA数组管理映射区域;2)实现mmap系统调用,处理参数检查、地址分配和权限验证;3)通过缺页异常处理实现延迟分配;4)实现munmap完成映射解除和脏页写回;5)修改exit和fork处理进程终止和复制时的映射管理。实验采用从高地址向下分配的策略避免与堆区冲突,并通过排序VMA数组优化空间利用率。最终通过了mmaptest和forktest测试。

2025-10-02 20:13:26 1021

原创 MIT 6.S081 文件系统的崩溃恢复

文件系统崩溃恢复机制通过日志技术保障数据一致性。核心流程为:1)操作先写入日志;2)提交标识;3)按日志修改文件系统;4)清空日志。XV6系统使用事务机制(begin_op/end_op)实现:将文件操作打包为原子事务,通过引用计数防止缓存提前写回,并限制并发事务数量。日志区域大小限制要求大文件操作需分解为多个事务。该机制确保系统崩溃时可通过重放日志恢复数据。

2025-09-28 22:31:17 699

原创 MIT 6.S081 文件系统的基本结构 (Lab10:File system)

本文介绍了文件系统的层次结构和工作原理。文件系统从底层物理设备到上层应用依次包括:物理disk及驱动、bufcache缓存、日志系统、icache索引节点缓存、inode数据结构以及应用层的文件名和文件描述符。重点分析了XV6文件系统的实现细节,包括inode节点结构(12个直接块+1个间接块)、目录项组织和文件查找流程。通过实验展示了如何扩展XV6文件系统支持更大文件(增加二级间接索引)和实现软链接功能。软链接与硬链接的主要区别在于:硬链接共享inode节点,而软链接是独立文件存储目标路径。

2025-09-26 20:32:57 1016

原创 MIT 6.S081 锁、Sleep&Wakeup(Lab9: locks)

文章摘要:本文探讨了多核CPU环境下锁机制的重要性与应用。锁的出现解决了多进程对共享资源的竞争问题,确保临界区访问的正确性。文章分析了锁的基本使用原则、作用机制(如原子操作、维护数据不变性)及其缺点(限制并发性能、死锁风险)。进一步介绍了线程同步的多种方法(原子变量、互斥锁、条件变量等),并以UART和管道为例详细讲解了Sleep-Wakeup协作机制的正确实现方式。最后通过两个实验(内存分配器和缓冲缓存优化)展示了如何通过资源分区和锁优化来提高并发性能,同时避免死锁问题。

2025-09-19 15:25:30 802

原创 MIT 6.S081 线程&调度(Lab8: Multithreading)

本文主要介绍了线程的概念、调度机制及其实验实现。线程作为执行单位,共享进程资源但拥有独立上下文,多核CPU通过线程并行加速任务。文章详细讲解了线程切换流程(保存/恢复上下文)、调度策略(抢占式和自愿式)以及XV6中的具体实现。 实验部分包含: 用户态线程切换模拟(uthread):实现上下文保存/恢复和调度器 线程同步(ph):使用桶级锁解决哈希表并发写入冲突 屏障同步(barrier):实现多线程等待-唤醒机制 。

2025-09-13 17:44:04 739

原创 MIT 6.S081 中断(Lab7:Network driver)

文章摘要:本文探讨了中断的分类与处理机制,重点分析了XV6操作系统中设备驱动的实现。中断分为三类:I/O设备中断、异常和软件中断,主要通过中断控制器PLIC与CPU交互。在设备驱动部分,详细讲解了终端字符打印和键盘响应的处理流程,涉及uart驱动程序和中断处理函数。最后介绍了网络实验的实现,包括E1000网卡驱动的发送和接收功能,通过环形缓冲队列和描述符实现数据传输,并讨论了并发控制问题。实验难点在于理解硬件规范和操作系统接口,而非代码实现本身。

2025-08-27 20:38:59 206

原创 C/C++八股文知识积累4-cin,cin.get(),getchar(),getline(),cin.getline()异同点

C++输入方法比较:cin>>直接从缓冲区读取数据,不处理末尾分隔符;cin.get()可读取单个字符或指定长度的字符串,保留结束符;getchar()读取包括空白符在内的单个字符;cin.getline()读取指定长度的字符串并丢弃结束符;全局函数getline()针对string类型,功能类似但属于不同流。这些方法在字符处理、缓冲区管理和结束符处理上各有特点。

2025-08-24 12:09:28 302

原创 C/C++八股文知识积累3-指针

指针是存储变量内存地址的变量,其大小由计算机位数决定(32位4字节/64位8字节)。指针类型决定算术运算步长和解引用访问的内存大小。特殊指针包括void指针(需强制类型转换)和函数指针(存储函数入口地址)。野指针指向无效内存区域,内存泄漏指未释放堆内存。建议初始化指针、使用智能指针管理资源,避免这些问题。

2025-08-23 11:34:34 414

原创 C/C++八股文知识积累2-封装、继承、多态

C语言是面向过程的语言,C++面向对象,和所有面向对象的语言一样(JAVA、Python等)有着封装、继承、多态的性质。

2025-08-20 18:16:37 589

原创 MIT 6.S081 Lab6:Copy-on-Write Fork

本文介绍了xv6系统中实现写时复制(Copy-on-Write)机制的关键步骤。主要包含:1)在fork时标记共享页为COW页并设为只读;2)处理页错误时分配新物理页并修改权限;3)引入引用计数管理共享页,确保安全释放;4)处理内核态对用户COW页的写操作。该机制通过延迟物理页分配,显著提升了fork效率并节省内存空间。文章还讨论了页表抽象带来的扩展性,如支持懒分配、按需分页等功能。实验涉及内核页表处理、锁机制和内存管理等核心概念。

2025-08-19 21:19:39 582

原创 MIT 6.S081 Lab5: Lazy Page Allocation

本文介绍了操作系统中延迟页面分配(lazy allocation)的实现方法。核心思想是在sbrk()系统调用时不立即分配物理内存,只在进程实际访问内存时触发页错误才分配。主要修改包括:1)在sbrk()中仅调整进程内存大小而不分配物理页;2)在页错误处理中实现懒分配函数;3)处理进程销毁时未映射页面的情况;4)修复fork()中的内存复制问题;5)处理系统调用涉及未分配内存的情况;6)处理内存不足的情况。通过这一系列修改,实现了高效的延迟内存分配机制,只在需要时才分配物理页面,减少了内存浪费。

2025-08-17 21:32:19 697 1

原创 MIT 6.S081 函数栈结构,Traps(Lab4: Traps)

本文介绍了RISC-V架构下的函数栈结构和Trap机制。函数栈采用向下增长方式,包含返回地址、fp指针和寄存器值等。Trap过程涉及32个通用寄存器和特殊寄存器的保存与恢复,包括用户态到内核态的切换流程。实验部分实现了函数调用回溯(Backtrace)和定时中断处理(Alarm)功能,其中Alarm实验通过系统调用和Trap处理实现了定时执行用户处理函数的功能,并解决了中断嵌套问题。文章详细分析了Trap处理流程、寄存器保存恢复机制以及内核态与用户态的切换过程,为理解操作系统底层机制提供了重要参考。

2025-08-10 21:59:29 928

原创 C/C++八股文知识积累1-malloc动态内存分配

本文介绍了C/C++中malloc的用法和底层原理。malloc用于动态内存分配,返回void*指针,使用后需手动free释放内存。底层实现上,当申请内存小于128KB时,从堆区空闲链表中寻找合适内存块,找不到则通过brk()系统调用扩展堆区;大于128KB时使用mmap()创建匿名映射。内存块以chunk形式组织,包含已分配块和空闲链表(bins)。free时会根据内存块头信息释放空间。

2025-08-10 12:06:10 961

原创 MIT 6.S081 XV6操作系统学习导航

MIT6.S081操作系统课程学习资源汇总,包含实验网站、题解博客(tzyt)、学习笔记(tzyt/Iguodala)及实验代码(github/poiyth)。资源持续更新中,适合操作系统学习者参考。

2025-06-29 23:31:56 178

原创 MIT 6.S081 页表(Lab3: page tables)

本文介绍了RISC-V架构下的页表机制及实现细节。主要内容包括:1. 页表的基本概念和作用,通过虚拟地址与物理地址的转换实现进程隔离;2. RISC-V采用的三级页表结构,通过L2、L1、L0三级索引完成地址转换;3. TLB快表作为地址转换的缓存优化;4. 内核页的分布情况,包括平等映射和特殊用途页面;5. 通过三个实验:优化系统调用、打印页表内容和检测页面访问状态,深入理解页表机制的具体实现。文章详细分析了xv6操作系统中页表相关的代码实现,包括页表创建、映射建立、权限控制等关键操作。

2025-06-29 23:21:07 1092

原创 Git常用命令

本文总结了Git的常用命令,包括远程仓库管理(查看/修改/删除/添加)、分支操作(创建/切换/删除/合并/推送新分支)、用户信息配置以及代理查看等实用功能。这些命令覆盖了日常版本控制的基本需求,如git remote -v查看远程仓库、git checkout -b创建分支、git merge合并分支等,帮助开发者高效管理代码仓库。

2025-06-13 15:35:13 180

原创 Git/Github 常用命令和实践

本文介绍了Git和GitHub的基础使用指南,包括Git本地开发流程和GitHub远程协作方式。主要内容有:1.两种下载GitHub项目的方法(克隆仓库和直接下载)及其区别;2.Git的基本概念,包括工作区、暂存区、本地仓库的转换关系;3.常用Git命令如add、commit、push、pull等;4.如何将本地仓库与远程GitHub仓库同步。文章适合Git新手快速掌握版本控制和团队协作的基本操作。

2025-06-13 12:38:10 694

原创 MIT 6.S081 操作系统组织架构和系统调用(Lab2 System calls)

本文系统梳理了xv6操作系统的学习进程,重点分析了进程管理、系统调用等核心机制。主要内容包括:1.进程管理部分,详细阐述了进程地址空间结构、页表机制和状态转换,结合代码分析了从开机到第一个进程创建的完整流程;2.系统调用实现部分,通过trace和sysinfo两个实验案例,深入剖析了用户态到内核态的转换机制,包括系统调用编号注册、参数传递和结果返回的全过程;3.具体实验实现,展示了如何添加新的系统调用,并处理进程间mask继承、内核/用户空间数据传递等关键技术点。

2025-06-05 16:48:48 694 1

原创 MIT 6.S081 操作系统接口(Lab1 Unix utilities)

这篇文章记录了作者从零开始学习xv6操作系统的过程,包括阅读文档、视频学习和完成Lab实验。主要内容涵盖:1. 操作系统基础知识:进程管理、文件系统、I/O重定向等核心概念;2. xv6系统调用实践:sleep、pingpong、prime等实用程序开发;3. 关键编程技巧:管道通信、递归进程创建、文件查找等;4. 实验心得:通过动手实践深入理解操作系统原理。文章展现了作者从基础薄弱到完成xv6实验的完整学习路径,适合操作系统初学者参考。

2025-05-18 23:09:57 1183

原创 服务器+WordPress创建博客知识点杂谈

最近创建了自己的博客,打算和和博客园博客,优快云博客这些做到功能分离,就随便在B站找了个教程。教程可以说是纯新手教程,完全没有计算机基础知识的也可以使用,傻瓜式教程,跟着点就完事了。但自己怎么说也算是计算机科班的学生,打算在创建博客的过程中对于其中的知识点进行学习和整理。

2025-05-15 22:31:12 289

空空如也

空空如也

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

TA关注的人

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