![](https://img-blog.csdnimg.cn/20210625130742484.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
理论沉淀
文章平均质量分 56
CS理论
infralan
Major in:linux内核 虚拟化 云原生,熟悉:分布式、网络、存储,感兴趣:计算、数据库、机器学习系统。
展开
-
SO_REUSEPORT正解
SO_REUSEPORT正解最关键的就是多线程负载均衡,多个套接字可以在同一端口上,多个线程可以在各自的套接字上接受自己的数据。Linux 3.9 加入了 SO_REUSEPORT 选项,可以提高 UDP 和 TCP server 的伸缩性,Linux 4.5/4.6 分别进一步改进了 UDP 和 TCP 的 SO_REUSEPORT 实现。本文以 UDP 的实现为例来讲解,TCP 与之类似。UDP 协议的主要数据结构是两张 hash 表,指向 UDP 协议控制块 struct sock。其中 has原创 2021-08-07 19:02:28 · 1297 阅读 · 0 评论 -
异步IO引擎——io_uring设计与实现
异步IO引擎——io_uring设计与实现转载自 https://zhuanlan.zhihu.com/p/334658432 有改动Linux原来的异步IO有缺陷,现在修复了,在5.x里面引入了io_uring同步IO接口当前Linux对文件的操作有很多种方式,过往同步IO接口,从功能上划分,大体分为以下几种。 - 原始版本 - offset版本 - 向量版本 - offset+向量版本原始版本就是read write,Offset版本是pthread/pwrite(线程安全),向量版本是rea原创 2021-08-07 16:29:44 · 864 阅读 · 0 评论 -
SO_REUSEADDR
SO_REUSEADDR一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 )。实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下:#include <arpa/inet.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h>#include <s转载 2021-07-31 10:25:41 · 216 阅读 · 0 评论 -
undo log与redo log原理分析
undo log与redo log原理分析张友东 https://zhuanlan.zhihu.com/p/355744522013年了解事务日志时写的总结文章,最近在研究关系型数据库,重新 review 一下,内容不一定准确,请指正。数据库通常借助日志来实现事务,常见的有undo log、redo log,undo/redo log都能保证事务特性,这里主要是原子性和持久性,即事务相关的操作,要么全做,要么不做,并且修改的数据能得到持久化。假设数据库在操作时,按如下约定记录日志:事务开始时,记原创 2021-07-26 11:17:56 · 157 阅读 · 0 评论 -
shadow paging wiki
shadow paging wikiIn computer science, shadow paging is a technique for providing atomicity and durability (two of the ACID properties) in database systems. A page in this context refers to a unit of physical storage (probably on a hard disk), typically o原创 2021-07-26 00:07:13 · 416 阅读 · 0 评论 -
WAL wiki
WAL wikiIn computer science, write-ahead logging (WAL) is a family of techniques for providing atomicity and durability (two of the ACID properties) in database systems. The changes are first recorded in the log, which must be written to stable storage, b原创 2021-07-25 23:52:28 · 92 阅读 · 2 评论 -
binlog wiki
binlog wiki简单来说就是操作记录,以statement为单位20.1 Binary Log Overviewhttps://dev.mysql.com/doc/internals/en/binary-log-overview.html[Some information in this section is derived from Chapter 20, The Binary Log, in the MySQL Reference Manual.]The binary log is a原创 2021-07-25 23:45:42 · 68 阅读 · 0 评论 -
多级页表内存
多级页表内存table of table二级页表的内存占用假设虚拟地址空间为32位,即4GB每个页面映射为4KB,以及每条页表项占4B,也就是32位。一级页表管理:一个进程需要使用1M个页表项(=4GB/4KB,2^20),即页表(每个进程都有一个页表)占用4MB(1M*4B=4MB)的内存空间。一级页表管理地址空间如下20 | 12 12代表offset位数,也就是页表的大小4KB。20代表是哪个页表,总共有2^20个页表。这里分割地非常自然。二级页表管理:2^(10+12)=2^2原创 2021-07-24 16:42:27 · 1887 阅读 · 0 评论 -
多级页表组织
多级页表组织页表在哪里?一般来说,任何进程切换都会暗示着更换活动页表集。Linux内核为每一个进程维护一个task_struct结构体(即进程描述符PCB),task_struct->mm_struct结构体成员用来保存该进程的页表。在进程切换的过程中,内核把新的页表的地址写入CR3控制寄存器。task_struct{ mm_struct mm;}mm_strcuct{ map_count; pgd; mmap;}从pgd得到page global原创 2021-07-24 16:40:53 · 126 阅读 · 0 评论 -
软中断指令int $0x80的执行过程
软中断指令int $0x80的执行过程它是陷阱类(编程异常)事件,因此它与异常响应过程一样。将IDTi(i=128)中段选择符(0x60,内核代码就是这个表项)所指GDT中的内核代码段描述符取出,其DPL=0,此时CPL=3,因为int $0x80指令在用户进程中执行,因而CPL>DPL且IDTi的DPL=CPL,故未发生13号异常。这里是系统门读TR寄存器,以访问TSS,从TSS中将内核栈的段寄存器内容和栈指针装入SS和ESP。从用户栈切换到内核栈,TSS有内核栈指针,得到内核栈栈顶,可以把用原创 2021-07-24 12:32:45 · 2165 阅读 · 1 评论 -
IA-32/Linux的系统调用
IA-32/Linux的系统调用系统调用(陷阱)是特殊异常事件,是OS为用户程序提供服务的手段。Linux提供了几百种系统调用,主要分为以下类:进程控制、文件操作、文件系统操作、系统控制、内存管理、网络管理、用户管理、进程通信等。系统调用号是系统调用跳转表索引值,跳转表给出系统调用服务例程首地址。调用号名称调用号名称1exit12chdir2fork13time3read19lseek4write20getpid5open3原创 2021-07-24 12:13:04 · 187 阅读 · 0 评论 -
Linux中对中断的处理
Linux中对中断的处理对于大部分异常,Linux只是给引起异常的当前进程发送一个信号就结束异常处理,具体的异常处理转到信号处理程序进行。对于中断,因为中断事件的发生与正在执行的当前进程很可能没有关系,所以将一个信号发给当前进程没有意义。Linux中有三种类型中断IO中断,IO外设的中断请求。时钟中断,某时钟产生的中断请求,告知固定时间间隔到处理器中断,多处理器系统中其他处理器发出的中断请求IO中断:每个能发中断请求的外设控制器都有一条IRQ线,所有IRQ线连接到一个可编程中断控制器PIC原创 2021-07-24 11:49:20 · 434 阅读 · 0 评论 -
Linux中对异常的处理
Linux中对异常的处理异常处理程序发送相应的信号给发生异常的当前进程,或者进行故障恢复,然后返回到断点处执行。例如,若执行了非法操作,CPU就产生6号异常(#UD),在对应的异常处理程序中,向当前进程发送一个SIGILL信号,以通知当前进程终止运行。采用向发生异常的进程发送信号的机制实现异常处理,可尽快完成在内核态的异常处理过程,因为异常处理过程越长,嵌套执行异常的可能性越大,而异常嵌套执行会付出较大的代价。并不是所有异常处理都只是发送一个信号到发生异常的进程。例如对于14号页故障异常(#PE)原创 2021-07-24 11:20:50 · 1120 阅读 · 1 评论 -
内核态权限和用户态权限
内核态权限和用户态权限系统调用这个可以看一下系统调用的过程,应用代码通过int 80发起对系统调用,通过中断处理后执行对应的系统函数,这时候的权限也变了,即内核态。比如cpu有0,1,2,3四种权限等级,有些操作是0等级才能做的,linux使用0和3两种,就是内核态和用户态。简单来说,就是低权限的应用代码通过高权限的操作系统去做某些事情,系统提供的入口就是系统调用。这是处理器的两种工作模式。差别就是内核模式下什么指令都可以执行,用户模式下有些指令一执行就会引发内部中断。内核模式、用户模式,这只是个简单原创 2021-07-01 15:35:01 · 659 阅读 · 0 评论 -
底层IO和标准IO
底层 I/O 函数与 ANSI 标准定义的文件 I/O 函数有何区别?答:底层 I/O 又称为低级磁盘 I/O,遵循 POSIX 相关标准。任何兼容 POSIX 标准的操作系统上都支持文件I/O。标准 I/O 被称为高级磁盘 I/O,遵循 ANSI C 相关标准。只要开发环境中有标准 I/O 库,标准 I/O 就可以使用。(Linux 中使用的是 GLIBC,它是标准C库的超集。不仅包含 ANSI C 中定义的函数,还包括 POSIX 标准中定义的函数。因此,Linux 下既可以使用标准 I/O,也可以使原创 2021-07-01 15:24:52 · 365 阅读 · 0 评论 -
程序的运行
运行角度一个典型的程序运行步骤如下:1、操作系统在创建进程后,把控制权交到了程序的入口,这个入口往往是运行库的中的某个入口函数。2、入口函数对运行库和程序运行环境进行初始化,包括堆、I/O、线程、全局变量构造,等等。3、入口函数在完成初始化之后,调用main函数,正式开始执行程序主体部分。4、main函数执行完毕之后,返回到入口函数,入口函数进行清理工作,包括全局变量析构、堆销毁、关闭I/O等,然后进行系统调用结束进程。操作系统通过调用main函数来执行程序,main函数则执行组成自己的语句,并原创 2021-07-01 15:24:18 · 605 阅读 · 0 评论 -
谈谈return和控制流
初学编程,一直觉得这是平平无奇的,后来渐渐感觉,实则很有东西。return 不返回值的时候,要有个标识,叫做void。也可以理解为return 都有返回类型,void是一种无类型。return 返回值的时候,在系统编程的情况下,往往是用作错误处理,传递函数调用成功与否的信息。比如典型的main函数,return 0。一个很奇妙的想法就是main才是和系统作用的中介,其他的东西都是包裹在main里面的,main必须返回int就是因为这是系统编程的强制规定,返回这个用作错误管理。只看语法,是无法认识到这些的原创 2021-06-27 14:00:59 · 201 阅读 · 0 评论 -
上下文无关文法
上下文无关文法就是说这个文法中所有的产生式左边只有一个非终结符,比如:S -> aSbS -> ab这个文法有两个产生式,每个产生式左边只有一个非终结符S,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。比如:aSb -> aaSbbS -> ab这就是上下文相关文法,因为它的第一个产生式左边有不止一个符号,所以你在匹配这个产生式中的S的时候必需确保这个S有正确的“上下文”,也就是左边的a和右边的b,所以叫上下文相关文法。..原创 2021-06-26 13:21:06 · 437 阅读 · 0 评论 -
逆向书籍推荐
书籍:《Intel 开发者参考手册》—没有比这个更权威的资料了,但是是英文的(第三卷有翻译版),而且很晦涩,读起来鸭梨山大,可以找一些教程结合着看。《Intel 80386 保护模式编程》—保护模式编程,必备内功。《加密解密》—看雪论坛出的,不多说了。《黑客调试技术揭秘》《黑客反汇编揭秘》—俄罗斯大神的著作,更加不用多说了,“俄罗斯”这三个字已经足以说明一切了。《逆向工程揭秘》《IDA pro 权威指南》《IDA Pro代码破解揭秘》 作者:Dan Kaminsky / Justin Fer原创 2021-06-25 16:19:19 · 3852 阅读 · 0 评论 -
我认为的好书
算法TAOCP 计算机程序设计艺术。the art of computer programming(神书,无法看)挑战程序设计竞赛CLRS 算法导论(最权威的)算法与数据结构 C语言描述(经典)算法 java算法设计与分析基础 levitin how to think about algorithms 算法的证明Competitive programmer’s handbook acm的基础知识the algorithm design manual 算法设计手册algorithms j原创 2021-06-25 16:13:06 · 338 阅读 · 0 评论