- 博客(14)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 程序是怎么跑起来的——虚拟内存与动态链接
0、前言计算机的核心任务就是运行程序,而程序是如何运行的?这个问题一直困扰我很多年。网上有很多资料介绍程序如何被编译,如何被链接,然后装载,最后到OS中运行的,但都很分散,讲到的都是点,很少有串起来的;而串起来的又很少是基于64位的版本,大部分还是32位的程序。再加上讲原理的多,讲例子的少,读起来费劲,更不用说理解与记忆了。比如,对于动态链接,我相信很多童鞋跟我一样,好不容易看懂了,结果过了几...
2019-05-30 10:43:55
884
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 称球问题的通用解法
最近看了个算法题 据说还是google面试题之一,大意是:八个球已知其中有一个是偏重的,问最少几次称出来?之前我在网上还有个更难的,大意是:13个球已知其中有一个重量异常(重或者轻),给一个天平3次称出那个异常球。 仔细想想 其实这两个题目是有紧密联系的。13球问题的解答需要用到8球问题的解法。先看看 8球与13球问题的解法: 8球:先将球8个球分成3堆:3,3,2
2009-11-13 13:06:00
1092
原创 CPU的原子指令
普通的为何不是原子的?这跟CPU执行指令的过程有关。加一指令其实远远没有看上去这么简单,它进过了三个步骤才能完成;1、从内存loadcount变量到CPU寄存器;加入放入了a寄存器;2、再将a寄存器的值发送到累加器执行加法操作;3、将结果写回到count内存。而这三个步骤不是原子的,多线程访问会出现竞争,但是问题又来了,那么多线程为什么会竞争count变量呢?原来产生问题除开指令不是原子执行的,还有个关键的因素:变量共享多线程模型。这也是主流的线程模型:1、线程由进程创建,也叫做;
2023-04-11 20:31:21
814
原创 一图搞定CPU内存管理
先总结,图在????1、作为OS的基础,CPU能支持什么内存访问模型,OS就必须跟随;2、Intel CPU支持分段与分页两种模型;3、Intel CPU的访存模型是先分段再分页的模式,所以涉及到从逻辑地址->线性地址->物理地址的转换;这部分在CPU的MMU模块中由电路实现;4、逻辑地址为程序二进制的地址,是偏移量的形式存在,是个相对地址;这部分跟分段模型紧密相关;分段模型负责将CPU拿到的逻辑地址(主要是几个寄存器的值,GDTR,CD,DS,SS)转成一个线性地址(线性地址由OS生成
2021-03-16 14:59:54
452
原创 多线程编程那些事
多线程编程那些事先看一段代码:package jvm.valatile;public class VolatileTest extends Thread { boolean flag = true; long i = 0L; @Override public void run() { while (flag) { i++; } } public static void main(String[
2021-03-16 14:57:51
149
原创 性能调优那些事儿
性能调优那些事儿问题性能优化是软件开发中最重要的活动,也是软件工程中的深水区,可以说也是衡量一个程序员能力高低的标准。在大厂的面试中性能调优的问题也是最常见的,比如:为什么Nginx的单线程处理网络连接模型吞吐量与效率会如此之高?为什么Kafka的吞吐量会比其他的消息队列高?redisTPS/QPS比关系型数据库高出几个数量级?要想回答这些问题,需要做很多的实践与探索,而且要面对杂乱无章的、真真假假的网络文章,需要耗费大量的时间,这也就是程序员常说的“我变强了,也TM秃了”的感慨原因。虽然性能调优的
2021-03-16 14:55:48
478
原创 换个角度彻底理解红黑树
0 、前言红黑树是软件工程中非常重要的数据结构,在很多的工程领域都有它的身影,比如java的treemap、linkedhashmap,linux内核、linux的高并发多路复用利器epoll的核心数据结构就是红黑树;然而这个数据结构却不是那么容易理解,特别是网络上缺少对红黑树本质的分析,一般都是自底向上的来讲述,非常tricky,往往看了一段就不知所云,最后放弃了。但是,红黑树真的没这么复杂...
2019-05-30 10:46:29
216
原创 程序是怎么运行的
一直想写篇文章来说明在程序运行过程中操作系统都干了些什么事。下面我试着说明:首先,任何程序都是有格式的,所谓无规矩不成方圆,任何美的,精巧的食物都是精密组织的,程序也一样。我之前用的最多的是c#与java,有趣的是,当时很多人嘲笑java与c#们一直在用脚本写程序,大概在他们眼里c与c++才是真正的程序。但是,现实就是现实,其实我们都是在一个叫做虚拟机的程序下写托管代码,它掌握着程序的编译,链
2015-03-31 21:18:51
860
原创 快速求出淘汰赛中轮空场次-最简单的算法
如果快速求出N个人参加的淘汰赛中轮空的场次数。N可以使任意数,也就是任意人数参加的比赛。 例如:37个人参加淘汰赛,那么无论怎么安排比赛顺序,总是有4场比赛有运动员会轮空。 答案是:假如m个人参加比赛,N是大于或者等于m的最小2次幂。例如对于m=37来说,N就是2^6=64。那么,令s=N-m。对于m=37来说s=27。那么轮空数Result等于s的二进制表示方法中
2009-11-13 13:19:00
10794
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人