![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux内核
-西西弗斯
这个作者很懒,什么都没留下…
展开
-
Linux内核编译
www.kernel.orgtar zxv abc.tar.gz重启系统,发现新内核已经安装原创 2021-01-26 20:34:55 · 107 阅读 · 0 评论 -
linux驱动学习笔记 -1
每个设备一个驱动,应用程序通过内核可以调用很多设备的驱动去操作设备insmod加载内核后,用lsmod查看输出。rmmod删除内核后,看到myexit有输出原创 2021-01-20 20:58:25 · 97 阅读 · 0 评论 -
Linux内核学习笔记 -51 工程实践-编写块设备驱动的基础3
ramdisk-driver.c#include <linux/fs.h>#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/init.h>#include <linux/vmalloc.h>#include <linux/blkdev.h>#include <linux/genhd.h>#include <.原创 2020-08-20 22:32:52 · 233 阅读 · 0 评论 -
Linux内核学习笔记 -50 工程实践-编写块设备驱动的基础2
在用户空间里面,比如说有一个数据buffer,这个数据buffer怎么通过write这个函数写入到eMMC的存储空间?比如在用户空间使用open函数来打开data目录下的test这个文件,调用write函数,将这个data的buffer写入到这个文件里面,我们的问题是,这个write函数它经历过linux内核里面什么样的内核模块以及经历些什么样的数据结构,它才能把这个data的数据写入到eMMC里面的Sector里面?首先,我们调用write这个函数,往这个句柄里面写数据的时候,那么在内核空间...原创 2020-08-20 22:30:11 · 217 阅读 · 1 评论 -
Linux内核学习笔记 -49 工程实践-编写块设备驱动的基础
块设备可以随机存储。字符设备,比如键盘,只能按照输入顺序存取,不可随机,打乱输入的字节流。文件系统层,包括常见的文件系统,以及虚拟文件系统层VFS,字符设备可以直接用应用程序打开。块设备不会在应用程序直接打开,而是要通过文件系统访问块设备。通用块层:为了通用的块设备,建立了一个统一的模型,这一层的主要工作是接收文件系统层发出的磁盘请求,并最终向磁盘设备发出io请求,所以它隐藏了很多底层硬件块设备的细节,为块设备提供了一个抽象的模型。IO调度层:接收通用块层发出的IO请求,缓存这些请求,...原创 2020-08-20 22:27:28 · 189 阅读 · 0 评论 -
Linux内核学习笔记 -48 动手实践-编写字符设备驱动程序
在linux内核中,字符设备是由dev结构体来描述的,它位于/include/linux/cdev.h中/* SPDX-License-Identifier: GPL-2.0 */#ifndef _LINUX_CDEV_H#define _LINUX_CDEV_H#include <linux/kobject.h>#include <linux/kdev_t.h>#include <linux/list.h>#include <linux/dev原创 2020-08-20 22:19:43 · 265 阅读 · 0 评论 -
Linux内核学习笔记 -47 块设备驱动简介
块设备驱动程序提供了面向块的设备访问,这种设备以随机访问的方式传输数据,并且数据总是具有固定大小的块,块设备和字符设备的区别是什么?块设备上可以通过mount文件系统,而字符设备是不可用的。数据经过块设备相比操作字符设备,需要经历一个数据缓冲层(buffer cache)机制,如图所示。块(驱动)设备模型:上图为示意图。应用程序有两种方式访问一个块设备,一种是通过/dev目录,一种是文件系统挂载点,前者和字符设备一样,通常用于配置,后者就是我们mount之后通过文件系统直接访问一个块设备。比..原创 2020-08-18 22:08:31 · 145 阅读 · 0 评论 -
Linux内核学习笔记 -46 字符设备驱动程序简介
字符设备:只能一个字节一个字节进行读写操作的设备,不能随机读取设备中的某一数据,读取数据要按照先后次序来进行。字符设备是面向流的设备,常见的字符设备有鼠标,键盘,串口,控制台,LED等。一般每个字符设备或块设备都会在/dev下对应一个设备文件,linux用户层程序通过设备文件来使用驱动程序,操作字符设备或块设备。最关键的是file_operations结构,它是时序字符设备的操作集,如上图所示,给出cdev这个结构体的主要字段以及对应的含义。每个字符设备都有一个描述字符设备操作集的fil..原创 2020-08-18 07:05:30 · 181 阅读 · 0 评论 -
Linux内核学习笔记 -45 设备驱动模型
linux支持世界上几乎所有的不同功能的硬件设备,导致linux内核中有一半的代码是设备驱动,而且随着硬件的快速升级换代,设备驱动的代码量也快速增长,为了降低设备多样性带来的linux驱动开发的复杂度,以及设备热插拔处理,电源管理等等,linux内核提出了设备模型,也称driver model的概念驱动的开发就简化为对内核所规定的数据结构的填充和实现。linux驱动模型的目的是提供一个对系统结构的一般性抽象描述,linux设备模型跟踪所有系统已经知道的设备,以便让设备驱动模型的核心程序协调驱动和..原创 2020-08-16 20:14:25 · 188 阅读 · 0 评论 -
Linux内核学习笔记 -44 I/O空间管理
什么是设备控制器?它是CPU与I/O设备之间的接口,它通过控制总线接收从CPU发来的指令,并去控制I/O设备工作,控制器相当于CPU与外设打交道的一个助理,以使CPU从繁杂的设备控制事物中解放出来设备的这些寄存器就是控制寄存器,数据寄存器和状态寄存器,它们位于控制器中,从编址方式上来说,如果I/O空间与内存一起编址,对应的内存空间被称为I/O内存,如图左边所示。如果I/O空间单独编址,就位于I/O空间,通常被称为I/O端口,如右图所示。I/O端口设备驱动程序,要直接访问外设,或其接口卡上..原创 2020-08-16 19:56:01 · 250 阅读 · 0 评论 -
Linux内核学习笔记 -43 设备驱动概述
计算机中三个最基本的物质基础是CPU,内存和输入输出(I/O)设备,与I/O设备相比,文件系统是一种逻辑意义上的存在,它们使对设备的操作更为方便有效,更为有组织,更接近人类的思维方式。如何使得没有感觉的硬件变得有灵性,从而使得控制设备就像操作普通文件一样?驱动程序设备驱动程序:隐藏设备的具体细节。设备驱动程序在linux中是一个个的独立的黑盒子。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序的任务,将这些调用映射到作用于实际硬件的设备特有操作上,则是驱动程序的任务..原创 2020-08-16 12:00:08 · 184 阅读 · 0 评论 -
Linux内核学习笔记 -42 编写虚拟文件系统 -3
tst原创 2020-08-16 11:28:53 · 458 阅读 · 1 评论 -
Linux内核学习笔记 -41 编写虚拟文件系统 -2 如何在myfs文件系统中创建文件夹和文件
test原创 2020-08-16 11:28:08 · 787 阅读 · 0 评论 -
Linux内核学习笔记 -40 编写虚拟文件系统 -1,如何注册myfs文件系统
test原创 2020-08-16 11:27:34 · 603 阅读 · 0 评论 -
Linux内核学习笔记 -39 页高速缓存机制以及读写
文件系统读写的单位是块,一个块的大小是2的n次方个扇区,比如1k,2k,4k,4M等。一个进程从发出读写请求到读到数据一个简要的过程如上图右。当用户通过write系统调用时,给文件中写数据的时候,首先与用户态的IO缓冲区打交道,然后逻辑文件中的写指针进行移动,真正的写入还没有发生,然后就陷入内核态。用户态缓冲区的数据就被搬移到内核缓冲区,这个缓冲区就是page cache。那么最后到底是如何把数据真正写入磁盘?块设备和系统采用块进行交换,块再转换成磁盘的基本物理结构扇区,扇区和块之间..原创 2020-08-16 11:25:56 · 267 阅读 · 0 评论 -
Linux内核学习笔记 -38 文件系统中的各种缓存
缓冲区是内存空间的一个部分,即在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这些预留的空间就叫缓冲区。如上图红色框,整个文件系统中有四种类型的缓冲区,dcacge,inodecache,page cache,buffer cache,它们有什么样的作用?又有什么样的区别?buffer是内存中的缓冲区,是各种进程产生的文件临时存储区,在一定的时间内会统一写入到磁盘,减少磁盘碎片或磁盘的反复寻道,从而提高系统性能,简单来说buffer中的数据就是要写入磁盘的数据ca..原创 2020-08-16 10:02:26 · 302 阅读 · 0 评论 -
Linux内核学习笔记 -37 虚拟文件系统的主要数据结构
VFS中的主要数据结构:虚拟文件系统中对象的引入。虚拟文件系统的第一个词是虚拟,这就意味着这样的文件系统在磁盘或者其它存储介质上并没有对应的存储信息,那么这样一个虚无的文件系统到底是怎样形成的?尽管linux支持多达几十种文件系统,但这些真实的文件系统并不是一下子都挂在系统中,它们实际上是按需被挂载的,老子说有无相生这个虚的VFS的信息都来源于实的文件系统,所以VFS必须承载各种文件系统的共有属性。另外这些实的文件系统只有安装到系统中VFS才予以认可,也就是说VFS只管理挂载到系统中的实际文件系..原创 2020-08-13 08:00:31 · 316 阅读 · 0 评论 -
Linux内核学习笔记 -36 虚拟文件系统的引入
文件系统:是存储设备上组织文件的一种方法。操作系统中,负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。linux常见的文件系统有ext2,ext3,ext4,NTFS,JFS,XFS等linux采用标准的目录结构,即树形结构。无论操作系统管理几个磁盘分区,这样的目录数只有一个,这样的目录组织有助于对文件系统或不同用户文件进行统一的管理,如图所示普通的文件目录字符设备块设备套接字等在linux中都是以文件被对待的,它们虽然类型不同,但是对其提供的却是同一套操作界面,..原创 2020-08-13 07:47:34 · 222 阅读 · 0 评论 -
Linux内核学习笔记 -35动手实践 - 内核多任务并发实例
为了在内核中模拟多任务并发访问共享链表,我们需要完成下面几个任务。1. 首先,需要在内核中建立一个共享链表,并使用自旋锁结构对其进行访问保护2. 利用工作队列机制建立若干个内核线程,每个内核线程都应该对共享链表进行插入/删除操作3. 创建一个内核定时器,并编写其回调函数,使其在到期时能够删除共享链表中的节点4. 在模块卸载函数中实现链表的销毁对于共享链表,我们利用内核提供的链表结构list_head来创建其节点, (代码16行)这里将内核提供的list_head类型的链表结构,包含.原创 2020-08-13 07:03:25 · 518 阅读 · 0 评论 -
Linux内核学习笔记 -34 动手实践 - 内核多任务并发实例
有一个内核共享资源(链表),同时有三种不同类型的内核任务会访问该链表,并对其进行插入或者删除节点的操作,内核线程负责向链表加入新节点,内核定时器负责定时/删除节点,而系统调用负责在某个时刻销毁整个链表。者三种内核任务并发执行时,有可能会破坏链表数据的完整性,所以我们必须对链表进同步访问保护,以确保数据的一致性。在这样一个多任务并发访问的模型中,我们需要选用合适的内核同步机制来管理这些任务,使得它们能够有条不紊的执行。主要用到的工具有:信号量/自旋锁/工作队列/内核定时器当用户初始化一个工作队..原创 2020-08-12 07:37:42 · 377 阅读 · 0 评论 -
Linux内核学习笔记 -33 内核同步机制
为了避免并发,防止竞争,内核提供了一组同步方法来对共享数据进行保护,原子操作在前面已经介绍过,这里介绍其它几种方法。中断屏蔽:在进入临界区之前,我们可以屏蔽系统中的中断,从而保证正在执行的内核任务,不被中断处理程序所抢占,防止某些竞态条件的发生,在退出临界区以后,可以重新打开中断中断屏蔽缺点:刚才我们介绍的那两个函数都只能禁止和开启本地CPU内的中断,并不能解决多处理器引发的竞争状态(并发)。在屏蔽中断期间,所有的中断都无法得到处理,因此长时间的屏蔽中断是很危险的,有可能造成数据的丢失,..原创 2020-08-10 18:10:10 · 246 阅读 · 0 评论 -
Linux内核学习笔记 -32 内核同步概述
如果我们把内核看作不断对各种请求进行响应的服务器,那么正在CPU上执行的进程,发出中断请求的外部设备等就相当于客户,正如服务器要随时响应客户的请求一样,内核也会随时响应进程/中断/系统调用等的请求,我们之所以这样比喻,是为了强调内核中的各个任务并不是严格按照顺序依次执行的,而是相互交错执行的。对所有的内核任务而言,内核中的很多数据都是共享资源,就像高速公路供很多车辆行驶一样,对这些共享资源的访问必须遵循一定的访问规则,否则就可能造成对共享资源的破坏。就如同不遵守交通规则会造成撞车一样。并发执行是..原创 2020-08-10 17:54:54 · 222 阅读 · 0 评论 -
Linux内核学习笔记 -31 动手实践-添加系统调用(系统调用日志收集系统)
基于linux 5.0内核添加一个系统调用,原创 2020-08-09 11:01:56 · 597 阅读 · 0 评论 -
Linux内核学习笔记 -30 Linux系统调用机制
系统调用实际上是内核的出口,系统调用顾名思义就是操作系统提供给用户程序调用的一组特殊接口,从逻辑上来说,系统调用可以被看成是一个内核与用户空间程序交互的接口,它好比一个中间人,把用户空间的请求传达给内核,在内核把请求处理完以后,再将处理的结果返回给用户。上图就可以看出,open系统调用跟内核交互的过程如何知道一个进程到底调用了哪些系统调用?这里给出一张图,这张图是linux系统中各个子系统相关的工具,左上角是strace工具,可以通过这个命令,我们就可以查看一个应用它所调用的所有的系统调用。比如..原创 2020-08-09 09:13:15 · 184 阅读 · 0 评论 -
Linux内核学习笔记 -29 动手实践 - 中断下半部的代码分析与应用
Linux将中断处理分为上下两部分,上半部分主要处理紧急的,必须马上处理的事情,下半部分处理不那么紧急的事情,linux内核也提供了相应的机制,这里使用理论课中的tasklet机制来进行实验。本节代码是在上节的基础上稍微增加一部分代码即可。首先在中断服务例程,即上半部分中添加tasklet的init函数,即将下半部分函数进行注册。最主要的是要将下半部分处理函数挂载上去。最后调用tasklet_schedule函数进行调度最后用到tasklet_kill,用来注销掉我们的taskletboo原创 2020-08-08 21:35:35 · 329 阅读 · 0 评论 -
Linux内核学习笔记 -28 动手实践 - 中断上半部的代码分析与应用
中断常见的应用是在驱动程序中,例如我们的键盘鼠标,每次我们的点按都会产生一个中断,从而让计算机识别。该实验是自己虚拟出一个设备,将该设备注册到系统中,之后用自己编写的中断服务例程来使用中断,首先看一下当前系统中的中断。第一列:IRQ号CPU0/CPU1分别是当前CPU上发生中断的次数下一列:中断控制器名称,比如IO-APIC下一列:设备名称,比如2-edgebook@100ask:~/Mooc/CH05$ cat /proc/interrupts CPU0原创 2020-08-08 19:30:58 · 254 阅读 · 0 评论 -
Linux内核学习笔记 -27 Linux中的各种API
如果将内核比作一个工厂,那么Linux中,众多的接口就是通往这个工厂的高速公路,这条路要足够坚固,经得起各种破坏,要能跑得了卡车,又能升降飞机,当然这条路要越宽越好,如上图所示,linux中有四种类型的接口,应用编程接口API,应用二进制接口ABI内核内部的API和ABI图中的ABI中提到了LSB,什么是LSB?目前Linux的发行版非常多,为了促进linux不同发行版本间的兼容性,LSB开发了一系列标准,使得各种软件可以很好地兼容LSB标准的系统上运行,从而可以帮助软件供应商更好的..原创 2020-08-07 21:42:30 · 356 阅读 · 0 评论 -
Linux内核学习笔记 -26 Linux时间系统
时钟中断是特别重要的一个中断,因为整个操作系统的活动都受到它的激励。系统利用时钟中断维持系统时间,促使进程的切换,以保证所有的进程共享CPU。利用时钟中断进行记账,监督系统工作以及确定未来的调度优先级工作,可以说“时钟中断”是整个操作系统的脉搏。基本的时钟硬件:Linux系统OS时钟的物理产生原因是什么?是可编程定时/计数器产生的输出脉冲,这个脉冲送入CPU以后,就可以引发一个中断请求信号,我们就把它叫做时钟中断。时钟中断的周期也就是脉冲信号的周期,我们叫做“滴答”或“节拍”(tick)。从本.原创 2020-08-06 21:46:43 · 199 阅读 · 0 评论 -
Linux内核学习笔记 -25 中断下半部处理机制
中断服务程序一般都是在中断请求关闭的情况下执行的,以避免嵌套而使中断控制复杂化,但是中断是一个随机事件,它随时会到来,如果关中断的事件太长,CPU就不能及时响应其它中断请求,从而造成中断的丢失,因此内核的目标就是尽可能块的处理完中断请求,尽可能把更多的处理向后推迟。如上图,中断基本模型。在中断向量表中填入中断处理程序的入口地址,然后跳到该程序执行随着系统的不断复杂,中断处理函数要做的事情也越来越多,多到都来不及接收新的中断,于是发生中断丢失,这显然是不行的,于是内核把中断分为两部分,一个叫上半部..原创 2020-08-05 21:16:39 · 232 阅读 · 0 评论 -
Linux内核学习笔记 -24 中断处理机制
中断描述符表IDT放在内核的数据段中,它的起始地址放在中断描述符表寄存器,即IDTR中,如上图蓝色箭头所示。在内核中中断描述符相关的源代码是什么样子?有一个变量IDT_DESCR,它存放在head_32.S,或者在64位系统中存放在head_64.S中,这里面有两个汇编语句,第一句表示中断描述符表包含256个中断描述符;第二句表示中断描述符的入口地址如何对中断描述符初始化?在linux内核中,在系统的初始化阶段首先要初始化可编程控制器,将中断描述符的起始地址装入到中断描述符表寄存器IDTR中..原创 2020-08-05 06:21:50 · 248 阅读 · 0 评论 -
Linux内核学习笔记 -23 中断机制概述
当中断发生的时候,CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点继续执行被打断的程序。听起来很简单,但实际上中断是操作系统的脉搏,是并发处理的基础,远不像概念这么简单为什么可以并行呢?当CPU启动设备进入输入输出后,设备便可以独立工作了,CPU转去处理自己的事情,当设备完成输入输出后,通过向CPU发出中断,报告此此输入输出的结果,让CPU决定如何处理以后的事情。这些从概念上说起来是比较简单的,工程实践起来远没这么简单CPU收到中断信号以后,并不立即..原创 2020-08-04 21:10:05 · 230 阅读 · 0 评论 -
Linux内核学习笔记 -22 阶段习题
目录第一章 绪论第二章 内存寻址第三章 进程管理第四章 内存管理第一章 绪论1. Linux得以流行,是因为遵循了POSIX标准2.从Linux操作系统的整体结构来看,分两大部分,用户空间的应用程序和内核空间的os内核,二者之间是一种c/s结构,os是服务者,应用程序是客户,是一种请求和响应的关系。3.关于linux/unix中系统调用提供的只是一种机制,而不是策略。4.内核源码中的双向链表和哈希表都相当于内核源码中的基本类型,对其操作只需要调用内核提供...原创 2020-08-03 22:56:39 · 570 阅读 · 2 评论 -
Linux内核学习笔记 -21 动手实践linux内存映射基础 - 下(用户测试进程,及测试进程的演示)
下面为用户程序代码,一个是读程序,一个是写程序。读程序中,将展示进程在用户态直接读取到我们在内核态写入内存的数据。而在写程序中,我们将展示进程在用户态直接向内核申请的内存区写入数据。下面是读程序代码,读程序中,首先要做的是打开设备文件,open()紧接着调用mmap系统调用,这是用户态的mmap函数,它第一个参数是映射区的地址,第二位是映射区的长度(LEN),接下啦是port的一个标志位,表示期望的内存保护标志,PROT_READ表示页内容可以被读取;紧接着是flags标志位(MAP_PRIV.原创 2020-08-03 00:14:01 · 257 阅读 · 0 评论 -
Linux内核学习笔记 -20 动手实践linux内存映射基础 - 中(驱动程序源码分析)
进入源码,看内存映射具体的实现过程。驱动程序源码map_driver.c驱动程序大概有三部分组成,1-模块的装载卸载; 2-file_operations结构体和mmap函数;3-vm_operations_struct结构体和fault函数。首先是模块的装载函数,它所要完成的工作是两个,设备的注册,在内核中为设备申请一块内存。设备的注册由register_chrdev这个函数来实现,这里需要指定设备的主设备号MAP_DEV_MAJOR, 设备的名称MAP_DEV_NAME, 还有它所链接的fil.原创 2020-08-02 20:50:14 · 286 阅读 · 0 评论 -
Linux内核学习笔记 -19 动手实践linux内存映射基础 - 上
mmap是一种内存映射文件的方法,将一个文件映射到进程的地址空间,建立文件磁盘地址和进程虚拟地址的一种对应关系,如此进程通过读取相应的虚拟地址就可以直接读取相应文件中的内容。这样映射的最大好处是进程可用直接访问内存,避免了频繁的使用read/write等文件系统的系统调用,需要注意的是mmap并不分配物理内存,它所做的最重要的工作就是为进程映射区的虚拟地址建立页表项从图上可以看出进程的虚拟地址空间,是由多个虚拟内存区域构成的。如图所示的text数据段,初始数据段,bss数据段,堆,栈都是一个个独..原创 2020-08-01 19:04:04 · 225 阅读 · 0 评论 -
Linux内核学习笔记 -18 物理内存分配与回收机制 - 下
从用户进程发出内存分配请求开始,到内核最终分配到物理内存,这中间内核要做大量的工作。上一讲中,概要的介绍了vmalloc和kmalloc,最终都要调用伙伴算法,通过get_free_page函数内核获得物理内存目前有两种计算机,分别以不同的方法来管理物理内存。NUMA计算机:多处理器计算机,每个CPU都有自己的本地内存,这种划分每个CPU都能以较快的速率访问本地内存,各个CPU之间通过总线连接起来,这样也可访问其它CPU的本地内存,只不过速度略慢而已UMA计算机:将可用的内存以连续的..原创 2020-08-01 17:24:48 · 241 阅读 · 0 评论 -
Linux内核学习笔记 -17 物理内存分配与回收机制 - 上
当我们说一个进程在执行的时候,从操作系统的角度看,一个进程最关键的特征是它拥有独立的虚拟地址空间,创建并执行一个进程通常需要执行如下步骤:第一步:建立可执行文件与虚拟地址空间的映射。当执行一个程序时,加载器读取的是可执行文件的头部,建立虚拟空间和可执行文件的映射,主要调用了do_mm_map()函数。同时虚拟地址空间所需的数据结构mm_struct结构和vm_area_struct结构也填充相应的值,如上图左边的虚拟内存部分第二部分:将指令寄存器设置为可执行文件入口,并启动运行。当...原创 2020-08-01 12:18:06 · 245 阅读 · 0 评论 -
Linux内核学习笔记 -16 进程用户空间管理机制
每个进程都有自己独立的地址空间,那么进程的地址空间到底是什么时候创建的? 实际上,当fork系统调用创建进程的时候,也就为该进程创建了完整的用户空间。如上图。这个用户空间是如何被创建出来的?通过copy或共享父进程的用户空间来实现,即内核内核调用copymm函数来实现。这样就为新进程建立了所有的页表何mm_struct结构。通常来说,每个进程都有自己的用户空间,但是如果调用clone函数,创建的内核线程只会共享父进程的用户空间。linux利用写时复制技术,来快速创建进程。写时复制技术到底..原创 2020-08-01 07:37:01 · 340 阅读 · 0 评论 -
Linux内核学习笔记 -15 Linux内存管理机制
lcpu 查看内存的层次结构首先,内核通过映射机制把进程从磁盘映射到虚拟地址空间。当进程执行时,如果发现要访问的页没有在物理内存中,它就发出页请求,如图中的1;如果有空闲内存可供分配,就会请求分配内存,如图中的2.此时就用到了内存的分配与回收机制。而且要把正在使用的页记录在页缓存中。如图中的3,此时就用到了缓存机制。如果没有足够的内存可供分配,此时就要调用交换机制,腾出一部分内存,如图中的4和5另外,在地址映射中,还有通过TLB来加速物理内存的寻找,如图中的8交换机制...原创 2020-07-31 21:37:49 · 179 阅读 · 0 评论 -
Linux内核学习笔记 -14 基于内核模块的负载监控
uptime 返回的参数有load average:分别表示表示的是系统在1分钟/5分钟/15分钟内的平均负载情况。如何通过这些数字形象的分析负载?假设电脑只有一个CPU核心,所有运算都由这颗CPU来完成,则CPU就可靠被看作是一条单通道的告诉公路- 系统负载为0,则表示这条路上没有车辆通行- 系统负载0.5,表示路上有一半的路段有车辆通行- 系统负载1,表示路上所有的路段都有车辆通行。路段已经被车辆占满- 系统负载1.7,表示路上所有路段都有车辆通行,并且还有一部分车辆在排队等..原创 2020-07-30 23:22:44 · 417 阅读 · 0 评论