西安邮电实验3.5-基于内核模块的负载监控
有几个问题没有答案:
1.空的load.h 的作用是什么?
2.遍历线程使用的源码:
#define do_each_thread(g, t) \
for (g = t = &init_task ; (g = t = next_task(g)) != &init_task ; ) do
#define while_each_thread(g, t) \
while ((t = next_thread(t)) != g)
发现:
1.静态变量可以不用初始化,编译器帮忙初始化为0
2.用到的锁rcu lock适合都多写少的情况
rcu_read_lock();
rcu_read_unlock();
源码地址,可以直接访问,放在同一个文件夹下直接make命令即可:
https://gitee.com/ljrcore/linuxmooc/tree/master/%E3%80%8ALinux%E5%86%85%E6%A0%B8%E5%88%86%E6%9E%90%E4%B8%8E%E5%BA%94%E7%94%A8%E3%80%8B%E5%8A%A8%E6%89%8B%E5%AE%9E%E8%B7%B5%E6%BA%90%E7%A0%81/3.5%E5%B7%A5%E7%A8%8B%E5%AE%9E%E8%B7%B5-%E5%9F%BA%E4%BA%8E%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97%E7%9A%84%E8%B4%9F%E8%BD%BD%E7%9B%91%E6%8E%A7
Makefile文件:
OS_VER := UNKNOWN
UNAME := $(shell uname -r)
ifneq ($(findstring 4.15.0-39-generic,$(UNAME)),)
OS_VER := UBUNTU_1604
endif
ifneq ($(KERNELRELEASE),)
obj-m += $(MODNAME).o
$(MODNAME)-y := main.o
ccflags-y := -I$(PWD)/
else
export PWD=`pwd`
ifeq ($(KERNEL_BUILD_PATH),)
KERNEL_BUILD_PATH := /lib/modules/`uname -r`/build
endif
ifeq ($(MODNAME),)
export MODNAME=load_monitor
endif
all:
make CFLAGS_MODULE=-D$(OS_VER) -C /lib/modules/`uname -r`/build M=`pwd` modules
clean:
make -C $(KERNEL_BUILD_PATH) M=$(PWD) clean
endif