自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 AQS 源码阅读

exclusiveOwnerThread 当前执行的线程Node// 取消状态// 在等待队列中,被唤醒状态// 该节点当前处于条件队列中。(条件遍历)// 共享锁,是否被别人唤醒/***//***//***//*** mode.*/volatile 支持原子性,有序性,可见性队列:使用双向链表记录队列volatile head 头结点volatile tail 尾结点volatile state 状态。

2023-03-25 11:13:45 207

原创 Redis 源码阅读

Reids 作为一个缓存,加快磁盘的访问速度,如果有一个进程线程发起一个读写请求,我们希望快速获取到信息,而这个信息他是存放在磁盘中的,所以Redis的瓶颈在于如何快速的访问磁盘,而不是CPU去开启多个线程去访问,因为木桶效应,开启多个线程是无用,他都会被磁盘阻塞,所以Redis使用了单线程处理。因为Redis需要访问磁盘,而磁盘访问最快的方式就是操作系统提供的 多路复用器 epoll,但是不是每一个操作系统都有多路复用器,所以 Redis 做了抽象,根据操作系统版本来选取不同的 I/O 系统调用。

2023-03-21 18:30:42 402

原创 Linux 启动入口

/设置高速缓冲区的大小,跟块设备有关,跟设备交互的时候,充当缓冲区,写入到块设备中的数据先放在缓冲区里,只有执行sync时才真正写入;fork()) { //创建0号进程 fork函数就是用来创建进程的函数 /* we count on this going ok *///0号进程永远不会结束,他会在没有其他进程调用的时候调用,只会执行for(;if (memory_end > 16*1024*1024)//控制操作系统的最大内存为16M。//从内核态切换到用户态,上面的初始化都是在内核态运行的。

2023-03-21 18:29:37 828

原创 Linux 文件系统

end_request 是将处理完当前访问函数完成之后将其唤醒。而后调度器去唤醒进程。操作系统初始化的时候,会初始化 hd_interrupt(函数指针) 中断处理函数。如果当前空闲块是否被使用过,如果里面有数据则刷新到磁盘,如果没有返回当前空闲块。// 中断处理指令,do_hd 表示是读还是写。write_intr 中断处理写函数指针。read_intr 中断处理读函数指针。hd 是硬盘,rd 是软盘。将当前缓冲区刷新到设备中。如下我们讨论的是硬盘。

2023-03-21 18:28:34 135

原创 Intel 分页

一个块内存,我们将数据给 代码段 分配为多少内存合适呢,分得多不合适,分的少也不合适,所以我们就需要将内存进行规划存储。如果只有一级页表,那么我就需要将一级页表都要进行数据分配,那么现在引入二级页表,那么一级页表就变少了。而我们只需要将一级页表进行分配。每一个进程都有这样的结构,如果每一个进程都需要使用完整个内存,那么就需要给每个进程创建一个 4MB空间,充分分配。我们需要创建根据进程,那么我们就将物理内存和需求内存解耦出来,不进保护了物理内存,而且一个进程可以拥有这个内存(在他自己看来)。

2023-03-21 18:28:15 91

原创 Linux 分页实现

内存分配/**/bdir->size;bdir++)break;if (!len);/**/cli();bdesc;break;/**/if (!bdesc) {if (!if (!cp)i > 1;i--) {*/sti();repne;scasb\n\t""rep;stosl\n\t""1:"rep;

2023-03-21 18:28:03 105

原创 中断与异常

中断和异常是表示系统、处理器或当前正在执行的程序或任务中存在需要处理器注意的情况的事件。它们通常导致将执行从当前运行的程序或任务强制转移到一个称为中断处理程序或异常处理程序的特殊软件例程或任务。处理器响应中断或异常而采取的动作称为服务或处理中断或异常。在程序执行过程中,响应来自硬件的信号,中断随机发生。系统硬件使用中断来处理处理器外部的事件,例如服务外围设备的请求。软件还可以通过执行INT n指令来生成中断。当处理器在执行指令时检测到错误情况(例如被零除)时,会发生异常。处理器检测各种错误情

2023-03-21 18:27:42 391

原创 操作系统

我现在开始深入操作系统。我们现在了解了一个程序运行时,是通过ELF文件格式,在内存中进行了布局,而操作系统就是对ELF文件进行解释并加载进内存中。而一个程序的布局如下图操作系统通过加载ELF文件,将程序的加载并运行。如果是静态链接,使用 PLT 直接替换,如果是动态链接则使用的是 GOT 和 PLT 共同来实现,找到程序的入口点(地址)entry_point 存放在IP寄存器中,而代码在代码段寄存器中,段寄存器中存的是偏移量,将IP寄存器中存放的基地址和段寄存描述符存放的偏移量相加得

2023-03-21 18:27:00 222

原创 CPU流水线

这样的场景显而易见的效率慢,那么我们就想出,如果每一个阶段执行完成,去通知下一个阶段去执行就行,我就去处理下一个用户的订单了。那么这样效率就提升上来了,这样我通知下一个阶段的的信息就需要一个地方存储。这个时候就有个问题,如果一个CPU有两个核心,每一个核心都有自己的一级缓存,那么当一个 on-chip 使缓存的数据发生了变化,但是另一个 on-chip 不知道上一个 on-chip 已经将数据进行了修改,这个时候就出现了数据不一致的问题,而后我们看文档得知他是实现了 MESI。为了解释流水线的这个问题。

2023-03-21 18:25:48 1220

原创 Intel 实模式和保护模式

如果一个程序已经给他分配了他的代码段,数据段,堆栈段,这个是执行到一条指令,突然要访问,另一个程序的的地址,这个时候对于其他程序来说就是不安全的,或者说他这个时候去访问操作系统的地址,程序之间不能胡乱访问,如果操作系统的内存被更改了,有可能整台计算机都会崩溃。DPL 为目标可访问的权限码。CPL 当前程序的权限码,RPL 当前程序请求的权限码。CPL 和 RPL 中取得最大值,然后和DPL进行比较,当前不相同,则抛出异常。CPL 和 RPL 中取得最大值,然后和DPL进行比较,当前相同,则允许访问。

2023-03-21 18:23:05 232

原创 Intel 发展历史

可以使用 20 位的地址总线去访问 1MB 的数据。之前主存的数据最小单位是1kb 现在主存的增加到了 1Mb 那这个时候使用 16 位的地址总线去访问,就不行了。1978 年,发布了两个版本一个是 8086 一个是 8088,8086 使用额 16位的寄存器和 16 位的数据总线,20 位的地址总线,可以读取1MB的地址空间,而8088 不同于 8086 有 8位的数据总线。当到了这一版我们发现了 当前版本增加了 三个东西,具有了保护机制。当前CPU是32位的,那么他的寄存器也扩展到了32位。

2023-03-20 19:27:12 173

原创 Intel 开发手册阅读

首先了解一个CPU得了解他是如何发展而来的,所以我先先看的他的历史部分。在此我们选择阅读 Intel 的开发手册,进一步来了解计算机。CPU的实现影响着操作系统的实现。第四卷:模型专用寄存器。第三卷:系统编程指南。

2023-03-20 19:26:29 489

原创 Ubuntu 环境安装 与 Hotspot 代码运行

所以,如果是高版本的eclipse可能需要 GTK 环境 这里我选择的是 eclipse 2019。sudo /etc/init.d/networking restart 重启网络配置。使用 eclipse 导入Hotspot源码,这里选择的 JDK 8 的源码。选择配置JDK,目录选中,之前编译好的 JDK 源码 build 包。编辑/etc/vim/vimrc.tiny 使用root权限操作。新建一个安装目录:/opt/glibc-build-2.19。注意安装Eclipse 时,需要注意JDK版本。

2023-03-20 19:25:11 225

原创 初始JVM架构

所以他会将容易回收的对象放到一堆里,不容易回收的放到一堆里,从而在回收的时候在容易回收的对象中可以重点关注一下,而不容易的回收的对象就少关注一些,这样就能以低代价进行回收。因为老年代里的对象一直回收不掉,他还会引用新生代的里面的对象,导致新生代里的对象也回收不掉,就跨代引用了,跨代引用,他就会遍历一次老年代里的对象,这增加了负担。所以为了减少去扫描老年代,我就弄一个记忆集合,他把老年代分成小块结构,标记一下那一块的老年代里有跨代,这样就少遍历老年代里的对象。// 首先加载 ExtClassLoader。

2023-03-20 19:23:09 74

原创 认识计算机网络

计算机网络是由美国军方使用,自苏联解体之后无竞争对手,因前期投入大量资本然后将该项目投入民用,让资本回流。网络是将每台计算机当做一个模块使用,比如说这台计算机是I/O型,那台计算机做CPU业务处理型。然后将两台计算使用网络连接就可以充分发挥某一个性能。

2023-03-20 19:16:13 136

原创 认识存储结构

block device driver 块设备驱动I/O:厂商生产的磁盘,需要被操作系统调用就需要实现该驱动,操作系统是一个协调者的身份,并不负责各个设备的实现。scheduler Layer I/O调度器层:何时写入磁盘,是可以影响计算机性能的,所以调度层就是用来,提高IO的吞吐量,和IO的响应时间。只要具有输入输出就都是I/O操作,CPU读取指令执行,写回是I/O,操作内存是I/O,操作磁盘是I/O,网络也是I/O。I 节点:当前存储时一切皆文件,文件所占用的逻辑块,以及文件的相关描述信息,也即索引。

2023-03-20 19:13:29 113

原创 进程,线程,协程

ELF文件约定了进程加载进内存时的格局,然后将执行流推送到CPU即可处理,CPU只认识执行流,如果切换执行流CPU就会保存执行流的上下文信息,以便切换回当前执行流。如果开启了分页模式,因为二级页表的结构,只有页目录表是全量分配的,所有就可能会出现缺页异常,这时候就会先去执行异常函数。当CPU切换执行流时,就会去访问内存,读取数据,这个时候,我们就回去访问GDT表,然后再访问页表,最后得到物理地址。用户的程序切换进程时,就会陷入内核代码中,那么这势必会降低性能,从上述描述中,我们就需要对其优化。

2023-03-20 19:08:35 78

原创 再谈C语言

为了更好的了解C语言,我们就需要了解编译器,编译约束着C语言的特性,语言的语法编译器识别才能得到想要的结构,而编译器编译出的代码是汇编代码,所以我们得先了解汇编代码,所以我们得去了解汇编语言的规范,而汇编器就是这些规范的实现。一段指令执行时,需要有人调用他,并给出自己的首地址,让别人知道自己在拿,调用当前指令片段后还需要返回继续执行,就存储一个返回地址,那么两个指令片段之间需要数据共享呢这里就需要参数传递,我们将一段指令执行过程进行封装,称为函数。如上例子,可以使用不同类型的指针赋值不同类型的值。

2023-03-20 19:07:52 147

原创 认识链接器

然后我对这个接口发起了请求,后端服务就需要从如何接受请求,如何再返回,中间出现的问题都需要进行处理,每个接口都这么写,就很烦,所以一门语言创造出来就需要对基础通用的功能进行封装,这里每个语言都需要 HTTP协议 的实现,所以每个语言还需要提供他的库函数。如果一个函数需要调用另一个函数的返回值,但是这个返回值的是个函数内部的一个地址,如果函数被释放,这地址中的值,就是脏数据,如果当前函数去接受这个地址取数据,就有可能取到一些莫名其妙的数据,这个也称为野指针。这些都是公共的接口,不需要重复编写。

2023-03-20 19:06:49 526

原创 认识汇编语言

这时,一段指令已经加载到了主存中,再开始运行指令的时,我们先来分析一下指令,一条指令他要执行,他就需要操作数据,而数据可以分为两种情况,第一种,写在指令之间固定的一开始就知道需要多少内存的数据,而第二种则是,未知的。正因为这样,就需要对数据进行规划。当栈帧弹出栈的时候,栈顶指针就会回退到,预先保存的指令地址,而栈顶获取到这个地址,回到第一个栈帧的栈底,随后弹出,而指令指针寄存器则获取到 call 的那条之后的指令,继续向下执行,而栈顶指针寄存器,因为压在上面的栈帧弹出了,他也回到了第一个栈帧的栈顶。

2023-03-17 15:20:32 641 1

原创 主存的数据排布

主存的数据排布

2023-03-17 15:16:43 75

原创 认识寄存器

寄存器

2023-03-17 15:15:58 222

原创 认识编译器

编译器

2023-03-17 15:15:57 185

原创 认识编译原理

编译原理

2023-03-17 15:12:43 68

原创 初识汇编语言

初识汇编语言

2023-03-17 15:11:41 73

原创 初识C语言

初识C语言

2023-03-17 15:11:13 46

原创 《从图灵机到冯诺依曼体系结构》

从图灵机到冯诺依曼体系结构

2023-03-17 15:08:59 522

原创 认识CPU

认识CPU

2023-03-17 15:08:49 129

原创 如何实现冯诺依曼体系结构

如何实现冯诺依曼体系结构

2023-03-17 15:07:58 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除