- 博客(51)
- 收藏
- 关注
原创 Linux进程管理:(九)实时调度
文章说明:Linux内核版本:5.0架构:ARM64参考资料及图片来源:《奔跑吧Linux内核》指的是一个特定任务的执行时间必须是确定的并且可预测的,在任何情况下都能保证任务的最大执行时间限制。通常实时分成软实时和硬实时两种。
2024-03-23 16:36:30
923
原创 docker study
替换为你想要运行的容器镜像的名称或ID。这将显示你本地计算机上的所有 Docker 镜像,找到你刚刚构建的镜像并记下它的名称和标签。这将在容器内启动一个新的 Bash shell,使你能够同时在两个终端窗口中与容器进行交互。这将启动一个新的容器,并使你进入容器的交互式终端(通常是 Bash shell)。这将显示正在运行的容器列表,包括容器的 ID、名称、镜像、端口映射等信息。这将在后台启动容器,并返回容器的唯一标识符(Container ID)。一旦你进入了容器的终端,你可以在容器内运行各种命令。
2024-03-08 10:24:17
963
原创 Linux进程管理:(二)进程调度原语
文章说明:Linux内核版本:5.0架构:ARM64参考资料及图片来源:《奔跑吧Linux内核》进程调度的概念比较简单,假设在一个单核处理器的系统中,同一时刻只有一个进程可以拥有处理器资源,那么其他的进程只能在就绪队列(runqueue)中等待,等到处理器空闲了之后才有机会获取处理器资源来运行。在这种场景下,操作系统就需要从众多的就绪进程中选择—个最合适的进程来运行,这个就是**进程调度器(scheduler)**要做的事情。
2024-03-01 21:03:32
933
原创 gdb的man手册(翻译)
有关GDB的详细信息,请参阅Richard M. Stallman和Roland H. Pesch合著的《使用GDB: GNU源代码级调试器指南》。与“info”程序中的“gdb”条目相同的文本可以在网上找到。GDB的完整文档以Texinfo手册的形式维护。如果“info”和“gdb”程序以及gdb的Texinfo文档已正确安装在您的站点上,则命令。调试器(如GDB)的目的是让你看到另一个程序执行时“内部”发生了什么,或者另一个程序崩溃时正在做什么。显示有关GDB命令名称的信息,或使用GDB的一般信息。
2024-02-28 18:49:09
810
原创 Linux进程管理:(一)进程的创建和终止
文章说明:Linux内核版本:5.0架构:ARM64参考资料及图片来源:《奔跑吧Linux内核》在最新版本的POSIX标准中,定义了进程创建和终止的操作系统层面的原语。进程创建包括fork()和execve()函数族,进程终止包括wait()、waitpid()、kill(),以及exit()函数族。Linux操作系统在实现过程中为了提高效率,把POSIX标准的fork()原语扩展为vfork()和clone()两个原语。
2024-02-28 12:04:04
1152
原创 ftrace工具学习笔记
要启用ftrace,需要在内核编译时启用CONFIG_FUNCTION_TRACER配置选项。要在available_events文件中查找该跟踪点是否存在,然后把想要跟踪的事件添加到set_event文件中即可。若在配置内核时打开了CONFIG_DYNAMIC_FTRACE选项,就可以使用动态ftrace功能。“>”表示覆盖过滤器的内容,“>>”表示把新函数添加到过滤器中,但不会覆盖。set_ftrace_notrace:指定不要跟踪的函数。set_ftrace_filter:设置要跟踪的 函数。
2024-02-04 15:51:55
438
原创 Linux内存管理:(十二)Linux 5.0内核新增的反碎片优化
文章说明:Linux内核版本:5.0架构:ARM64参考资料及图片来源:《奔跑吧Linux内核》
2024-02-04 15:09:39
1213
原创 bash脚本学习笔记
对于每个包含"Cpu"字符串的行,使用awk命令取出第二个字段,即"Cpu"使用率的数值(例如,如果该行的内容为"Cpu(s): 1.2%us, 0.8%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st",则取出的数值为"1.2%us").以上是 Bash 脚本编写的基本语法格式,需要注意的是,每个语句都是以换行符结束的,如果一条语句太长,可以使用反斜杠(\)折行。是一种文本文件,其中包含了一系列的命令和指令,可以被操作系统解释器直接解释执行。
2024-02-02 20:08:21
1016
原创 调试工具gdb的常用命令总结
undisplay” 命令用于取消一个或多个正在显示的变量。如果只想取消特定的变量,请在 “undisplay” 命令后面指定变量名或变量编号,例如: “undisplay var1 var2” 或 “undisplay 1 2”。GDB是GNU调试器(GNU Debugger)的缩写,它是一个开源的命令行调试器,可以帮助程序员调试C、C++、汇编等语言编写的程序。GDB可以帮助开发人员追踪程序运行时的状态,查找程序中的错误,包括内存泄漏、死锁、数组越界等问题。另外,不再需要显示的变量可以通过。
2024-01-20 21:31:23
431
原创 《ghOSt: 快速灵活的Linux调度用户空间委托》的学习与复现
ghOSt是在Linux内核之上实现的调度策略的通用委托。摧毁一个enclave将在必要时杀死故障代理,并将ghOSt调度类中的线程移动到CFS (Linux完全公平调度程序),以便它们可以继续被调度,直到您可能再次将它们拉入ghOSt。当您想要升级策略时,您启动的新进程中的代理将尝试附加到现有的enclave,等待在enclave中运行的旧代理退出。enclave提供了一种简单的方法来对机器进行分区,以支持策略和租户的共存,这是一个特别重要的特性,因为机器可以横向扩展以包含数百个cpu和新的加速器。
2023-12-28 16:06:56
1303
原创 Linux内存管理:(三)kmalloc、vmalloc、malloc、mmap
文章说明:Linux内核版本:5.0架构:ARM64参考资料及图片来源:《奔跑吧Linux内核》
2023-12-25 15:15:46
2308
1
原创 Linux内核中锁的总结
锁描述问题经典自旋锁在同一时刻只能被一个内核代码路径持有刚刚释放锁的CPU更有机会马上又获得锁,没有考虑在锁外面等待了很久的CPU,导致在锁争用激烈场景下性能低下;在多处理器和NUMA系统中,所有等待自旋锁的线程都在同一个共享变量上自旋,申请和释放都在同一个变量上修改,高速缓存一致性原理导致参与自旋的CPU中的高速缓存行变得无效,在锁正用激烈的过程中,可能导致严重的CPU高速缓存行颠簸现象基于排队的FIFO算法的自旋锁解决了在锁争用激烈场景下性能低下的问题无法解决CPU高速缓存行颠簸现象。
2023-10-30 15:04:48
150
原创 Linux中的地址转换
CR3寄存器用来保存当前进程的页全局目录的地址,寻页的开始就是从页全局目录开始的。 第一个参数是当前进程的mm_struct结构,mm_struct结构是用来描述进程的虚拟地址空间的,在mm_struct中有个字段PGD就是用来保存该进程的页全局目录的物理地址的。可以看到PGDIR_SHIFT和P4D_SHIFT都是39的,这也就意味着在线性地址中,P4D这个字段是为空的,也可以看到在页目录项中,P4D的页目录项也是为1的,这也就说明了,虽然Linux采用了五级页表模型,但实际上使用的页表也只有四个。
2023-10-19 10:12:25
158
原创 Linux内核模块大扩展
attribute((aligned(sizeof(long))))属性保证了红黑树中的每个结点的首地址都是32位对齐的(在32位机上),也就是说每个结点首地址的bit[1]和bit[0]都是0,因此就可以使用bit[0]来存储结点的颜色属性而不干扰到其双亲结点首地址的存储。指令lsmod是显示所有内核模块的信息,这里我们加上参数查看刚插入的内核模块test_hello,执行指令lsmod |grep ‘test_hello’//加载的时候,如果传递参数,则变量值就是传递过来的值,否则就是默认的初始化值。
2023-10-19 10:01:17
159
原创 生产者消费者内核模块调试
(1)不可以,如果初始化信号量sem_producer为锁定的互斥信号量,sem_consumer为未锁定的互斥信号量,那么在这样的初始化状态下,生产者线程无法进行生产,会进入一个信号量等待的过程,而消费者线程会因为缺少产品在if条件语句处退出循环,结束运行,这样将会导致生产者线程永远等不到信号量,进而出现“死锁”的情况。牛奶生产厂家接到订单后,才开始生产下一批牛奶。(2)(3)(4)思路:由于线程是并发执行的,所以可以把多个仓库看做成一个仓库,因此所有的情况都可以看成是“多生产者、多消费者、一个缓冲区”
2023-10-19 09:55:54
76
原创 设备驱动入门学习
其二是因为性能,一个慢的字符设备驱动程序虽然不受欢迎,但仍可以接受,但一个慢的块驱动程序将影响整个系统的性能。(2)数据经过块设备相比操作字符设备需要经历一个数据缓冲层,也就是说应用程序与块设备传递数据时不同于操作字符设备那样直接打交道,而必须经过一个中间缓冲层来存储数据,然后才可使用数据,这是为了提高系统整体性能(吞吐量)。 (3)当操作系统需要使用某个硬件时,比如让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。
2023-10-19 09:55:20
50
原创 同步问题大讨论
所谓原子操作,就是在执行期间不可分割,要么全部执行,要么一条也不执行。在Linux下如何进行原子操作?gcc从4.1.2开始提供了__sync _*系列的build-in函数,用于提供加减和逻辑运算的原子操作,其声明如下:
2023-10-19 09:54:53
33
原创 中断机制以及中断上下部运行和内核代码分析
中断也称外中断,指来自CPU执行指令以外的事件发生(这里的中断是狭义上的中断)异常也称内中断、例外或陷入,指源自CPU执行指令内部的事件。
2023-10-19 09:54:21
770
原创 通过中断控制终端设备
*体会:**这个过程看起来很复杂,但是听了李治军老师的课程后,感觉思路特别的清晰,也没有想象中的那么复杂了,仅作两处修改便可完成实验。
2023-10-18 22:39:34
42
原创 中断机制(5.3和5.4)
高精度定时器可以实现ns级的定时,不过,实际的定时周期粒度与CPU的主频有关,比如,桌面级的CPU一般都是GHZ级别,那么,其定时粒度可以达到ns级别,而对于嵌入式CPU,其主频一般在百兆级别,那么定时粒度就只能达到us级别了。RTC处于最底层,提供最原始的时钟数据,而OS时钟建立在RTC之上,初始化完成后将完全由操作系统控制,操作系统通过OS时钟提供给应用程序所有和时间有关的服务,因为OS时钟完全是一个软件问题,其所能表达的时间由操作系统的设计者决定。(更改系统时间对它没有影响)
2023-10-18 22:17:25
61
原创 编写字符设备驱动程序
字符设备驱动也可以采用misc机制来进行注册,也就是Linux将一些不符合预先确定的字符设备划分为杂项设备,这类设备的主设备号是10,内核中使用miscdevice结构体来描述,如果使用misc机制来创建设备,就需要定义miscdevice结构体。linux的设备驱动程序可以由两种形式来定义,一种是全局静态变量,另一种是使用内核提供的API,这里采用第二种方法来实现一个简单的虚拟设备的驱动,并且实现它的读写功能。实现了对已注册的字符设备区间的管理,并完成与cdev的关联。打印出了open和read的方法。
2023-10-18 22:11:56
650
原创 编写并分析简单的块设备驱动程序
块设备也和字符设备一样可以通过/dev目录下的设备文件来访问,而网络设备不可以。此外块设备(例如磁盘)上能够容纳文件系统。
2023-10-18 22:08:24
255
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人