自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 资源 (1)
  • 收藏
  • 关注

原创 CSAPP 并发编程

首先一定要清楚地意识到:『并行编程不简单』!最主要的原因恐怕就是我们自己的大脑,人脑实际上是一个非常精妙的系统,所采取的并行策略是一明一暗两条线,但是对于明线来说,是线性的,于是就和计算机中并行的概念冲突了。另外时间这个概念也是线性的,这就导致了想要处理好并行程序可能出现的各种问题几乎是不可能的(或者常常要出错)。常见的错误有仨:竞争条件[2]、死锁[3]和活锁[4],尤其是在现在的多核处理器架构中,更容易出现这类并行问题。我们前面实现的服务器,一次只能处理一个请求,只有当前的请求处理完了,才能继续处理下一

2022-06-30 16:24:43 175 1

原创 CSAPP 网络编程

计算机网络的知识可谓是非常『保值』的,因为这么多基础设备还在运行着,基本机制在短时间内很难改变,关于网络的相关的讲解还有参考链接[1][2],我觉得也非常不错,大家感兴趣可以看看。客户端-服务器模型是网络应用最广泛使用的模型,客户端进程发送请求给服务器进程,服务器进程获取所需资源并响应客户端进程的请求,客户端进程收到响应后展示给用户。网络相关的处理,都是通过网络适配器来完成的,具体在硬件上为(右下角):根据网络的应用范围和架构层级,可以分成三个部分:由若干主机(hosts)通过交换机(hub)连接,通常

2022-06-17 10:19:00 211

原创 CSAPP 虚拟内存02

前面了解了虚拟内存的相关知识,这一节我们来看看动态内存分配的基本概念,相信这之后就知道诸如 malloc 和 new 这类方法是怎么做的了。虽然可以使用低级的mmap和munmap函数来创建和删除虚拟存储器的区域,但是mmap是静态的,是在编写代码就要确定好大小,而大多数C程序还是会在运行时需要额外虚拟存储器。这样就需要使用一种动态存储器分配器(dynamic memory allocator)。程序员通过动态内存分配(例如 malloc)来让程序在运行时得到虚拟内存。动态内存分配器会管理一个虚拟内存区

2022-06-08 09:55:42 177

原创 CSAPP 虚拟内存01

一般我们把内存看做是一个由M个连续的字节大小的单元组成的数组,而这个数组的下标就是物理地址。第一个字节的地址为0,接下来的字节地址为1,以此类推。CPU通过物理地址找到内存中的数据,这种查找数据的方式叫做物理寻址。相对应的,通过虚拟地址找到内存中的数据,称为虚拟寻址。主要寻址流程是通过 MMU(Memory management unit)把虚拟地址(Virtual Address, VA)转换为物理地址(Physical Address, PA),再由此进行实际的数据传输。大致的过程如下图所示使用虚

2022-06-07 10:37:20 311

原创 CSAPP 系统级I/O

Unix I/O接触Linux的同志们都听过一句话:“Linux下一切皆文件”。所以,I/O 设备也是用文件来表示的,比如:./dev/sda2 (/usr 磁盘分区)/dev/tty2 (终端)甚至连内核也是用文件来表示的:/boot/vmlinuz-3.13.0-55-generic (内核镜像)/proc (内核数据结构)因为 I/O 设备也是文件,所以内核可以利用称为 Unix I/O 的简单接口来处理输入输出,比如使用 open() 和 close() 来打开和关闭I/O(文

2022-05-23 16:53:36 160

原创 Spring @Scheduled失效问题

定时任务一直用的spring的@Scheduled注解,有天突然发现所有的定时任务突然全部不执行了。查看日志看到其中一个定时任务一直在一个循环里运行没结束。通过这里可以发现@Scheduled启动过程是一个单线程同步启动过程,故一旦中途被阻塞,会导致整个启动过程阻塞,其余的定时任务都不会启动。网上的教程是添加异步注解@Async@Component@EnableSchedulingpublic class AsyncTaskHandlerTask { @Scheduled(fixedD

2022-05-17 15:13:20 2879

原创 CSAPP 异常控制流

每次从一条指令过渡到另外一条指令的过程称为控制转移,这样的一个控制转移序列叫做控制流,如果每条指令都是相邻的,这样的过渡就是平滑序列。如果一条指令与另外一条指令不相邻,这样突发性的过渡称为异常。从进程切换、用户态与内核态的转换到系统实时响应各种事件,都离不开异常这个概念。异常控制流从开机到关机,处理器做的工作其实很简单,就是不断读取并执行指令,每次执行一条,整个指令执行的序列,称为处理器的控制流。到目前为止,我们已经学过了两种改变控制流的方式:跳转和分支调用和返回这两个操作对应于程序的改变。但

2022-05-16 23:07:56 401

原创 CSAPP 链接

概述链接(linking)就是将不同部分的代码和数据收集和组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行,链接就是编译的其中一个步骤,要理解链接就需要先大致了解编译是什么。编译C 语言代码最终成为机器可执行的程序,会像流水线上的产品一样接受各项处理:预处理器:将 C 语言代码(da.c)转化成 da.i 文件(gcc –E),对应于预处理命令 cpp编译器:C 语言代码(da.c, wang.c)经过编译器的处理(gcc -0g -S)成为汇编代码(da.s, wang.

2022-05-06 10:47:32 546

原创 CSAPP 内存与缓存

基础知识随机存取存储器随机存取存储器(RAM, Random-Access Memory)是一种易失性存储器,简单来说就是一旦不通电,所有的信息都会丢失。如果想要让数据持久化,可以考虑 ROM, PROM, EPROM, EEPROM 等非易失性存储器。RAM有两种:SRAM(Static RAM):SRAM 非常快,也不需要定期刷新,通常用在处理器做缓存,例如L1,L2,L3缓存,但是比较贵;DRAM(Dynamic RAM):DRAM 稍慢一点(大概是 SRAM 速度的十分之一),需要刷新,通

2022-04-12 16:22:49 480 1

原创 CSAPP 机器指令

数据格式大多数GCC生成的汇编代码指令都有一个字符后缀,表明操作数的大小。访问信息64位的CPU包含一组16个存储64位值的通用寄存器。%r8~%r15为64位CPU新加入的寄存器。操作数指示符立即数(Immediate):常数值寄存器(Register):表示某个寄存器的内容存储器(Memory):引用,它会根据计算出来的地址(有效地址)访问某个存储器位置数据传送指令简单传送传送零扩展的字节传送符号扩展的字节条件码除整数寄存器外,CPU还维护着一组单个位的条件码寄存器

2022-04-09 19:52:32 1195

原创 CSAPP 浮点数

概述最近在读CSAPP,浮点数这部分啃了很久才理顺,在此简单记录下书中一些比较难懂的点浮点数的浮点是什么意思?简单来说就是计算机表达的二进制数是定长的,浮点就代表着小数点可以左移可以右移,比如4位二进制1.011,或者101.1都是浮点数。由于普通的定点表示法不能有效表示非常大的数字。例如表达式5*2^100是101后面跟了100个0,我们希望使用一种更简洁高效的办法表示,IEEE浮点表示应运而生。IEEE浮点数浮点数表示IEEE浮点数的格式:![Snipaste_2022-03-31_16-

2022-04-01 18:04:17 203 1

15-445笔记(思维导图)

19年版,笔记除了最后两节课(oracle工程师演讲和数据库介绍)

2022-12-15

微积分代码

wave player wave player wave player wave player wave player

2018-05-04

空空如也

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

TA关注的人

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