一张图看懂Linux内核运行交互关系,值得收藏!
在 Linux 内核中,有许多层次、模块、功能调用和函数。
Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉。
(1) 运行态——已经获得了资源,并且进程正在被 CPU 执行。进程既可运行在内核态,也可运行在用户态。(2) 就绪态——当系统资源已经可用,但由于前一个进程还没有执行完释放 CPU,准备进入运行状态。
Linux内核采用层次化设计,从上到下主要分为用户空间、系统调用接口、内核空间。用户空间和内核空间通过系统调用接口交互。内核空间中又分为多层,从上到下主要分为进程调度层、文件系统层、网络层、设备驱动层等。
内核中申请内存的函数
1、在Linux内核空间中申请内存涉及的函数主要包括kmalloc () 、_get_free _pages ()和vmalloc(等。
2、linux系统用户空间中动态申请内存的函数为malloc (),这个函数在各种操作系统上的使用都是一致的,malloc ()申请的内存的释放函数为free()。
3、首先打开Linux命令窗口,可使用快捷键Ctrl+Alt+T打开。这时查看一下当前Linux系统内存使用情况,使用命令:Free –m,total 内存总数,used 已经使用的内存数,free 空闲的内存数。
Linux内核内存分配函数之kzalloc和kcalloc
本文介绍Linux内核内存分配函数: kzalloc() 和 kcalloc() 。文件: include/linux/slab.h ,定义如下:kzalloc() 函数功能同 kmalloc() 。区别:内存分配成功后清零。
kzalloc() 对应的内存释放函数也是 kfree()。
linux系统用户空间中动态申请内存的函数为malloc (),这个函数在各种操作系统上的使用都是一致的,malloc ()申请的内存的释放函数为free()。
如何查找不同linux内核版本下的内核函数?
1、vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。
2、在老版本内核中,系统调用通常定义为sys_*,所以可以直接通过相关符号查找。但新版本中,系统的调用方式不同,采用了SYSCALL_DEFINE的定义方式,由于各系统调用的实现比较分散,查找起来不算方便。
3、fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。Kernel内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel目录下。