![](https://img-blog.csdnimg.cn/0566d775005c476d8940b4409cb14e4b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
操作系统
文章平均质量分 77
1
卢平光
这个作者很懒,什么都没留下…
展开
-
动态库静态库的链接过程
1、预备知识1.1、地址概念连接地址<>运行地址存储地址<>加载地址加载时地址就是程序放置的地址运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。first 0x30000000 : AT(0){main.o},表示运行地址为0x30000000,加载地址为0如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash1.2、位置代码位置无关码:指令只使原创 2020-07-26 17:52:43 · 4767 阅读 · 0 评论 -
通过调用栈排查段错误
遇到过一个问题,一个函数的调用,会概率性的无法返回,出现段错误,从现象来看肯定是内存被踩,但当时是通过逐行检查代码来定位的,略傻逼。后面从新翻出这个问题,尝试通过调用栈来确认被踩内存的具体位置。下面用简单例子来记录这个过程。1原理首先放一张调用栈的结构(数据存放的位置有出入,仅作参考)有两个重要的指针,EBP(Base Pointor)、ESP(Stack Pointor)ESP: 调用栈是自高地址往低地址生长的,即最外层函数栈在高地址,每调用深一层函数,新的函数调用栈就会往低地址生长,而ESP就原创 2020-07-31 20:48:30 · 1414 阅读 · 0 评论 -
安卓图形显示系统
图形显示架构总的来说,整个安卓显示系统是由两组生产者–消费者解构组成的:1. surface(Producer)<-> surfaceflinger(Consumer)其中两者的控制交互采用binder机制,因为surface属于各个应用充当的client进程端,而surfaceflinger为单独进程。另外,图形数据采用BufferQueue(实际为共享内存)进行关联,如下图Dequeued:出列,正在被上层使用Queued:入列,已完成上层绘制,等待SurfaceFlinge原创 2021-05-30 17:35:37 · 900 阅读 · 2 评论 -
linux内存映射(二)
一. IO映射介绍设备驱动程序要直接访问外设或其接口卡上的物理电路,这部分通常都是以寄存器的形式出现。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如ARM,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令进行,所以,这种CPU没有专门用...原创 2019-06-09 17:10:04 · 1303 阅读 · 0 评论 -
linux内存映射(一)
一. 内存映射原理由于所有用户进程总的虚拟地址空间比可用的物理内存大很多,因此只有最常用的部分才与物理页帧关联。这不是问题,因为大多数程序只占用实际可用内存的一小部分。在将磁盘上的数据映射到进程的虚拟地址空间的时,内核必须提供数据结构,以建立虚拟地址空间的区域和相关数据所在位置之间的关联,linux软件系统多级页表映射机制二. Linux的页表实现二级页表结合在CR3寄存器中存放的页...原创 2019-06-07 11:30:21 · 11103 阅读 · 0 评论 -
动态库中的函数实现互斥调用
一直在纠结一个问题:如果一个函数使用互斥锁可以防止被调用时重入的情况,但是如果该函数以so的形式提供给使用者(其它进程),那么如何做到各进程间对于该函数的互斥调用呢?首先明确下前提:so被进程加载时,代码段共享,但是所有变量(局部、全局、静态变量)都是各进程copy一份私有使用。也就是说,想要在so内实现一个不可重入的函数还是比较困难的,因为所有变量都是独立的,考虑如下场景:驱动层给了一个视频码流录制的接口,并且没有在驱动层做互斥,但实际上这个接口同一时间只可能被一个进程调用,那么很明显,串原创 2021-03-25 10:20:53 · 1194 阅读 · 1 评论 -
Android杂项积累
平时工作内容基于安卓系统,确并不直接参与安卓部分开发,而只是为安卓层提供natvie方法的调用界面、实现以及再往下的BSP相关的驱动开发。但是总感觉理解安卓系统的一些重要特性也是有必要的。本文仅记录自己对安卓框架原理上的理解,无引导性、无实用性。1、framework使用java语言做终端开发的人大致分为两类:应用开发与framework开发。应用开发总的来说是使用安卓系统提供的原材料与框架编写特定需求的app,假如某些功能framework并未提供,例如你的产品需要使用一款奇葩的传感器,原生frame原创 2021-03-14 20:22:26 · 984 阅读 · 1 评论