[UNP]:字节-地址转换函数 1. 值-结果参数值-结果类型参数通常与套接字结构一起使用,是指这样一种参数: 其通常是某个整型变量的指针,当其被传递给函数时,函数需要用到它的值,通常用于标识套接字结构的大小, 当函数执行完毕,指针指向的值可能会发生改变,其内容通常为函数在套接字结构中写入的字节大小 例子 12345struct sodkaddr_un cli;socklen_t len;len = sizeof(cli);g 2022-03-29 unp
[UNP]:套接字地址结构 本文将会重点介绍IPV4相关内容,IPV6的内容将不予涉及, 以下涉及到的函数以及结构默认都是IPV4, POSIX规范 1. 套接字地址结构该结构定义在<netinet/in.h>中 sockaddr_in 12345678910111213// IPv4套接字地址结构:sockaddr_in#include <netinet/in.h> struct in_addr 2022-03-29 unp
[UNP]:端口与并发服务器 1. 端口号**IANA(theInternet Assigned Numbers Authority)**维护着一份端口号清单,最后一份文档作为RFC[1700]发出 其将端口号划分为3段: 众所周知的端口号(0~1023) 服务器通常需要使用到这些众所周知的端口号,它们专用于某些特定的服务,如端口号80就专用于Web服务 已登记的端口(1024~49151) IANA不对这些端口号加以控 2022-03-29 unp
[xv6]:文件系统 总览 xv6的文件系统是一个类Linux文件系统,具体分为7个层次,下面是xv6的文件系统层次图 文件系统层次图 磁盘结构方面,同样是Linux的简化版本,分为了6个区块 磁盘结构图 boot 存放boot sector, 即启动引导程序, 具体就是mkfs(mkfs.c) super block 包含了文件系统的元数据, 包括文件系统大小,数据块大小,日志区域大小,inod 2022-03-29 xv6
[xv6]:pipe 直接看代码 pipe结构 12345678struct pipe { struct spinlock lock; char data[PIPESIZE]; uint nread; // number of bytes read uint nwrite; // number of bytes written int readopen; // read fd i 2022-03-29 xv6
[xv6]:wait-exit-kill 1. waitxv6中并没有实现Linux中的信号(signal)机制,当一个子进程终止时,如果其父进程还未终止,那么其会将自己的state设置为ZOMBIE, 然后wakeup()正处于wait()状态的父进程,父进程遍历进程表,找到state为ZOMBIE的子进程,然后释放其资源 12345678910111213141516171819202122232425262728293031323 2022-03-29 xv6
[xv6]:sleep-and-wakeup 类似于pthread中的条件变量,xv6中也实现了与pthread_cond_wait()和pthread_cond_broadcast()类似的操作 在xv6中的对应api为sleep()以及wakeup() sleep() 123456789101112131415161718192021222324252627282930oidsleep(void *chan, struct spinlo 2022-03-29 xv6
[xv6]:调度 1. xv中的线程与进程 分时复用 xv6中采用的也是分时复用,即每个进程在CPU上运行一段时间,计时器超时过后引发trap, 然后再由调度器调度其它进程在CPU上运行,使得每个进程以为自己独占CPU 内核线程与调度线程 在xv6中,每个进程只有一个线程,该线程运行在内核当中,被称为内核线程, 这样做主要是为了简单,Linux这种复杂系统中,除了内核线程之外还拥有用户线程. 在每个CPU当中 2022-03-29 xv6
[xv6]:控制台中断 控制台Console是与用户进行交互的硬件设备,它接受用户的输入(如键盘输入),将其传递给内核和用户程序,进行相应的处理,然后再输出结果给用户(如输出到屏幕上) 首先,简单地看总体流程: 用户将会通过键盘键入一连串字符,通过连接到RISC-V上的UART串行端口(UART Serial-port)传输,控制台驱动程序将会顺利地接收这些输入 接控制台驱动程序处理其中的一些特殊字符(如BackSp 2022-03-29 xv6
[xv6]:内存管理 3.1 Page Table下图展示了RISC-V页表真正的细节,它采用的是多级页表的方案,一共有三级,整体上是一个树形的结构。这种树形结构的多级页表节省了大量内存空间 为了跟踪装载页表的页是否有效,引入页目录PD(Page Directory,即高两级的页表,xv6并没有严格区分页目录和页表) 页目录指出装载页表或下一级页目录的物理页帧的位置;或者告诉我们页表或下一级页目录的整个页不包含有效页, 2022-03-29 xv6