Linux 内核
文章平均质量分 88
Linux 内核学习
OopspoO
be better
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux内核学习——内存管理
PID: 进程IDUSER:进程所有者PR:进程优先级NI:进程nice值VIRT:进程使用的虚拟内存,单位KBRES:进程使用的并且未被换出的物理内存大小,单位KBSHR:共享内存大小,单位KBS:进程状态(D=不可中断睡眠状态,R=运行,S=睡眠,T=跟踪/停止,z=僵尸进程)%CPU:上一次更新到现在的CPU时间占用百分比%MEM:进程使用物理内存的百分比TIME+:进程使用CPU事件总计,单位10msCOMMAND:进程名或命令行。原创 2026-03-01 13:29:22 · 1088 阅读 · 0 评论 -
Linux内核学习——内核启动流程
实模式main函数:arch/x86/boot/main.c:main。检测并挂载procfs, sysfs: /proc/mounts。挂载真正根文件系统启动用户空间的/sbin/init。从CS:IP=FFFF:0000入口处载入BIOS。保护模式内核入口函数 0x100000处。从/etc/fstab挂载硬盘各个分区。Linux 内核启动函数 体系结构无关。载入GRUB到0x07C00处。读取/proc/cmdline。载入内核镜像vmlinuz。head.o偏移512处。创建内存rootfs。原创 2026-02-26 19:11:57 · 761 阅读 · 0 评论 -
Linux内核学习——模块机制
模块是内核中非常重要的机制,它为Linux内核向外提供了一个接口,其全称为动态可加载内核模块(Loadable Kernel Module)。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大有点是效率高,其缺点是扩展性和维护性相对较差,模块机制就是为了弥补这一缺点。模块是具有独立功能的程序,他可以被单独编译但是不能单独运行。他在运行时被连接进内核作为内核的一部分在内核空间运行。原创 2026-02-26 19:07:32 · 410 阅读 · 0 评论 -
Linux内核学习——进程管理
写时复制(copy on write,COW)技术就是父进程在创建子进程时,不需要复制进程地址空间的内容给子进程,只需要复制父进程的进程地址空间的页表给子进程,这样父子进程就共享了相同的地址空间。start_kernel()上来就会运行 set_task_stack_end_magic(&init_task)创建初始进程。内核线程(Kernel Thread)其实就是独立运行在内核空间的进程,它和普通用户进程的区别在于内核线程没有独立的进程地址空间,它只能运行在内核空间,和普通进程一样参与到系统的调度中。原创 2026-02-26 19:07:00 · 894 阅读 · 0 评论 -
Linux内核学习——同步管理
u8 pending;u8 locked;#endif。原创 2026-02-26 19:02:48 · 1027 阅读 · 0 评论 -
Linux驱动学习——进程管理
编写一个用户进程,使用setpriority()来修改进程的优先级,然后使用getpriority()函数验证。编写一个用户程序,限制该程序的一些资源,比如进程的最大虚拟内存空间等。使用daemon函数,创建一个守护进程。会在指定的目录下每5s转存下内核日志。关于进程管理的介绍参考。原创 2026-02-26 11:38:00 · 384 阅读 · 0 评论 -
Linux驱动学习——内存管理
mem_map[]`数组来统计当前系统有多少个空闲页面、保留页面、swapcache页面、slab页面、脏页面、活跃页面、正在回写的页面等。分配一个物理页面,然后输出该物理页面的物理地址,并输出该物理页面在内核空间的虚拟地址。Linux 内核对每个物理页面都采用struct page。在Linux内核中,可以通过。来分配物理页面,也可以通过。原创 2026-02-09 23:59:08 · 481 阅读 · 0 评论 -
Linux系统调用
POSIX标准针对的是API而不是系统调用,判断一个系统是否与POSIX兼容,要看它是否提供一组合适的应用编程接口,而不是看它的系统调用是如何定义和实现的。一个API接口函数可以由一个系统调用实现,也可以由多个系统调用实现,或者完全不由系统调用实现。C库中提供了POSIX的绝大部分的API实现,同时也为内核提供的系统调用封装了相应的函数。Linux系统为每个系统调用赋予了一个系统调用号,系统调用号一旦分配之后就不会有任何变更,否则编译好的应用程序就不能运行了。在x86_64上,其系统调用号定义在。原创 2025-02-13 23:22:52 · 1134 阅读 · 0 评论 -
linux驱动程序——入门
内核的模块装载器里保存有内核的版本信息,在装载模块时,装载器会比较所保存的内核vermagic与此模块的modinfo段里保存的vermagic信息是否一致,两者一致时,模块才能被装载。Linux内核在使用驱动时首先要装载驱动,在装载过程中进行一些初始化动作(建立设备文件、分配内存等),在驱动程序中需提供相应函数来处理驱动初始化工作,该函数须使用。Linux系统在退出是需卸载Linux驱动,卸载过程中进行一些退出工作(删除设备文件、释放内存等),在驱动程序中需提供相应函数来处理退出工作,该函数须使用。原创 2023-11-05 22:53:10 · 859 阅读 · 0 评论 -
Linux驱动程序——带缓冲区的简单虚拟设备
入下图所示,一个简单的虚拟设备只有一个缓冲区或者FIFO的部件,实现了一个先进先出的缓冲区。用户程序可以通过wirte()函数把用户数据写入这个虚拟设备的FIFO中,还可以通过read()函数把虚拟设备上的FIFO数据读出到用户空间的缓冲区里面。用来将用户空间的数据写入环形缓冲区中,其中参数fifo表示使用哪个环形缓冲区;type表示缓冲区中数据的类型;Linux内核实现了一个称为KFIFO的环形缓冲区的机制,它可以在一个读者线程和一个写者线程并发执行的场景下,无需使用额外的锁来保证环形缓冲区的数据安全。原创 2025-02-10 12:12:10 · 428 阅读 · 0 评论 -
Linux驱动程序——简单字符设备驱动
可以看到,内核模块在初始化时输出了系统分配的主设备号238,以及次设备号0。上面已经完成了和内核相关的事情,接下来需要编写一个用户测试程序操作该字符设备。函数的输出日志,说明测试程序成功操作了测试驱动。节点信息,看到了生成了名称为。的设备,主设备号为238。可以看到,日志里面有。原创 2024-06-20 00:26:51 · 547 阅读 · 0 评论 -
Linux内核学习——源代码
声明的函数(可以称之为接口)。同样的,我们的模块中如果有些函数可能需要被其他模块访问,也要EXPORT。内核中一般可供模块调用的函数主要包含在模块内部自行开发的函数和其他模块中被。原创 2025-10-14 22:58:57 · 1101 阅读 · 0 评论 -
Linux debugfs虚拟文件系统
环境:Linux dev-PC 5.18.17-amd64-desktop-hwe #20.01.00.10 SMP PREEMPT_DYNAMIC Thu Jun 15 16:17:50 CST 2023 x86_64 GNU/Linuxdebugfs是一种用来调试内核的内存文件系统,可以通过debugfs和用户空间交换数据。总用量 0drwxr-xr-x 2 root root 0 2月 9 11:29 acpidrwxr-xr-x 13 root root 0 2月 9 11:30 bdi。原创 2025-02-09 17:08:59 · 521 阅读 · 0 评论 -
Linux sysfs虚拟文件系统
测试环境:Linux dev-PC 5.18.17-amd64-desktop-hwe #20.01.00.10 SMP PREEMPT_DYNAMIC Thu Jun 15 16:17:50 CST 2023 x86_64 GNU/Linuxsysfs虚拟文件系统是随着linux统一设备驱动模型一起诞生的。这个新的设备模型是为了对计算机上的所有设备进行统一地表示和操作,包括设备本身设备之间的连接关系。原创 2025-02-09 16:47:26 · 991 阅读 · 0 评论 -
Linux proc虚拟文件系统
测试环境:Linux dev-PC 5.18.17-amd64-desktop-hwe #20.01.00.10 SMP PREEMPT_DYNAMIC Thu Jun 15 16:17:50 CST 2023 x86_64 GNU/Linuxproc虚拟文件系统是linux内核提供的一种让用户和内核内部数据结构进行交互的机制。proc文件系统并不是真正意义上的文件系统,它存在于内存中,并不占用磁盘空间。原创 2025-02-09 15:25:40 · 1305 阅读 · 0 评论 -
编译Linux内核
编译Linux内核原创 2024-09-14 00:19:41 · 875 阅读 · 0 评论 -
Linux 进程的出生
linux最初的进程原创 2022-09-06 01:19:15 · 514 阅读 · 0 评论
分享