Fork me on GitHub

03 2019 档案

摘要:我们在前面的章节中已经详细介绍了堆在进程中的地址空间是如何分布的,对于程序来说,堆空间只是程序向操作系统申请划出来的一大块地址空间。而程序在通过 malloc申请 内存空间时的大小却是不一定的,从数个字到数个GB都是有可能的。于是我们必须将堆空间管理起来,将它分块地按照用户需求出售给最终的程序,并且 阅读全文
posted @ 2019-03-31 18:00 yooooooo 阅读(2662) 评论(1) 推荐(0) 编辑
摘要:内存映射mmap是Linux内核的一个重要机制,它和虚拟内存管理以及文件IO都有直接的关系,这篇细说一下mmap的一些要点。 修改(2015 11 12):Linux的虚拟内存管理是基于mmap来实现的。vm_area_struct是在mmap的时候创建的,vm_area_strcut代表了一段连续 阅读全文
posted @ 2019-03-31 17:06 yooooooo 阅读(8587) 评论(1) 推荐(3) 编辑
摘要:ICMP ICMP(Internet Control Message protocol)互联网信息控制协议,用于实现链路连通性测试和链路追踪,可以实现链路差错报告,属于UDP协议。ICMP有多种类型的报文,同一类型的报文会有多个不同的Code。 ping、tracert 等命令的内部就是用的 icm 阅读全文
posted @ 2019-03-29 10:59 yooooooo 阅读(1220) 评论(0) 推荐(0) 编辑
摘要:1. 动态链接器的自举 我们知道动态链接器本身也是一个共享对象,但是事实上它有一些特殊性。对于普通共享对象文件来说,它的重定位工作由动态链接器来完成。他也可以依赖其他共享对象,其中的被依赖共享对象由动态链接器负责链接和装载。可是对于动态链接器来说,它的重定位工作由谁来完成?它是否可以依赖于其他共享对 阅读全文
posted @ 2019-03-17 19:45 yooooooo 阅读(5603) 评论(2) 推荐(2) 编辑
摘要:在了解了共享对象的绝对地址的引用问题后,我们基本上对动态链接的原理有了初步的了解,接下来的问题是整个动态链接具体的实现过程了。动态链接在不同的系统上有不同的实现方式。ELF的动态链接的实现方式会比PE的简单一点,在这里我们先介绍ELF的动态链接过程在LINUX下的实现,最后我们会专门的章节中介绍PE 阅读全文
posted @ 2019-03-16 20:51 yooooooo 阅读(1309) 评论(0) 推荐(0) 编辑
摘要:local_irq_disable: local_irq_disable的功能是屏蔽当前CPU上的所有中断,通过操作arm核心中的寄存器来屏蔽到达CPU上的中断,此时中断控制器中所有送往该CPU上的中断信号都将被忽略。 disable_irq: 在全局范围内屏蔽某一个中断号(irq num)。该ir 阅读全文
posted @ 2019-03-15 14:52 yooooooo 阅读(1805) 评论(0) 推荐(0) 编辑
摘要:这几天在看Linux内核的IPC命名空间时候看到关于IDR的一些管理性质的东西,刚开始看有些迷茫,深入看下去豁然开朗的感觉,把一些心得输出共勉。 我们来看一下什么是IDR?IDR的作用是什么呢? 先来看下IDR的作用:IDR主要实现ID与数据结构的绑定。刚开始看的时候感觉到有点懵,什么叫“ID与数据 阅读全文
posted @ 2019-03-15 10:36 yooooooo 阅读(2519) 评论(0) 推荐(0) 编辑
摘要:什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构 。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 记录的存储位置=f(关键字) 这里的对应关系f称 阅读全文
posted @ 2019-03-14 15:34 yooooooo 阅读(1250) 评论(0) 推荐(0) 编辑
摘要:1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟 阅读全文
posted @ 2019-03-14 14:54 yooooooo 阅读(396) 评论(0) 推荐(0) 编辑
摘要:动态链接的确有很多优势,比静态链接要灵活得多,但它是以牺牲一部分性能为代价的。据统计ELF程序在静态链接下要比动态库稍微快点,大约为1%~5%,当然这取决于程序本身的特性及运行环境等。我们知道动态链接比静态链接慢的主要原因是动态链接下对于全局和静态的数据访问都要进行复杂的GOT定位,然后间接寻址;对 阅读全文
posted @ 2019-03-10 22:52 yooooooo 阅读(1892) 评论(0) 推荐(4) 编辑
摘要:一、为何会有rw spin lock? 在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已。spin lock严格的限制只有一个thread可以进入临界区,但是实际中,有些对共享资源的访问可以严格区分读和写的,这时候,其实多个读 阅读全文
posted @ 2019-03-07 23:09 yooooooo 阅读(796) 评论(0) 推荐(0) 编辑
摘要:Linux kernel组织管理物理内存的方式是buddy system(伙伴系统),而物理内存碎片正式buddy system的弱点之一,为了预防以及解决碎片问题,kernel采取了一些实用技术,这里将对这些技术进行总结归纳。 1 低内存时整合碎片 从buddy申请内存页,如果找不到合适的页,则会 阅读全文
posted @ 2019-03-06 12:02 yooooooo 阅读(1586) 评论(0) 推荐(0) 编辑
摘要:内核线程是直接由内核本身启动的进程。内核线程实际上是将内核函数委托给独立的进程,与系统中其他进程“并行”执行(实际上,也并行于内核自身的执行)。内核线程经常称之为(内核) 守护进程。它们用于执行下列任务。 周期性地将修改的内存页与页来源块设备同步(例如,使用mmap的文件映射)。 如果内存页很少使用 阅读全文
posted @ 2019-03-05 11:40 yooooooo 阅读(599) 评论(0) 推荐(0) 编辑
摘要:Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。 段页式机制如下图。 Linux内核地址空间划分 通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,6 阅读全文
posted @ 2019-03-03 22:07 yooooooo 阅读(822) 评论(0) 推荐(0) 编辑
摘要:一、LCD控制原理 S5PV210处理器中自带LCD控制器,控制LCD的显示,把 LCD 图像数据从一个位于系统内存的 video buffer 传送到一个外部的 LCD 驱动器接口。 类型: 1. STN(超扭曲向列),它的特点是功耗低,但亮度不足,响应时间长;(1602那种类型的) 2. TFT 阅读全文
posted @ 2019-03-03 20:04 yooooooo 阅读(6337) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示