附件资料
文章平均质量分 86
shenmingik
于现在,对话未来
展开
-
处理器微架构
文章目录流水线乱序执行分支预测参考文献流水线在控制指令中我简单提过CPU流水线的概念,但是当时讲的太粗了,现在来细讲一下。而在CPU中,指令执行单元EU是执行指令的唯一部件,这意味着单核CPU的情况下,每次只有一个指令处于执行中。那么对于一个取指令->译码->执行这样一个过程来说,目前的想法可能是取指令->译码->执行、取指令->译码->执行、取指令->译码->执行。但是,CPU这颗工业明珠可不这么简单。其每个部分同一时刻只能做一件事,其就像人体器官一样原创 2021-10-06 21:54:39 · 277 阅读 · 0 评论 -
什么是中断
文章目录什么是中断中断分类外部中断可屏蔽中断不可屏蔽中断内部中断引发内部中断引发异常参考文献什么是中断之前博主的博客里面反复使用了中断这个词汇,可能我是明白这是啥的。但是对于读者来说可能还有些陌生,所以今天就好好来讲讲什么是中断。一个宏观的中断定义如下:由于CPU获知了计算机中发生了某件事,CPU暂停正在执行的程序,转而去执行处理该事件的程序。当这段程序执行完毕后,CPU继续执行刚才的程序。这个过程就叫中断。一般来说,操作系统是一个死循环。那么它是如何进行并发运行的呢?原因就是中断。中断虽然会打断当原创 2021-11-16 19:00:00 · 2990 阅读 · 0 评论 -
系统调用过程
文章目录系统调用注意要点系统调用的过程参考文献参考书籍链接:微云链接系统调用注意要点系统调用会由用户态陷入到内核态,让内核去代替进行工作,以便访问受保护的资源系统调用由软中断机制实现,也就是0x80中断每个系统调用都是独一无二的,其由唯一的数字来标识系统调用需要的参数又寄存器传入系统调用的过程通过外壳函数(库函数)来发起系统调用参数通过堆栈传入外壳函数,外壳函数再将这些参数复制到寄存器中,总共有六个寄存器,这也就意味着参数最多有六个外壳函数将对应的系统调用号写入eax寄存原创 2021-03-22 22:33:31 · 539 阅读 · 0 评论 -
redis 的机制
文章目录redis是什么redis设计缓存穿透、缓存击穿、缓存雪崩缓存穿透布隆过滤器构造空对象缓存击穿缓存雪崩redis的持久化RDB持久化AOF持久化redis是什么Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, ha原创 2021-03-13 13:19:06 · 494 阅读 · 2 评论 -
protobuf入门
文章目录protobuf是什么protobuf的安装protobuf 跨平台跨语言的秘密xxxx.proto文件编译xxxx.proto文件序列化 Demoprotobuf更快的秘密protobuf 的编码参考文献写在前面:现在国内博客风气简直烂的很,百度半天七八篇protobuf相关文章一模一样。只好去挂梯子看官方文档,结果发现国内的博文就只是把官网文档翻译了一遍,一个字都没改。就无语。。。protobuf是什么首先我们来看看protobuf的缔造者Google对其的一个定义:google:原创 2021-03-11 22:22:15 · 791 阅读 · 3 评论 -
杂记——入口及出口函数的实现
由于微软代码不开源,我们在这里只介绍glibc是如何实现入口函数的。glibc入口函数glibc的程序入口为_start(由链接器ld指定)。下面是i386上_start的实现:我们看到,在传递参数之前还有三行代码,它们是做什么的呢:xor%ebp,%ebp:让ebp寄存器清零,xor的用处是把后面两个操作数异或,结果存储在第一个操作数里面。这样可以表明当前是程序的最外层函数。pop %esi及mov esp,%ecx:在调用_start前,装载器会把main函数参数压栈。下图为此时栈的布局原创 2020-09-20 15:18:57 · 604 阅读 · 0 评论 -
杂记——堆分配算法
堆分配算法我们知道程序通过malloc申请的内存空间大小是不一定的,从数个字节到数个GB都是有可能的。于是就需要堆内存管理。我们将堆空间管理起来,将它分块的按照用户的需求出售给最终的程序,并且还可以按照一定的方式收回内存。空闲链表空闲链表的方法实际上就是把堆中的各个空闲的块按照链表的方式链接起来。当用户请求一块空间时,可以遍历整个列表,直到找到合适大小的块并且将它拆分。空闲链表是这样一种结构,在堆里的每一个空闲空间的开头有一个头,头结构里记录了上一个和下一个空闲块的地址。也就是说,所有的空闲块原创 2020-09-19 20:36:01 · 607 阅读 · 0 评论 -
杂记——写时拷贝技术
写时拷贝技术在linux中,fork()产生一个父进程相似的子进程,但是一般情况下,子进程在此之后会调用exec函数族。如果这个时候把各个段都拷贝到子进程,就会造成很大的效率浪费。这是不用写时拷贝的图解可以看到,内核将父进程的信息复制到子进程并为子进程开辟了物理空间所以linux引入了写时拷贝技术,也就是当各个段的内容要发生变化时,才会将父进程的内容复制一份给子进程。当然,不变化则父子进程共享资源。再来看一下写时拷贝技术明显省略了开辟物理空间的花销子进程如何执行exec系统调用我们刚原创 2020-08-30 13:03:36 · 190 阅读 · 0 评论 -
杂记——kill函数和raise函数
killkill函数用于向任何进程组或进程发送信号。被包含在一下两个头文件中。#include<sys/types.h>#include<signal.h>函数原型如下:int kill(pid_t pid,int sig);//成功执行返回0 失败返回-1//失败是errno会被设置为以下值://EINVAL 指定的信号编号无效//EPERM 权限不够无法传送信号给指定进程//ESRCH 参数pid指定的进程或进程组不存在kill函数的pid参数主原创 2020-08-30 11:31:52 · 569 阅读 · 0 评论 -
附件——常用信号表
信号含义SIGABRT调用abort函数产生此信号,进程异常终止SIGALRM调用alarm设置的计时器超市或者由setitimer函数设置的间隔时间超时,会产生此信号SIGBUS当某些类型的内存故障时,会产生此种信号SIGCANCELSolaris线程库内部使用的信号SIGCHLD在进程终止或者停止时,将此信号发送给其父进程SIGCONT此作业控制信号发送给需要继续运行,但是当前处于停止状态的进程。系统会默认继续执行这个进程SIGEMT...原创 2020-08-27 19:38:34 · 243 阅读 · 0 评论