嵌入式Linux中文站

开发专区

Cache一致性协议之MESI

Cache一致性协议之MESI

阅读(169)

Cache一致性协议之MESI 处理器上有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种。 单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),而在多核处理器中,多个核会共享一些数据,MESI协议就包含了描述共享的状态。 在MESI协议中,每个Cache line有4个状态,可用2个bit表...

虚拟地址到物理地址的地址变换过程

虚拟地址到物理地址的地址变换过程

阅读(178)

阐述了PDP-11/40的虚拟地址到物理地址的地址变换过程。 MMU通过APR(ActivePageRegister)寄存器将虚拟地址变换为物理地址。 APR寄存器由一个PAR(PageAddressRegister)寄存器和一个PDR(PageDescriptionRegister)寄存器构成。 内核通过向与执行进程相对应的、供用户进程用使用的APR设定适当的值,保证各用户拥有独立的虚拟地址空间。 APR共有8组,APR[0]-APR[7]。进程的虚拟地址空间以页或者段为单位进行管理,一组APR对应一页...

分页内存管理——虚拟地址到物理地址的转换

分页内存管理——虚拟地址到物理地址的转换

阅读(94)

这是逻辑地址(虚拟地址),包括程序中打印的变量地址显示的都是逻辑地址,并不是内存空间上的物理地址。 每条指令在被执行时,读取操作数时需要给出操作数所在的内存地址,这个地址不能是物理主存地址,因为该程序在哪种硬件设置的机器上运行并不能事前确定,那操作系统就不能在此给出对应于某台机器的物理地址。 一、物理内存和虚拟内存 我们先来了解一下,什么是物理内存,什么又是虚拟内存? 1.物理内存:指通过物理内存条而获得的内存空间,主要作用是在计算机运行时为操作系统和各种程序提供临时储存。 2.虚拟内存:对内存架构(内存...

cpu 乱序执行与问题

cpu 乱序执行与问题

阅读(71)

CPU执行乱序是一个常见的话题,鉴于自己一直对这个概念存在些许理解的差池,故今日写一篇文章留作备忘。注,这里仅仅讨论CPU执行乱序,不涉及编译器的乱序。 1.CPU 为什么会乱序? 本质原因是CPU为了效率,将长费时的操作异步执行,排在后面的指令不等前面的指令执行完毕就开始执行后面的指令。而且允许排在前面的长费时指令后于排在后面的指令执行完。 如在 CPU0 上执行下面两句话: a = 1; b = 2; 在以下情况下 b=2 会先于 a=1 执行完:a 没有缓存于 CPU0 的 cache 上,而 b ...

Linux 文件系统IO性能优化

Linux 文件系统IO性能优化

阅读(68)

对于LINUX SA来说,服务器性能是需要我们特别关注的,包括CPU、IO、内存等等系统的优化变得至关重要,这里转载一篇非常不错的关于IO优化的文章,供大家参考和学习: 一、关于页面缓存的信息,可以用 cat /proc/meminfo 看到。其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加。 一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。Linux 用pdflush进程把数据从缓存页写入硬盘,查...

系统调用之时间开销

系统调用之时间开销

阅读(107)

一个程序使用系统调用的次数会很大程度上影响系统的性能,因为在执行系统时,会从用户代码切换执行内核代码,然后返回用户代码。优化手段就是尽量减少系统调用。一下实验用来验证系统会付出巨大d呃开支,所用时间与电脑配置、所用的系统的内核有关,故在不同的电脑或同一电脑的不同系统上会有一些差异,但是结果一定是相同的。 本人使用的系统是Mac OS X 10.8.3。 1.首先我们建立一个约1Mb的文件(file.in)用于测试。建立代码如下,当然方法有很多这只是其中的一种。 #include stdio.h #incl...

中断处理“下半部”机制

中断处理“下半部”机制

阅读(178)

1. 中断处理下半部机制 中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。 因此,Linux内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟。例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求信号时,Linux内核只是简单地标志数据到来了,然后让处理器恢复到它以前运行的状态,其余的处理稍后再进行(如把数据移入一个缓冲区,接...

linux驱动---等待队列、工作队列、Tasklets

linux驱动---等待队列、工作队列、Tasklets

阅读(270)

概述: 等待队列、工作队列、Tasklet都是linux驱动很重要的API,下面主要从用法上来讲述如何使用API. 应用场景: 等待队列(waitqueue) linux驱动中,阻塞一般就是用等待队列来实现,将进程停止在此处并睡眠下,直到条件满足时,才可通过此处,继续运行。在睡眠等待期间,wake up时,唤起来检查条件,条件满足解除阻塞,不满足继续睡下去。 工作队列(workqueue) 工作队列,将一个work提交到workqueue上,而这个workqueue是挂到一个特殊内核进程上,当这个特殊内核...