![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机理论
文章平均质量分 87
ztenv
这个作者很懒,什么都没留下…
展开
-
WebSocket 协议
【代码】WebSocket 协议。原创 2023-01-04 17:14:53 · 3648 阅读 · 0 评论 -
RFC1122
Network Working Group Internet Engineering Task ForceRequest for Comments: 1122 R. Braden, EditorOctober 1989 Requirements for Internet Hosts -- Communication LayersStatus of This MemoThis RFC is an o原创 2022-03-16 13:41:17 · 1936 阅读 · 0 评论 -
RFC2001
Network Working Group W. StevensRequest for Comments: 2001 NOAOCategory: Standards Track January 1997 TCP Slow Start, Congesti原创 2022-03-16 13:40:11 · 540 阅读 · 0 评论 -
RFC793
RFC: 793 TRANSMISSION CONTROL PROTOCOL DARPA INTERNET PROGRAM PROTOCOL SPECIFICATION September 1981 prepared for De原创 2022-03-16 13:39:22 · 637 阅读 · 0 评论 -
全局唯一ID生成方法总结
数据库自增ID最简单,使用最广泛的场景:单表设置一个自增 ID,我们很多情况下的数据查询、获取都是通过该方式。但存在较明显的弊端:1、受限于DB最大连接数,高并发场景下会占用连接数,增加DB压力。而且主从延迟的情况下会出现数据获取不准确的问题。2、单表数据越来越大, 后期分库分表会存在压力,拓展能力差。UUIDUUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。UUID由以下几部分组成:1、当前日期时间。2、时钟序列。3、全局唯一的IEEE机器识别号,如果有网卡原创 2020-12-28 11:07:23 · 1547 阅读 · 1 评论 -
什么是图灵机及图灵完备(一)
图灵机的组成网上有一张经典的图片来表达图灵机的构成,图如下:这张图片什么意思?这么一个简单的机器/装置怎么会所有电子计算机的理论模型?图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,它运算过程看作下列两种简单的动作:在纸上写上或擦除某个符号;把注意力从纸的一个位置移动到另一个位置;图灵机把复杂的过程抽象成了上述两个动作:读写和移动逻辑结构上图灵机有四个部分组成:一个无限长的存储带,带子有一个个连续的存储格子组成,每个格子可以存储一个数字或符号一个读写头,读写头可以在存储带原创 2020-12-18 15:32:06 · 1957 阅读 · 0 评论 -
冯·诺依曼,天才中的天才
冯·诺依曼(John von Neumann,1903~1957),美国数学家,原籍匈牙利。毫无疑问,冯·诺依曼是20世纪最重要的数学家之一,他是基础数学(包括算子理论,测度论,集合论,代数几何,遍历论等)、量子力学、计算机科学与工程、博弈论等领域内的科学全才之一,由于他在相关领域内的开创性贡献,被后人誉为“计算机之父”和“博弈论之父”。冯·诺依曼出生于奥匈帝国时期的布达佩斯,父亲是勤奋机智的犹太裔银行家,母亲也受过良好教育。冯·诺依曼名字里的“冯(von)”表示的是他的贵族身份,而这样的身份是他的父亲在原创 2020-12-10 13:26:34 · 1241 阅读 · 0 评论 -
什么是拓扑排序
一、什么是拓扑排序在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。例如,下面这个图:它是一个 DAG 图,那么如何写出它的拓扑排序呢?这里说一种比较常用的方法:..原创 2020-10-27 13:38:43 · 7707 阅读 · 1 评论 -
关于CPU寄存器的那些事儿(11)——模型特定寄存器
从80486之后的x86架构CPU,内部增加了一组新的寄存器,统称为MSR寄存器,中文直译是模型特定寄存器,意思是这些寄存器不像上面列出的寄存器是固定的,这些寄存器可能随着不同的版本有所变化。这些寄存器主要用来支持一些新的功能。随着x86CPU不断更新换代,MSR寄存器变的越来越多,但与此同时,有一部分MSR寄存器随着版本迭代,慢慢固化下来,成为了变化中那部分不变的,这部分MSR寄存器,Intel将其称为Architected MSR,这部分MSR寄存器,在命名上,统一加上了IA32的前缀。这里选取原创 2020-10-30 10:54:21 · 663 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(10)——任务寄存器
现代操作系统,都是支持多任务并发运行的,x86架构CPU为了顺应时代潮流,在硬件层面上提供了专门的机制用来支持多任务的切换,这体现在两个方面:CPU内部设置了一个专用的寄存器——任务寄存器TR,它指向当前运行的任务。定义了描述任务的数据结构TSS,里面存储了一个任务的上下文(一系列寄存器的值),下图是一个32位CPU的TSS结构图:x86CPU的构想是每一个任务对应一个TSS,然后由TR寄存器指向当前的任务,执行任务切换时,修改TR寄存器的指向即可,这是硬件层面的多任务切换机制。这个构想原创 2020-10-29 09:49:05 · 633 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(9)——描述寄存器
所谓描述符,其实就是一个数据结构,用来记录一些信息,‘描述’一个东西。把很多个描述符排列在一起,组成一个表,就成了描述符表。再使用一个寄存器来指向这个表,这个寄存器就是描述符寄存器。在x86/x64系列CPU中,有三个非常重要的描述符寄存器,它们分别存储了三个地址,指向了三个非常重要的描述符表。gdtr: 全局描述符表寄存器,前面提到,CPU现在使用的是段+分页结合的内存管理方式,那系统总共有那些分段呢?这就存储在一个叫全局描述符表(GDT)的表格中,并用gdtr寄存器指向这个表。这个表中的每一项都原创 2020-10-28 18:13:50 · 993 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(8)——调试寄存器 (在调试程序时看到的“烫烫烫”是什么意思?内存很烫手吗?)
在x86/x64CPU内部,还有一组用于支持软件调试的寄存器。调试,对于我们程序员是家常便饭,必备技能。但你想过你的程序能够被调试背后的原理吗?程序能够被调试,关键在于能够被中断执行和恢复执行,被中断的地方就是我们设置的断点。那程序是如何能在遇到断点的时候停下来呢?对于一些解释执行(PHP、Python、JavaScript)或虚拟机执行(Java)的高级语言,这很容易办到,因为它们的执行都在解释器/虚拟机的掌控之中。而对于像C、C++这样的“底层”编程语言,程序代码是直接编译成C.原创 2020-10-28 12:06:09 · 658 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(7)——控制寄存器
控制寄存器是CPU中一组相当重要的寄存器,我们知道eflags寄存器记录了当前运行线程的一系列关键信息。那CPU运行过程中自身的一些关键信息保存在哪里呢?答案是控制寄存器!32位CPU总共有cr0-cr4共5个控制寄存器,64位增加了cr8。他们各自有不同的功能,但都存储了CPU工作时的重要信息:cr0: 存储了CPU控制标记和工作状态cr1: 保留未使用cr2: 页错误出现时保存导致出错的地址cr3: 存储了当前进程的虚拟地址空间的重要信息——页目录地址cr4: 也.原创 2020-10-27 10:08:56 · 1523 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(6)——指令寄存器
段寄存器与CPU的内存寻址密码切相关,请参见(汇编的12种寻址方式)早在16位的8086CPU时代,内存资源宝贵,CPU使用分段式内存寻址技术:16位的寄存器能寻址的范围是64KB,通过引入段的概念,将内存空间划分为不同的区域:分段,通过段基址+段内偏移段方式来寻址。这样一来,段的基地址保存在哪里呢?8086CPU专门设置了几个段寄存器用来保存段的基地址,这就是段寄存器段的由来。段寄存器也是16位的。段寄存器有下面6个,前面4个是早期16位模式就引入了,到了32位时代,又新增了.原创 2020-10-26 18:08:49 · 1502 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(5)——指令寄存器
eip: 指令寄存器可以说是CPU中最最重要的寄存器了,它指向了下一条要执行的指令所存放的地址,CPU的工作其实就是不断取出ip指向的指令并指行,同时指令寄存器继续指向下面一条指令,如此不断重复,这就是CPU的执行指令的主要工作。PS:如果修改了ip指向的下一条指令,那么会发生什么事情呢?呆呆呆。。。。可以通过修改binary file的cs段来实现,如:常见的病毒感染文件、破解软件等等当然了,在定位进程崩溃的问题时,如果没有产生core文件,那么ip寄存器就变得特别重要了(详见我之前写过的原创 2020-10-26 10:00:09 · 1708 阅读 · 2 评论 -
关于CPU寄存器的那些事儿(4)——标志寄存器
标志寄存器——存储了很多标记位,标识了CPU执行指令过程中的一系列状态,这些标志基本上是由CPU自动设置和修改,我们只需要理解或记住就行了(硬件或cpu大神除外)CF 进位标志PF 奇偶标志ZF 零标志SF 符号标志OF 补码溢出标志TF 跟踪标志IF 中断标志······在x64架构下,原来的eflags寄存器升级为64位的rflags,不过,扩展出来的高32位目前还没有使用。...原创 2020-10-24 19:35:20 · 827 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(3)——通用寄存器
通用寄存器:是程序执行代码最最常用,也是最最基础的寄存器,程序在执行过程中,绝大部分时间都是在操作这些寄存器来实现指令的功能。既然是通用的,那么这些寄存器就没有特殊的用途,应用程序爱怎么使用怎么使用,只要遵循一个既定的潜规则即可。eax: 通常用来执行加法,函数调用的返回值一般也放在这里面ebx: 数据存取ecx: 通常用来作为计数器,比如for循环 .//C++中this指针也是通过ecx来传递的,可以通过反汇编来验证。edx: 读写I/O端口时,edx用来存放端口号esp: 栈原创 2020-10-24 16:29:25 · 1802 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(2)——寄存器是什么
寄存器是CPU内部用来存放数据的一些小型存储区域,主要用来暂时存放参与运算的数据运算结果以及一些CPU运行需要的信息。x86架构CPU的指指令集是复杂指令集(CISC),提供了丰富的指令来实现强大的功能,与此同时也提供了大量寄存器来辅助功能实现。x86架构的CPU,主要的寄存器包括以下:通用寄存器标志寄存器指令寄存器段寄存器控制寄存器调试寄存器描述符寄存器任务寄存器MSR寄存器...原创 2020-10-23 16:25:43 · 1260 阅读 · 0 评论 -
关于CPU寄存器的那些事儿(1)——CPU的主要架构
自1946年冯·诺伊曼领导下诞生的世界上第一台通用电子计算机ENIAC至今,计算机技术已经发展了七十多载。这七十多年中,出现了数不清的编程语言,如:C、C++、Python、Java、golang、还有世界上最好的编程语言——PHP等等。可无论什么样的应用程序,什么样的编程语言,最终的程序逻辑都是要交付给CPU去执行实现的(除了CPU,还有协处理器、GPU等等)。在七十多年的漫长历程中,也涌现了不少架构的CPU。MIPSPowerPCx86/x64IA64ARM.原创 2020-10-23 13:50:47 · 465 阅读 · 1 评论