Nehalem单独的核心架构:大概仅有1/3的芯片面积用来做L1和L2的高速缓存。另外1/3用来部署乱序执行单元引擎和其他零碎的部件。最后1/3的面积用来实现解码单元的功能,分支预测逻辑判定功能,内存的排序和页处理功能。除了单独的处理核心之外,Intel还未所有的处理核心设计了8MB超大L3高速缓存。它可以很显著的改善各个核心之间的负载平衡。小熊在线www.beareyes.com.cn在上面这张
一、如何判断链表中有无环解法:设置了两个指针p和q,他们分别以速度为1和2前进(公式应该是p和q分别以速度为v1和v2且|v2-v1|为1),如果到某一次循环发现他们相等,即都指向同一结点(空节点除外,以后讨论的节点都不包含空节点),则说明这个单向链表中存在循环。否则就是没有循环。二、最大子序列问题:给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得
RCU:读-拷贝-更新众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用,但是它存在两个问题。1.它的开销相对于CPU速度而言就越来越大随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差
顺序锁是对读写锁的一种优化,只是为写者赋予更高的优先级。 1.读执行单元绝对不会被写执行单元阻塞。即读执行单元可以在写执行单元对被顺序锁保护的共享资源进行写操作的同时仍然可以继续读,而不必等待写执行单元完成之后再去读,同样,写执行单元也不必等待所有的读执行单元读完之后才去进行写操作 2.写执行单元与写执行单
用在多个CPU系统中的锁机制,当一个CPU正访问自旋锁保护的临界区时,临界区将被锁上,其他需要访问此临界区的CPU只能忙等待,直到前面的CPU已访问完临界区,将临界区开锁。自旋锁上锁后让等待线程进行忙等待而不是睡眠阻塞,而信号量是让等待线程睡眠阻塞。自旋锁的忙等待浪费了处理器的时间,但时间通常很短,在1毫秒以下。 自旋锁用于多个CPU系统中,在单处理器系统中,自旋锁不起锁的作用,只是禁
目的:避免指令重新排序。优化屏障:保证编译器程序不会混淆放在原语操作之前的汇编语言指令和放在原语操作之后的汇编语言指令。在linux中,优化屏障是barrier()。展开为asm volatile("":::"memory")。指令asm告诉编译器程序要插入汇编语言片段,volatile禁止编译器把asm指令与程序中的其他指令重新组合。使得编译器不能使用存放在cpu寄存器中的内存单元的值来优化as
每CPU变量主要是数据结构的数组,系统的每个CPU对应数组的一个元素,一个CPU不应访问与其他CPU对应的元素,另外,它可以随意读写它自己的元素而不担心出现竞争条件。但这意味着每CPU变量基本上只能在特殊情况下使用,也就是当它确定在系统的CPU上的数据在逻辑上十独立的时候。内核抢占可能使每CPU变量产生竞态条件:一个CPU获取了它的每CPU变量本地副本的地址,然后它因被抢占而转移到另外一个CPU上
1.1 CFS原理 cfs定义了一种新的模型,它给cfs_rq(cfs的run queue)中的每一个进程安排一个虚拟时钟,vruntime。如果一个进程得以执行,随着时间的增长(也就是一个个tick的到来),其vruntime将不断增大。没有得到执行的进程vruntime不变。 而调度
命令历史以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim 直接启动vimvim filename 打开vim并创建名为filename的文件文件命令打开单个文件vim file同时打开多个文件vim file1 file2 file3 ...在vim窗口中打开一个新文件:open file在新窗口中打开文件:spli
用 vundle 来管理 vim 插件首先vundle 来管理vim 是潮流,并且方便快捷它使用类似 Ruby Bundler 的方式来管理插件,你只需要在.vimrc里面用Bundle声明插件具体参考下面的介绍vundle.txt下面介绍下我的安装过程下载MacVim在~/目录下面创建 .vim 目录,然后再创建 .vim/bundlecd ~/.vim/bundle 目录,然后执行 git c
Linux 的文件与目录现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换言之,UNIX 系统中除进程之外的一切皆是文件,而 Linux 保持了这一特性。为了便于文件的管理,L
我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:#define __DE
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号