
Linux Kernel
文章平均质量分 90
LinuxWorking
热爱嵌入式linux研究。
展开
-
container_of和list_for_each_entry 及其相关函数的分析
Linux代码看的比较多了,经常会遇到container_of和list_for_each_entry,特别是list_for_each_entry比较多,因为Linux经常用到链表,虽然知道这些函数的大概意思,但一旦出现一个类似的函数比如list_for_each_entry_safe就又会感到头大,所以下定决心分析总结一下这些函数的用法,以后再看到这些面孔的时候也会轻松很多,读Linux代码的原创 2017-11-08 22:25:33 · 382 阅读 · 0 评论 -
ARM Linux系统调用的原理
操作系统为在用户态运行的进程与硬件设备进行交互提供了一组接口。在应用程序和硬件之间设置一个额外层具有很多优点。首先,这使得编程更加容易,把用户从学习硬件设备的低级编程特性中解放出来。其次,这极大地提高了系统的安全性,因为内核在试图满足某个请求之前在接口级就可以检查这种请求的正确性。最后,更重要的是这些接口使得程序具有可移植性,因为只要内核所提供的一组接口相同,那么在任一内核之上就可以正确地编译和执原创 2017-11-08 22:18:52 · 694 阅读 · 0 评论 -
文件系统VFS数据结构
标签:Linux虚拟文件系统四大对象:1)超级块(super block)2)索引节点(inode)3)目录项(dentry)4)文件对象(file)一个进程在对一个文件进行操作时各种对象的引用过程如下:通过task_struct得到files_struct,然后通过文件描述符(int fd)获得相应的文件对象(file **fd),接下来获得目录项对象(den原创 2017-11-08 19:17:59 · 406 阅读 · 0 评论 -
malloc内核实现原理
考虑这样一种常见的情况:用户进程调用malloc()动态分配了一块内存空间,再对这块内存进行访问。这些用户空间发生的事会引发内核空间的那些反映?本文将简单为您解答。1.brk系统调用服务例程malloc()是一个API,这个函数在库中封装了系统调用brk。因此如果调用malloc,那么首先会引发brk系统调用执行的过程。brk()在内核中对应的系统调用服务例程为SYSCALL_DEFINE原创 2017-11-08 09:26:45 · 1548 阅读 · 0 评论 -
linux 内存管理的slab机制分析
Linux内核中基于伙伴算法实现的分区页框分配器适合大块内存的请求,它所分配的内存区是以页框为基本单位的。对于内核中小块连续内存的请求,比如说几个字节或者几百个字节,如果依然分配一个页框来来满足该请求,那么这很明显就是一种浪费,即产生内部碎片(internal fragmentation)为了解决小块内存的分配,Linux内核基于Solaris 2.4中的slab分配算法实现了自己的slab分原创 2017-11-08 09:22:41 · 614 阅读 · 0 评论 -
linux进程地址空间
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的应用程序,它是怎么做到的呢?呵呵,这一切的一切都是个迷呀,下面我们就一步一步解开心中的谜团吧!原创 2017-11-05 20:39:18 · 308 阅读 · 0 评论 -
linux 虚拟文件系统实现
虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以同一的方式访问各种I/O设备。虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持。1. 虚拟文件系统的作用虚拟文件系统(VFS)是linux内核和存储设备之间的抽象层,主要有以下好处。- 简化了应用程序的开发:应用通过统一的原创 2017-10-12 14:03:43 · 908 阅读 · 0 评论 -
linux系统调用分析
1. 什么是系统调用简单来说,系统调用就是用户程序和硬件设备之间的桥梁。用户程序在需要的时候,通过系统调用来使用硬件设备。系统调用的存在,有以下重要的意义:1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发。 比如:用户程序通过write()系统调用就可以将数据写入文件,而不必关心文件是在磁盘上还是软盘上,或者其他存储上。2原创 2017-10-12 13:57:54 · 300 阅读 · 0 评论 -
对linux进程的理解
进程是UNIX操作系统抽象概念中最基本的一种,其中涉及进程的定义以及相关的概念,比如线程;它们在内核中如何被列举?如何创建?最终又如何消亡?让我们通过下面的分析,一步步解开内核进程的神秘面纱。1. 进程和线程进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的。Linux中的进程于Windows相比是很轻量级的,而且不严格区原创 2017-10-12 13:32:09 · 401 阅读 · 0 评论 -
Linux 虚拟地址,逻辑地址,物理地址
逻辑地址(Logical Address):包含在机器语言指令中用来指定一个操作数或一条指令的地址,每个逻辑地址都由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址之间的距离。由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干;应用编程中,变量a,原创 2017-10-12 13:27:08 · 539 阅读 · 0 评论 -
linux内核进程调度
1. 什么是调度现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程)。个管理程序就是调度程序,它的功能说起来很简单:1.决定哪些进程运行,哪些进程等待;2.决定每个进程运行多长时间。此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断。总之,调度是一个平衡的过程。一方面,它要原创 2017-10-12 13:01:19 · 320 阅读 · 0 评论 -
linux内存管理深入分析
内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决)。所有内核的内存管理必须要简洁而且高效。1.linux 内存管理涉及的概念1.1 页内核把页作为内存管理的基本单位,内存管理单元(MMU)通常以页为单位进行处理。从虚拟内存的角度看,页就是最小单位。在linux系统中可以用如下命令来查看系统内存页的大小:[b原创 2017-10-12 12:14:18 · 331 阅读 · 0 评论