![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux内核
文章平均质量分 89
萨达
ZS_Wang_Blogs
嵌入式兴趣爱好者,为嵌入式而生
展开
-
linux内核学习17---根文件系统
linux文件系统初始化过程主要分为三个阶段:挂载rootfs,提供第一个挂载点’’/;加载initrd,扩展VFS树;执行init程序,完成linux系统的初始化。下面会详细介绍每个阶段的主要内容。vfs_caches_init()负责挂载rootfs文件系统,并创建了第一个挂载点目录:’/’;rest_init()负责加载initrd文件,扩展VFS树,创建基本的文件系统目录拓扑;init程序负责挂载磁盘文件系统,并将文件系统的根目录从rootfs切换到磁盘文件系统;参考:h原创 2021-11-09 18:18:44 · 1423 阅读 · 0 评论 -
linux内核学习15---Ex2 和 Ex3 文件系统
1. 文件系统介绍:(1)、Ext2: 是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的 x86 电脑系统中,簇最大为 4KB, 则单一文件大小上限为 2048GB, 而文件系统的容量上限为 16384GB。但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,因此实际上能使用的文件系统容量最多也只有 2048GB。(2)、原创 2021-11-08 17:12:56 · 504 阅读 · 0 评论 -
linux内核学习14---回收页框和交换空间
页框回收算法:阐述了内核回收页框的原因与策略。反向映射:技术补充,介绍了内核使用的一种数据结构,借助该结构,内核可快速定位指向同一个页框的所有页表项。PFRA实现:介绍 Linux 使用的页框回收算法。交换:讲述了交换子系统,它将匿名页(并非文件的映射数据)保存到磁盘的内核部件。1. 页框回收算法Linux 内核的页框回收算法(page frame reclaiming algorithm, PFRA)采取从用户态进程和内核高速缓存“窃取”页框的办法补充伙伴系统的空闲块列表。页框回收算法的目标之原创 2021-11-08 16:52:50 · 245 阅读 · 0 评论 -
linux内核学习13:时钟、定时器、延时/定时机制
1、时钟和定时电路Linux内核必须完成两种主要的定时测量 ,我们可以对此加以区分:保存当前的时间和日期 ,以便能通过time()、ftime()和gettimeofday()系统调用把它们返回给用户程序,也可以由内核本身把当前时间作为文件和网络包的时间戳。维持定时器 ,这种机制能够告诉内核或用户程序某一时间间隔已经过去定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的。https://www.iteye.com/blog/wangyuxxx-17257922.、定时器3、延时/定原创 2021-11-06 22:01:12 · 1991 阅读 · 0 评论 -
linux内核学习12:Linux内核中的同步机制,进程的同步同步机制,线程的同步机制
1. 什么是同步,为什么要同步,什么是互斥1.1 同步和互斥同步:用于实现控制多个进程按照一定的规则或顺序访问某些系统资源的机制。互斥:实现控制某些系统资源在任意时刻只能允许一个进程访问的机制。互斥是同步机制中的一种特殊情况。1.2 为什么要同步 在操作系统引入了进程概念,进程成为调度实体后,系统就具备了并发执行多个进程的能力,但也导致了系统中各个进程之间的资源竞争和共享。另外,由于中断、异常机制的引入,以及内核态抢占都导致了这些内核执行路径(进程)以交错的方式运行。对于这些交错路径执行原创 2021-11-05 11:40:34 · 1372 阅读 · 0 评论 -
linux内核学习11:信号
信号 (signal)signal机制可以被理解成进程的软中断, 用信号处理来模拟操作系统的中断功能软中断是执行中断指令产生的,而硬中断是由外设引发的。https://zhuanlan.zhihu.com/p/85597791信号全称为软中断信号,也有人称软中断。软中断信号(signal,又简称为信号)用来通知进程发生了异常事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程原创 2021-10-26 17:17:46 · 2017 阅读 · 1 评论 -
linux内核学习1:进程间通信IPC
1. 管道 (PIPE)管道实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。管道的特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。 比如fork或exec创建的新进程,在使用exec创建新进程时,需要将管道的文件描述符作为参数传递给exec创建的新进程。当父进程与使用fork创建的子进程直原创 2021-07-27 23:54:54 · 872 阅读 · 0 评论 -
linux内核学习10.1:Linux内核ARM7架构异常中断向量表
https://www.cnblogs.com/sky-heaven/p/8028978.htmlhttps://blog.csdn.net/weixin_42262944/article/details/107426398原创 2021-10-26 10:57:19 · 2714 阅读 · 0 评论 -
linux内核学习10:中断和异常
一、中断1.1 中断的概念中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的 CPU 暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)。软件对硬件进行配置后,软件期望等待硬件的某种状态(比如,收到了数据),这里有两种方式,轮询(polling): CPU 不断的去读硬件状态。中断:当硬件完成某种事件后,给 CPU 一个中断,让 CPU原创 2021-10-15 15:13:31 · 9341 阅读 · 0 评论 -
linux内核学习10.2:编写一个I/O中断
linux驱动编写一个中断,有下面几步操作:申请中断注册的中断服务函数卸载中断申请中断使用的函数有inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)int request_threaded_irq(unsigned int irq, irq_handler_t handler, ir原创 2021-10-15 15:03:42 · 396 阅读 · 0 评论 -
linux内核学习9:Linux的进程调度
一、什么是进程调度出现背景:无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。进程调度,是确保进程能有效工作的一个内核子系统。调度程序负责决定将哪些进程投入到运行,何时进行以及运行多长时间。进程调度程序(通常简称为调度程序)可看成是可运行态进程之间分配有限的处理器时间资源的内核子系统。进程调度是对TASK_RUNNING状原创 2021-10-12 11:34:52 · 4697 阅读 · 0 评论 -
linux内核学习8:Linux IO模型
参考:https://blog.csdn.net/z_ryan/article/details/80873449https://blog.csdn.net/en_joker/article/details/105510682一、同步、异步、阻塞与非阻塞例子故事:老王烧开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。老王想了想,有好几种等待方式1.老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。-同步阻塞老王想了想,这种方法不够聪明。2.转载 2021-09-30 17:31:57 · 127 阅读 · 0 评论 -
linux内核学习14---系统调用(sys_read+sys_write流程跟踪)
参考:https://blog.csdn.net/u012319493/article/details/85331567访问基于磁盘的文件是一种复杂的活动,既涉及 VFS 抽象层、块设备的处理,也涉及磁盘高速缓存的使用。将磁盘文件系统的普通文件和块设备文件都简单地统称为“文件”。访问文件的模式有多种:规范模式:规范模式下文件打开后,标志 O_SYNC 和 O_DIRECT 清 0,且它的内容由 read() 和 write() 存取。read() 阻塞调用进程,直到数据被拷贝进用户态地址空间。原创 2021-09-02 11:51:55 · 3839 阅读 · 0 评论 -
linux内核学习6:Linux的CPU高速缓存cache和页高速缓存cache,buffer
一、CPU高速缓存(cache)参考:https://blog.csdn.net/u014470361/article/details/80060701cache,中译名高速缓冲存储器,其作用是为了更好的利用局部性原理,减少CPU访问主存的次数。简单地说,CPU正在访问的指令和数据,其可能会被以后多次访问到,或者是该指令和数据附近的内存区域,也可能会被多次访问。因此,第一次访问这一块区域时,将其复制到cache中,以后访问该区域的指令或者数据时,就不用再从主存中取出。注意:这里的cache一般是S原创 2021-09-01 11:33:20 · 3301 阅读 · 1 评论 -
linux内核学习5:虚拟文件系统(VFS)
参考https://blog.csdn.net/qq_34556414/article/details/109007718https://blog.csdn.net/u012319493/article/details/85016519一、虚拟文件系统(VFS)的作用Linux的成功因素之一是它具有与其它操作系统和谐共存的能力,其中代表作之一就是虚拟文件系统(VFS)。VFS的思想是把不同类型文件的共同信息放入内核,具体思路是通过Linux在用户进程(或C库)和文件系统之间引入了一个抽象层,该抽象层原创 2021-08-30 15:12:32 · 1693 阅读 · 0 评论 -
linux内核学习4:linux的进程
什么是进程: 进程是任何多道程序设计的操作系统中的基本概念。通常把进程定义为程序执行的一个实例。在Linux中,常把进程称为任务task或线程thread。参考:https://blog.csdn.net/fickyou/article/details/75040699进程互斥:https://blog.csdn.net/ai977313677/article/details/724114889...原创 2021-08-23 20:57:01 · 822 阅读 · 0 评论 -
linux内核学习3:linux的进程地址空间
在前一章我们知道伙伴算法通过__get_free_pages()或alloc_pages()从分区页框中获得页框slab分配器通过kmem_cache_alloc()或kmalloc()为专用或通用得对象分配块vmalloc通过vmalloc()或vmalloc_32()获得一块连续的非连续的内存区。如果所请求的内存区得以满足,这些函数都返回一个页描述符地址或线性地址(即所分配动态内存的起始地址)之所以得以分配,是因为:内核是操作系统中优先级最高的成分内核信任自己但是当给用户态进程分原创 2021-08-16 17:59:02 · 915 阅读 · 0 评论 -
linux内核学习2:内存管理
一、页框管理1.1. 页框的定义和数据结构内核以页框为基本单位管理物理内存,分页单元中,页指一组数据,而存放这组数据的物理内存就是页框,当这组数据被释放后,若有其他数据请求访问此内存,那么页框中的页将会改变。内核必须记录每个页框当前的状态。如,内核必须能区分哪些页框包含的是属于进展的也,哪些页框包含的是内核代码或者内核数据。同理,内核还必须能确认动态内存中页框是否空闲。这种状态信息被保存在一个描述符数组中,每个页框对应数组中的一个元素,这种类型为sruct page描述符struct page是内存原创 2021-08-13 10:59:54 · 1853 阅读 · 0 评论 -
linux内核学习1:内存地址(1)
1. 程序反汇编机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,才能构成线性地址。也就是说 0x80495b0 是当前任务的DS数据段内的偏移2. LINUX地址分类当使用80x86微处理器时,必须原创 2021-07-28 21:52:34 · 1490 阅读 · 0 评论