
操作系统
文章平均质量分 95
操作系统
狂奔的乌龟
1、博客介绍:专注分享ARM Trustzone/TEE/Linux/嵌入式等领域知识,大部分是个人学习笔记,关注我,一起学习!希望在这里能和大家一起进步,星光不负赶路人,加油!
2、个人介绍:ARM/TEE/Linux等领域忠实爱好者,个人长期专注于硬件安全、系统安全、嵌入式领域安全开发工作。
3、个人语录:积累是一个漫长的过程,未来很长,一起努力,只要路是对的,就不怕路远。
4、招聘广告:目前在国内大厂上班,长期招聘高级别&有经验的硬件安全、系统安全、嵌入式底层软件架构师&SE&MDE,寻求志同道合有志之士,有意向可私信我。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
服务器SMP、NUMA、MPP体系学习笔记。
商业化处理器都致力于单核处理器的发展,其性能已经发挥到极致,仅仅提高单核芯片的速度会产生过多热量且无法带来相应性能改善,但CPU性能需求大于CPU发展速度。尽管通过增加流水线可以提高CPU的频率,但是由于缓存的增加与漏电流控制不力的因素,导致功率大幅增加,性能反而不如之前低频率的CPU。由于CPU的功率增加,导致CPU的散热问题也就更加严重,风冷已经不能解决问题了。那么,此使新的技术就出现了:多核处理器。早在1996年就有第一款多核CPU原型Hydra。2001年IBM推出第一个商用多核处理器POWER4,原创 2022-07-02 00:02:01 · 1154 阅读 · 0 评论 -
Linux 内存管理之 mmap 解析(一)
1、mmap 函数用法:#include void *mmap(void *start, size_t length, int prot, int flags,int fd, off_t offset);int munmap(void *start, size_t length);/*返回说明:成功执行时,mmap()返回被映射区的指针,munmap()返回0。失败时,mmap()返回M原创 2015-07-15 20:45:08 · 1264 阅读 · 0 评论 -
Linux 内存管理之 mmap 解析(二)
1、mmap()系统调用形式void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset ) mmap的作用是映射文件描述符fd指定文件的 [off,off + len]区域至调用进程的[addr, addr + len]的内存区域, 如下图所示:参数fd:为即将映射到进程空间的文件描述字原创 2015-07-15 21:05:15 · 1662 阅读 · 0 评论 -
物理地址与虚拟地址、统一编址与独立编址以及 I/O 端口与 I/O 内存
【摘要】物理地址与虚拟地址、统一编址与独立编址以及 I/O 端口与 I/O 内存。原创 2015-06-18 22:38:57 · 2937 阅读 · 0 评论 -
DMA (Direct Memory Access,直接内存存取)
对DMA内存的使用有3种方式:1,一致DMA映射通过dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag)来直接得到一块用于dma的内存,同时得到这一段内存的虚拟地址和总线地址,分别用于CPU和device的访问。 通过这种方式得到的dma内存,开发者不用担心cache的问题,但原创 2015-07-18 18:40:26 · 3541 阅读 · 0 评论 -
中断服务函数能不能带形参和返回值?
概述从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行中断处理。(1) 硬中断由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统原创 2015-10-19 14:30:47 · 21494 阅读 · 0 评论 -
Linux 文件系统底层实现
1、引言Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/),节点为目录,而末端的叶子为包含数据的文件。当我们给出一个文件的完整路径时,我们从根目录出发,经过沿途各个目录,最终到达文件。我们可以对文件进行许多操作,比如打开和读写。在Linux文件管理相关命令中,我们看到许多对文件进行操作的命令。它们大都基于对文件的打开和读写操作。比原创 2015-09-21 12:22:41 · 4565 阅读 · 0 评论 -
Linux 内核链表
操作系统内核常需要维护数据结构的链表。Linux 内核已经同时有几个链表实现。为减少复制代码的数量, 内核已经创建了一个标准环形双向链表,并鼓励需要操作链表的人使用这个设施.使用链表接口时,应当记住列表函数没做加锁。若驱动可能同一个列表并发操作,就必须实现一个锁方案。为使用链表机制,驱动必须包含文件 ,它定义了一个简单的list_head 类型 结构:点击(此处)折叠或打转载 2015-09-24 15:49:55 · 818 阅读 · 0 评论 -
Linux 进程与进程调度详解
进程调度发生在什么时机呢?这与引起进程调度的原因以及进程调度的方式有关。引起进程调度的原因有以下几类,(1)正在执行的进程执行完毕。这时,如果不选择新的就绪进程执行,将浪费处理机资源。(2)执行中进程自己调用阻塞原语将白己阻塞起来进入睡眠等状态。(3)执行中进程调用了P原语操作,从而因资源不足而被阻塞;或调用了v原语操作激活了等待资源的进程队列。(4)执行中进程提出I/O请求后被阻塞。(5)在分时系统中时原创 2015-09-24 15:37:41 · 3145 阅读 · 0 评论 -
Linux 下函数栈帧分析
1、关于栈对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写数据段:保存初始化的全局变量和静态变量,可读可写不可执行BSS:未初始化的全局变量和静态变量堆(Heap):动态分配内存,向地址增大的方向增长,可读可写可执行栈(Stack):存放局部变量,函数参数,当前状态,函数调用信息等,向地址减小的方原创 2016-05-11 16:51:37 · 8749 阅读 · 12 评论 -
ioremap 函数映射操作已知的物理地址(寄存器、端口、IO)
ioremap 函数来映射到内核地址空间,然后修改虚拟地址空间达到控制寄存器的状态。我用如下方法操作一个地址为0x56000020的端口原创 2015-07-23 22:10:59 · 4752 阅读 · 0 评论 -
【进程管理】fork之后子进程到底复制了父进程什么?
假定父进程malloc的指针指向0x12345678, fork 后,子进程中的指针也是指向0x12345678,但是这两个地址都是虚拟内存地址 (virtual memory),经过内存地址转换后所对应的 物理地址是不一样的。所以两个进城中的这两个地址相互之间没有任何关系。(注1:在理解时,你可以认为fork后,这两个相同的虚拟地址指向的是不同的物理地址,这样方便理解父子进程之间的独立性)(注2:但实际上,linux为了提高 fork 的效率,采用了 copy-on-write 技术,fork后,这原创 2015-04-03 09:54:08 · 24851 阅读 · 25 评论 -
C++ 内存池 -- C++ Memory Pool
这是我翻译的文章,来自 Code Project,原文作者: DanDanger2000. 原文链接: http://www.codeproject.com/cpp/MemoryPool.asphttp://blog.csdn.net/060/article/details/1326025C++ 内存池l 下载示例工程 – 105Kbl转载 2015-09-04 21:42:36 · 2847 阅读 · 0 评论 -
Linux 下父进程与子进程的通信(pipe管道)
转自http://siqun.blog.163.com/blog/static/213496001201341231121720/每个进程各自有不同的用户地址空间,任 何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,I转载 2015-04-03 09:20:43 · 15153 阅读 · 0 评论 -
进程之间的通信几大方式
1、传统的进程间通信方式无名管道(pipe)、有名管道(fifo)和信号(signal)2、无名管道(pipe)①pipe也称为无名管道,管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;②只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);③单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于原创 2015-04-03 11:15:37 · 755 阅读 · 0 评论 -
一步一步学习多线程编程之线程同步通信
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常有操作系统负责多个线程的调度和执行。在windows系统中线程间的通信一般采用四种方式:全局变量方式、消息传递方式、参数传递方原创 2015-04-05 19:55:59 · 710 阅读 · 0 评论 -
同一进程下线程共享的数据和独有的数据
线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤销线程,从而实现程序的并发执行。一般,线程具有就绪、运行和阻塞三种基本状态。 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。转载 2015-04-06 08:38:06 · 2002 阅读 · 0 评论 -
一步一步学习多线程编程之CreateThread
CreatThread函数如下图所示在这里我们只用到了第三个和第四个参数,第三个参数传递了一个函数的地址,也是我们要指定的新的线程。第四个参数是传给新线程的参数指针。 尽管上面程序看上去是并发进行,但是有时候也不一定按照线程1:线程2的输出。这涉及到多线程的同步问题。对于一个资源被多个线程共用会导致程序的混乱,我们的解决方法是只允许一个线程拥有对共享资源的独占,这样就能够解决上面的问题了。该函数用于创造一个独占资源,第一个参数我们没有使用,可以设为NULL,第二个参数指定该资源初始是否归属创建原创 2015-04-06 10:16:40 · 2209 阅读 · 0 评论 -
互斥锁与自旋锁
1、互斥锁原理 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。 互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源。可以保证以下三点:(1)原子性:把一个互斥量锁定为一个原子操作,这意味着操作系统(或pthread函数库)保证了如果一个线程锁定了一个互斥量,没有其他线程在同一时间可以成功锁定这个互斥量。(2)唯一性:如果一个线程锁定了一个互斥量,在它解除锁原创 2015-05-21 19:57:29 · 1548 阅读 · 0 评论 -
x86(32位)分页管理的机制
页的尺寸是4KB,虚拟地址的前20位用于指定一个物理页,后12位用于访问页内偏移。 页表项的结构: 层次化的设计想法: 因为4GB的虚拟内存共有1M=220=1048576个4K大小的页面。 我们将这些页面分成210=1024份,即从页表1到页表1024,由页目录表管理; 每一份(每一页表)有210=1024个页,由每一个页表管理,页在页表中是随机的,哪个页位于哪个页表中是没有规律的;原创 2015-07-28 21:18:05 · 1736 阅读 · 0 评论 -
逻辑地址、虚拟地址、物理地址以及内存管理
本文涉及的硬件平台是X86。物理地址、虚拟地址、逻辑地址、线性地址之间的关系进行了细致分析。其实,内存资源在驱动设计中的地位是至关重要的,我们要对设备进行操作,首先要获取到设备的地址。在UIO用户态驱动设计中,用户直接操作设备,我们就应该明白操作到底是什么地址,明白地址之间映射的关系,才能更好的理解这个设备。原创 2015-07-19 17:27:32 · 2803 阅读 · 0 评论 -
Linux内存寻址之一:内存地址分类以及MMU介绍(转)
对于程序员来说,可以简单的把内存地址理解为一种访问存储单元的内容的一种方式。而对于80x86系列微处理器来说,我们需要区分三种地址: 1)逻辑地址 这种地址通常使用在机器语言里用于指定操作数或机器指令的地址。该类地址在著名的80x86分段体系架构中得到了很好体现,因此DOS程序员和windows程序员都不得不把他们的程序分成一段一段的(如代码段、数据段、堆栈段等等)。每一个逻转载 2015-07-19 16:59:21 · 917 阅读 · 0 评论 -
Linux下进程管理
什么是进程呢?进程就是运行中的程序。一个运行着的程序,可能有多个进程。 比如 LinuxSir.Org 所用的WWW服务器是apache服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户来同时请求httpd服务,apache服务器将会创建有多个httpd进程来对其进行服务。1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。2)ps -A 显示所有程序。3)p原创 2015-03-30 11:04:03 · 689 阅读 · 0 评论