![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 85
Kernel Mem Driver Test
_Emma_
这个作者很懒,什么都没留下…
展开
-
【selinux】Linux的信息安全模块 - selinux
selinux全称(Security-Enhanced Linux)安全增强型Linux,它是一个Linux内核模块,也是Linux的一个安全子系统。原创 2024-07-23 09:56:29 · 637 阅读 · 0 评论 -
【Linux网络】ip route 命令
*6.boardcast(广播):**目的地是广播地址,数据包作为链路广播发送,通常是向本地网络广播;**4.prohabit(禁止):目的地不可达,数据包会被丢弃,**ICMP 会返回。/etc/iproute2/rt_tables文件中。原创 2024-07-23 09:53:22 · 1072 阅读 · 0 评论 -
【Linux文件系统】文件描述符fd是什么?
1.用户open文件得到一个非负数句柄fd,之后针对改文件的IO操作都是基于这个fd2.文件描述符fd本质上讲就是数组索引,fd等于5,对应数组的第5个元素,数组是进程打开的所有文件的数组,数组元素类型为struct file;3.结构体task_struct对应一个抽象的进程,files_struct是这个进程管理该进程打开的文件数组管理器。fd对应着数组的编号,每一个打开的文件用file结构体表示,内含当前偏移等信息。原创 2024-07-22 10:38:44 · 668 阅读 · 0 评论 -
【Linux中断】中断下半部-tasklet的原理与使用
(1)一种特定类型的tasklet只能运行在一个CPU上,不能并行,只能串行执行(2)多个不同的类型的tasklet可以并行在多个CPU上(3)软中断是静态分配的,在内核编译好后,就不能再改变了。但tasklet灵活很多,可以在运行时改变tasklet是在两种软中断类型的基础上实现的,因此如果不需要软中断的并行也行,tasklet就是最好的选择。所以也可以说tasklet是软中断的一种特殊用法,即延迟情况下的串行执行。原创 2024-07-22 10:38:08 · 368 阅读 · 0 评论 -
【Linux中断】中断下半部-软中断softirq的原理与使用
软中断是中断下半部的典型处理机制,是随着SMP的出现应运而生的,也是tasklet实现的基础,软中断的出现是为了满足中断上半部和下半部的区别,使得对时间不敏感的任务延后执行,而且可以在多个CPU上并行执行,使得总的系统效率可以更高。原创 2024-07-22 10:37:32 · 681 阅读 · 0 评论 -
【Linux中断】Linux系统中断机制简述
1.使能中断,初始化相应的寄存器2.注册中断服务函数,也就是向irqTable数组的指定标号处写入中断服务函数3.中断发生以后进入IRQ中断服务函数,IRQ的中断服务函数在irqTable里面查找具体的中断处理函数,找到以后执行相应的中断处理函数。原创 2024-07-22 10:36:34 · 627 阅读 · 0 评论 -
【协程】进程,线程和协程
协程是用户态的线程,通常创建协程时,会从进程的堆中分配一段内存作为协程的栈。线程的栈有8MB,而协程的栈大小通常只有几十KB。而且C库的内存池不会给协程预分配内存,因为它感知逼到协程的存在。这样更低的内存空间为高并发提供了保证为什么要搞出协程:1.节省CPU资源,避免系统内核级的线程频繁切换,造成CPU资源浪费,而协程是用户态的线程,用于可以自行控制协程的创建和销毁,可以避免系统级线程上下文切换造成的资源浪费。原创 2024-07-22 10:33:43 · 211 阅读 · 0 评论 -
【mmap】零拷贝 - mmap原理
使用 mmap 对文件进行读写操作时可以减少内存拷贝的次数,并且可以减少系统调用的次数,从而提高对读写文件操作的效率。由于内核不会主动同步 mmap 所映射的内存区中的数据,所以在某些特殊的场景下可能会出现数据丢失的情况(如断电)。为了避免数据丢失,在使用 mmap 的时候可以在适当时主动调用 msync 函数来同步映射内存区的数据。原创 2024-07-22 10:30:15 · 608 阅读 · 0 评论 -
【Linux内核】Linux内核 - 进程管理
进程是在处理器上执行的一个实例,进程可使用任意资源以便Linux内核可以处理完成它的任务。在Linux上运行的所有进程都是通过task_struct结构来管理的,被称为进程描述符。一个进程描述符包含单个进程在运行期间的所有必要的信息,比如进程表示,进程的属性,构建进程的资源等等。原创 2024-07-19 15:42:18 · 266 阅读 · 0 评论 -
【v4l2】Linux多媒体框架 - videobuf2概览
框架可以分为两部分看:控制流+数据流,之前已经大概的描述了控制流,数据流部分就是video buffer,V4l2 buffer的管理是通过videobuf2来完成的,它充当于用户空间和驱动空间之间的中间层,并提供模块化的内存管理功能。上图大体包含了videobuf2的框架。原创 2024-07-19 15:41:31 · 375 阅读 · 0 评论 -
【v4l2】Linux多媒体框架 - v4l2 core详解
V4L2是Video for linux2的简称,是Linux中关于视频设备的内核驱动框架。定义在include/linux/videodev2.h。原创 2024-07-19 15:39:16 · 332 阅读 · 0 评论 -
【cmd】Linux常用命令
ps -a:显示现行终端机下所有程序,包括其他用户的程序ps u:已用户为主的格式来显示程序状况ps x:显示所有程序,不以终端机来区分STAT有关状态D:不可中断的静止R: 正在执行中S: 静止状态T: 暂停执行Z: 不存在但暂时无法消除W: 没有足够的内存分页可分配。原创 2024-07-19 15:36:49 · 182 阅读 · 0 评论 -
【workqueue】workqueue原理和机制
/ 工作队列中的工作链表// 获取work// 工作队列中的线程工作项结构体// 将该工作项挂载到工作链表上// 工作项绑定的函数指针// 用户自定义数据,当工作项执行时会调用此函数work:工作项结构体指针work_func : 回调函数,工作项执行时调用work_data : 用户自定义数据,回调函数参数返回值:无此接口初始化work指针指向的工作项,并绑定回调函数work_func以及用户自定义数据work_data。原创 2024-07-19 15:34:26 · 397 阅读 · 0 评论 -
【Linux内核】Linux内核-进程创建过程
在 fork 创建进程的时候,地址空间 mm_struct、挂载点 fs_struct、打开文件列表 files_struct 都要是独立拥有的,所以都去申请内存并初始化了它们。但由于今天我们的例子父子进程是同一个命名空间,所以 nsproxy 还仍然是共用的。其中 mm_struct 是一个非常核心的数据结构,用户进程的虚拟地址空间就是用它来表示的。对于内核线程来讲,不需要虚拟地址空间,所以 mm 成员的值为 null。原创 2024-07-19 15:32:38 · 338 阅读 · 0 评论 -
【Linux内核】Linux中进程与线程的区别
上面调用 dup_task_struct 时传入的参数是 current,它表示的是当前任务。和 copy_files 函数类似,在 copy_fs 中如果指定了 CLONE_FS(创建线程的时候),并没有真正申请独立的 fs_struct 出来,近几年只是在原有的 fs 里的 users +1 就算是完事。从代码看出,如果指定了 CLONE_FILES(创建线程的时候),只是在原有的 files_struct 里面 +1 就算是完事了,指针不变,仍然是复用创建它的进程的 files_struct 对象。原创 2024-07-19 15:23:17 · 881 阅读 · 0 评论 -
【pthread】POSIX接口简述
POSIX Threads简称Pthreads,此标准定义了一套C语言的类型,函数和常量。线程管理:包括线程创建(create),线程分离(detach),线程连接(join)及设置和查询线程属性的函数等互斥锁:用于限制线程对共享数据的访问,保护共享数据的完整性。包括创建、销毁、锁定和解锁互斥锁及一些用于设置或修改互斥量属性等函数。条件变量:用于共享一个互斥量的线程间的通信。包括条件变量的创建、销毁、等待和发送信号等函数读写锁和屏障:包括读写锁和屏障的创建、销毁、等待及相关属性设置等函数。原创 2024-07-18 14:40:28 · 295 阅读 · 0 评论 -
【pthread】pthread - 线程的高级属性
线程接收取消请求后会结束运行的地方, 根据POSIX标准,pthread_join()、pthread_testcancel()、pthread_cond_wait()、pthread_cond_timedwait()、sem_wait()等会引起阻塞的系统调用都是取消点。pthread多线程程序中所有线程共享信号处理函数,如果在一个线程中为某个信号绑定信号处理函数,当这个信号触发后,其他的线程都会跟随响应,如果在一个线程中修改信号处理函数,这个结果也会影响到其他线程。设置取消状态,由线程自己调用。原创 2024-07-18 14:38:36 · 272 阅读 · 0 评论 -
【I/O模型】异步IO的原理和使用
但是使用默认信号SIGIO会存在一些问题,SIGIO是标准信号,不可靠信号,非实时信号,不支持信号排队机制,不知道文描述符发生了什么事件,未判断文件描述符是否处于可读的就绪态,所以需要进一步优化(实时信号替换)。很多三方库异步IO库不是真正的异步IO,而是通过多线程来模拟异步IO,比如libeio。以上步骤完成后,进程可以去执行其他的任务,当I/O就绪时,内核会向进程发送一个SIGIO信号,当进程接收到信号时,会执行预先注册号的信号处理函数,这样就可以在信号处理函数中进行I/O操作了。原创 2024-07-18 14:36:20 · 410 阅读 · 0 评论 -
【I/O模型】什么是IO多路复用?
什么是IO多路复用:单线程或单进程同时检测若干文件描述符是否可以执行IO操作的能力。使用场景:应用程序需要处理来自多条事件流中的事件,比如web服务器入nginx,需要同时处理来自N个客户端的事件。逻辑控制流在时间上的重叠叫做并发。传统方法是使用多线程或多进程来处理,但是资源开销成本很大:1.线程/进程创建成本2.CPU切换不同线程/或进程成本3.多线程资源竞争而IO多路复用是一种可以在单线程/进程处理多个事件流的方法。所以IO多路复用解决的本质问题是在用更少的资源完成更多的事。原创 2024-07-18 14:35:00 · 423 阅读 · 0 评论 -
【Linux IO模型】IO模型 - epoll的原理与应用
实现处理tcp请求,为一个连接对应一个线程,在高并发的场景,这种多线程模型于epoll相比就相形见绌了。epoll是linux2.6内核的一个新的系统调用,在设计之初,就是为了替代select,poll线性复杂度的模型,epoll的事件复杂度为O(1),也就是说epoll在高并发场景,随着文件描述符的增长,有良好的可扩展性。原创 2024-07-18 14:33:38 · 320 阅读 · 0 评论 -
【Linux环境部署】Python版本更新及替换
当前默认python版本为2.7.18。2.查看当前环境的python环境。1.测试当前默认python版本。3.删除默认python版本。8.pip检查哪些包需要更新。6.pip安装程序包。7.pip3更新软件。原创 2024-07-18 14:32:32 · 319 阅读 · 0 评论 -
【根文件系统】根文件系统是什么?
根文件系统也叫roofs,它不同于FATFS、FAT和EXT4,更像是一个文件夹或者目录。根目录和子目录中会有很多的文件,这些文件时Linux运行所必须的,比如库、常用软件和命令、设备文件、配置文件等等。根文件系统是linux内核启动以后mount的第一个文件系统,然后从根文件系统中读取初始化脚本,比如rcS,inittab等。根文件系统和Linux内核是分开的,单独的Linux内核是无法工作的,必须要搭配根文件系统。如果不提供根文件系统,Linux内核就会提示Kernel panic的提示。原创 2024-07-18 14:30:25 · 343 阅读 · 0 评论 -
【Linux软中断】信号与信号集(signal&sigset)
软中断信号(signal)用来通知进程发生了。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号只是用来通知进程发生了什么事件,并不给进程传递任何数据。收到信号的进程对信号的处理方法有三种:• 类似中断的处理程序,进程可以指定处理函数,回调处理• 忽略某个信号,对此信号不做任何处理• 对此信号的处理保留系统默认值,对大部分信号的缺省操作时使得进程终止。原创 2024-07-18 14:29:15 · 275 阅读 · 0 评论 -
【Linux中断】Linux系统中断机制简述
1.使能中断,初始化相应的寄存器2.注册中断服务函数,也就是向irqTable数组的指定标号处写入中断服务函数3.中断发生以后进入IRQ中断服务函数,IRQ的中断服务函数在irqTable里面查找具体的中断处理函数,找到以后执行相应的中断处理函数。原创 2023-08-23 17:24:28 · 376 阅读 · 0 评论 -
【Linux中断】中断下半部-软中断softirq的原理与使用
软中断是中断下半部的典型处理机制,是随着SMP的出现应运而生的,也是tasklet实现的基础,软中断的出现是为了满足中断上半部和下半部的区别,使得对时间不敏感的任务延后执行,而且可以在多个CPU上并行执行,使得总的系统效率可以更高。原创 2023-08-24 23:05:02 · 161 阅读 · 1 评论 -
【V4L2】Linux多媒体框架 - V4L2浅析
/ 向驱动申请帧缓冲的情求,里面包含申请的个数// 设备的功能,比如是否是视频输入设备// 视频输入// 视频的制式,比如PAL,NTSC制// 帧的格式,比如宽度,高度等// 代表驱动中的帧缓存VIDIOC_REQBUFS:请求缓存的数量,驱动会据此申请对应数量的视频缓存。VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址。原创 2024-07-16 10:07:43 · 302 阅读 · 0 评论 -
【Linux进程间通信】共享内存的使用
最近需要开发一个测试程序,接受Tester端的测试指令,执行一条条外设的测试用例,执行完成后将测试数据的结果上报,上报方式未定,考虑到耦合和配套问题,决定采用共享内存机制,设计共享内存块,分为接受指令和数据上报两部分,主程序运行后就会一直轮询共享内存去等待指令,获取指令后执行对应的测试用例,执行完成后将数据结果写入数据上报区,Tester端什么时间获取不需要关注,只做好自己的数据上报即可。由于共享内存在读写操作时是直接在内存上操作,所以相比于其他进程间通信的方式,共享内存的效率是最高的。原创 2024-07-16 10:05:45 · 629 阅读 · 0 评论 -
【Linux内核态】内核态和用户态的理解
在Unix/Linux系统中,fork的工作实际上是以系统调用的方式完成相应功能的,具体的工作是由sys_fork负责实施。其实无论是不是Unix或者Linux,对于任何操作系统来说,创建一个新的进程都是属于核心功能,因为它要做很多底层细致地工作,消耗系统的物理资源,比如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录页表等等,这些显然不能随便让哪个程序就能去做,于是就自然引出特权级别的概念,显然,最关键性的权力必须由高特权级的程序来执行,这样才可以做到集中管理,减少有限资源的访问和使用冲突。原创 2023-08-23 17:19:39 · 81 阅读 · 0 评论 -
【Linux进程管理】进程退出的几种方法
当一个进程退出后,操作系统会释放掉这个进程的资源。包括这个进程分配的内存,打开的文件等等。所以进程退出后,不会出现内存泄漏的情况,进程一旦退出,所占的整个虚拟内存都被销毁,所有内存资源都会被系统回收。原创 2023-08-23 17:20:47 · 1042 阅读 · 0 评论 -
【Linux内存管理】 在2G物理内存的机器上申请4G会怎么样?
在32位操作系统,因为进程最大只能申请3GB大小的虚拟内存,所以直接申请8G内存会申请失败在64位操作系统,因为进程最大能申请128T大小的虚拟内存,即使物理内存只有4GB,申请8GB也是没有问题的,因为申请的内存是虚拟内存。如果这块虚拟内存被访问了,要看系统有没有Swap分区如果没有Swap分区,因为物理空间不够,进程会被操作系统杀掉,原因是OOM(内存溢出);...原创 2022-07-18 11:16:34 · 767 阅读 · 0 评论