摘要:
线程状态(context) 程序计数器(Program Counter),它表示当前线程执行指令的位置。 保存变量的寄存器。 程序的Stack。通常来说每个线程都有属于自己的Stack,Stack记录了函数调用的记录,并反映了当前线程的执行点。 xv6的线程切换 从一个用户进程切换到另一个用户进程, 阅读全文
摘要:
锁的种类 自旋锁(spinlock):无法获得锁,就一直循环获取,适合短时间的加锁 睡眠锁(sleeplock):为了防止长时间的循环等待,在获取不到锁时,进程陷入睡眠,当锁释放时对睡眠进程进行唤醒 自旋锁的实现 其实自旋锁的实现很简单,不过是一个状态量置1或者置0的操作 为了防止中断产生死锁以及编 阅读全文
摘要:
xv6中并没有实现这个部分,我自己实现的COW代码没有保存,因此借用了别人的代码,主要是了解实现方法。 COW(copy on write)指fork复制子进程时,并不直接复制父进程的内存内容至子进程中(因为开销很大),而是将这些内存的一个特殊COW标志置1。因此,子进程读内存时,实际上是读的父进程 阅读全文
摘要:
用户空间和内核空间之间的切换通常称为trap trap的三种形式 系统调用引发 异常发生 设备中断 (时间中断、IO中断、网络中断等) supervise mode的权限 用户态和内核态之间的到底有什么区别?其实区别很小: 其中的一件事情是,你现在可以读写控制寄存器了。比如说,当你在supervis 阅读全文
摘要:
逻辑地址与物理地址的转化 页表是由页表项(PTE)组成的数组。512个PTE构成一个页表页(Page-table page)。 PTE中包含了物理页码(PPN physical page number)以及一些标志,来控制物理空间块的读写访问权限。 物理地址与虚拟地址的映射为三层树形结构,每一层存储 阅读全文
摘要:
exec系统调用会从指定的文件中读取并加载指令,并替代当前调用进程的指令。从某种程度上来说,这样相当于丢弃了调用进程的内存,并开始执行新加载的指令。 exec系统调用会保留当前的文件描述符表单。所以任何在exec系统调用之前的文件描述符,例如0,1,2等。它们在新的程序中表示相同的东西。 通常来说e 阅读全文
摘要:
虽然篇幅很长,但大多是易懂的代码,不用担心看不完 这里的所有操作,都将在下面的代码中有所体现 fork会拷贝当前进程的内存,并创建一个新的进程。如上图,fork函数会将整个进程的内存镜像拷贝到新的内存地址,包括代码段、数据段、堆栈以及寄存器内容。之后,我们就有了两个拥有完全一样内存的进程。fork系 阅读全文
摘要:
课程主页:https://pdos.csail.mit.edu/6.828/2020/schedule.html 实验答案(非官方):https://blog.csdn.net/u013577996/article/details/108679997 课程视频翻译:https://mit-publi 阅读全文
摘要:
SM2官方文档整理 算法原理 SM2算法介绍 我国自主知识产权的商业密码算法,是ECC(椭圆加密算法)的一种,基于椭圆曲线离散对数问题(公钥密码体制所依据的难题主要为大素数分解问题、离散对数问题、椭圆曲线),计算复杂度是指数级。同等安全条件下,椭圆曲线密码较其他公钥算法所需密钥长度小很多。 ElGa 阅读全文