月度归档: 2021年4月

22 篇文章

TCP Keepalive
TCP连接的双方即使在在没有数据交互的时候也不会终止双方的连接。只要它们两者之间的路由器不要宕机了,很久之后还是可以进行数据交互的。在有些时候,客户端或者服务器想要只当对方是否关闭了,但是因为有些原因FIN报文没有正确的发送过来。我们又想在双方之间保持少量是数据交互,让它们双方能够直到对方是否还“建在”。这种机制叫做keepalive(保活)。ke…
TCP-简述
TCP是一种ARQ协议,即使当数据没能成功发送给对方的时候,就重试。 Another is to simply “try sending again” until the information is finally received. This approach, called Automatic Repeat Request (ARQ), fo…
TCP Connection Management
Introduction TCP是面向链接的(connection-oriented )。就是在双方交换数据之前需要经过建立链接。而UDP是无连接的(没有涉及任何连接的建立和终止的过程)。TCP中的有一些选项只有在连接建立的时候才可用。 TCP connection Establishment and Termination TCP连接的建立如下图…
lab3 part B
环境 ubuntu 20.04 64位系统 正文 现在你的内核有了最基本的中断处理能力,我们还会进一步的对它升级使得它能够提供依赖于异常处理的重要的操作系统原语。 Handing Page Fault page fault,第14号中断(T_PGFLT),是一个非常重要的中断贯穿在本次lab以及下一次lab。当处理来处理page fault的时候,…
lab3 Part A:User Environments and Exception Handling
环境 ubuntu 20.04 64位系统之前有些实验是在xv6的源码上操作的,发现20.04无法运行。后来发现lab还是可以在20.04正常做的,就把环境切换到本机上了。 lab地址:mit 6.828 lab3 废话 这次实验感觉难做了不少,参考了别人不少的代码。毕竟代码是别人写的,要花心思去理解别人的思路。注释里面的提示我也觉得有点模棱两可。…
Lab2 part3 Kernel Address Space
环境 ubuntu 20.04 64位系统 lab2地址:点击我查看lab2 正文 lab2说实话还是挺难的,这也首先归因我对于页式内存了解有点不到位。在实验中走了一些弯路。不过还是很努力地把lab3的内容都做完了。废话不多说,开始干! 下面这段还是翻译下lab2 part3的一些原文。JOS 将32bit的线性地址空间划分为两个部分。用户使用低地…
Lab2 part2 Virtual Memory
环境 Ubuntu20.04 64位系统lab2地址:lab2 正文 本次实验需要我们对paging有一个比较深入的了解,如果只是一知半解可能连代码都不知道什么意思。所以在正式开始代码实验之前,我们先来介绍一下一些预先需要的知识。在part1当中,主要做的就是对物理内存分页,我们使用了PageInfo 和一个page_free_list来管理空闲的…
Lab2 part1 Physical Page Management
环境 Ubuntu 20.04 64 位系统Lab的地址:点击这里去Lab2 准备工作 因为在Lab1当中代码我写了很多注释在里面,并且还有修改了一些代码。所以我重新clone一份lab1。然后执行下面的命令就行: git checkout -b lab2 origin/lab2 git merge lab1 这样一来应该就看到lab2新的一些文件…
Lab1 The Kernel
环境 ubuntu 20.04 64系统 本文大部分内容翻译mit6.828 Lab1 part3的内容,原地址点击这里课程主页:MIT6.828-2018 Fall 正文 本篇是MIT6.828 Lab1 的part3的内容。经过了part2对boot loader的深入研究以及知道了如何去加载一个elf文件,现在我们终于可以来看看JOS的ker…
TinyHttpServer
本文概述一下如何来实现一个简单的HTTP服务器,没有实现其他的功能。如session,cookie,缓存,请求转发等等。主要是学习到浏览器中HTTP的基本格式,如何正确地解析HTTP报文。此外,借鉴了一些HttpServelet中的接口定义。还实用了@webServlet注解来模仿HttpServlet中URL对Servlet的映射。并且以此使用反…