01 2021 档案

摘要:epoll是Linux中用于IO多路复用的机制,在nginx和redis等软件中都有应用,redis的性能好的原因之一也就是使用了epoll进行IO多路复用,同时epoll也是各大公司面试的热点问题。 IO多路复用 IO多路复用是一种同步IO模型,使得一个线程就可以对多个文件描述符进行监听。当有文件 阅读全文
posted @ 2021-01-31 20:44 星見遥 阅读(1036) 评论(0) 推荐(1)
摘要:代码在github上。总体来说如果理解了COW机制的话,这个实验的完成也没有很复杂。 这一个实验是要完成COW(copy on write)fork。在原始的XV6中,fork函数是通过直接对进程的地址空间完整地复制一份来实现的。但是,拷贝整个地址空间是十分耗时的,并且在很多情况下,程序立即调用ex 阅读全文
posted @ 2021-01-31 12:19 星見遥 阅读(4448) 评论(0) 推荐(1)
摘要:驱动是操作系统中用于管理特定设备的代码:驱动控制设备硬件,通知硬件执行操作,处理中断,与等待该设备IO的进程进行交互。 当设备需要与操作系统进行交互时,就会产生中断(陷阱的一种),之后内核的陷阱处理代码就会识别中断设备并调用对应的驱动处理程序。在XV6这一步发生在trap.c的devintr中。 大 阅读全文
posted @ 2021-01-30 11:00 星見遥 阅读(1770) 评论(0) 推荐(0)
摘要:quic协议分析 QUIC是由谷歌设计的一种基于UDP的传输层网络协议,并且已经成为IETF草案。HTTP/3就是基于QUIC协议的。QUIC只是一个协议,可以通过多种方法来实现,目前常见的实现有Google的quiche,微软的msquic,mozilla的neqo,以及基于go语言的quic-g 阅读全文
posted @ 2021-01-21 14:05 星見遥 阅读(15680) 评论(7) 推荐(2)
摘要:代码在github上。 这一个实验是要利用缺页异常来实现懒分配(lazy allocation)。用户态程序通过sbrk系统调用来在堆上分配内存,而sbrk则会通过kalloc函数来申请内存页面,之后将页面映射到页表当中。 当申请小的空间时,上述过程是没有问题的。但是如果当进程一次申请很大的空间,如 阅读全文
posted @ 2021-01-16 10:39 星見遥 阅读(2132) 评论(1) 推荐(0)
摘要:这一个实验主要是对RISC-V的汇编、栈帧结构以及陷阱进行简单的了解,难度并不大。 代码放在github上。 RISC-V assembly (easy) Q1: Which registers contain arguments to functions? For example, which r 阅读全文
posted @ 2021-01-06 10:37 星見遥 阅读(3790) 评论(0) 推荐(1)
摘要:在操作系统中,有三种情况会导致CPU的控制流发生转移:用户态中通过ecall指令进入内核态;异常发生,如除零、访问非法地址;设备中断,如硬盘完成读写请求。上面这些情况可以统称为陷阱(trap)。 陷阱在一般情况下应该是透明的,即当执行完处理程序后能够恢复之前程序的状态。这就要求在陷入内核态时,内核要 阅读全文
posted @ 2021-01-04 10:35 星見遥 阅读(1916) 评论(0) 推荐(0)