Shusheng Blog

年轻的时候,我们总是会将自己的创作冲动误解为创作才能 -- 钱钟书

椭圆曲线密码学原理分析

本文最早发于 简书。 之前写过一篇文章分析过 RSA 算法原理后,想了解下更复杂点的椭圆曲线密码学原理(Elliptic Curve Cryptography,ECC),于是有了这篇文章。基于椭圆曲线的密码体系已经在密钥交换(如ECDHE)和数字签名(ECDSA)中得到广泛应用,如比特币就在其数字签名算法中用到了椭圆曲线。相较于 RSA,椭圆曲线密码体系可以使用更短的 key 达到更...

RSA 算法原理全面解析

本文最早发于 简书。 网上写 RSA 算法原理的文章不少,但是基本上要么忽略了数学原理的说明,要么缺少实际的可运行的例子,为此特写了此文,将 RSA 需要用到的数学概念和定理都总结了一番,并基于算法原理使用 python 实现了 RSA 密钥生成和加解密的 demo,希望对大家深入了解 RSA 算法有所帮助。本文第 1 节为 RSA 相关的数论基础,第 2 节是 RSA 算法原理描述...

Redis 主流程分析

网上分析Redis源码的文章挺多,如黄健宏的《Redis设计与实现》就很详尽的分析了redis源码,很赞。前不久看到Paul Smith的较早年份的大作《Redis:under the hood》,受益匪浅,如此从整体上对redis原理有个大的把控,不过多纠结于细节,甚好。这里我用的版本是redis2.4.18版本,跟Paul Smith的版本有所不同,不过主体流程没有太多变化,这篇文...

MIT6.828 Lab6-网络

MIT6.828 学习笔记

lab6是实现网络部分,代码见 这里 1 QEMU 虚拟网络 实验中将使用到QEMU的用户模式网络栈,因为它不需要管理员权限。JOS中通过更新makefile来启用QEMU的用户模式的网络栈以及虚拟的E1000网卡。 QEMU默认提供了一个在IP地址10.0.2.2上运行的虚拟路由器,它会为JOS分配一个IP地址10.0.2.15。为简单起见,我们将这些默认值硬编码到了 net/...

MIT6.828 Lab5-文件系统

MIT6.828 学习笔记

lab5是实现文件系统相关功能,exercize实现代码见 这里。 1 文件系统初步 JOS文件系统设计相比Linux等系统的文件系统如ext2,ext3等,要简化不少。它不支持用户和权限特性,也不支持硬链接,符号链接,时间戳以及特殊设备文件等。 1.1 磁盘文件系统结构 大部分Unix文件系统会将磁盘空间分为inode和data两个部分,如linux就是这样的,其中inode用...

MIT6.828 Lab4-抢占式多任务调度

MIT6.828 学习笔记

lab4 是实现多处理器支持以及抢占式任务调度,exercize代码见 这里。 1 多处理器启动流程 1.1 多处理器支持 为了支持多处理器,首先需要知道多处理器的配置,这个配置通常是存储在BIOS里面。BIOS需要传递配置信息给多个处理器,同时需要能复原多处理器及其相关组件,多处理器的BIOS也要扩展功能,增加MP配置。 SMP是指所有处理器都是平等的,包括内存对称和IO对称。...

MIT6.828 Lab3-用户环境

MIT6.828 学习笔记

lab3是实现用户环境,或者说是用户进程。exercize代码见 这里。 1 概述 继内存管理之后,实验3是实现用户环境,这里的用户环境,其实就类比Unix/Linux下的进程即可。因为JOS的环境与Unix进程提供了不同的接口和语义,所以用环境一词代替进程,在本文中进程和环境两个词就不做区分了。 2 进程定义 在 inc/env.h中包含了一些用户环境的基本定义,JOS内核使...

MIT6.828 Lab2-内存管理

MIT6.828 学习笔记

继lab1之后,lab2主要是实现内存分页管理。包括物理页管理,虚拟内存管理,内核地址空间等内容,先来看看相关理论知识。lab2的exercize代码在这里。 1 背景知识 由lab1中可以知道,当前的内存布局如下所示: 其中0~0x3ff是BIOS中断向量表(后面会被设置为中断描述符表IDT),而启动代码Boot Loader则被加载到了 0x7C00 处,接着 Boot...