操作系统实验五——CFS调度算法验证实验

操作系统实验五——CFS调度算法验证实验



实验要求

  1. 在虚拟机设置中调整 CPU 核心的数目至大于等于 2;创建两个进程,调整两个进程
    的优先级(友善度)至不同的级别;保持两个进程在正常运行状态;获取两个进程的进程号(PID)。

  2. 编写并编译加载一个内核模块,接收命令行传入的两个参数,即步骤 1 中的两个 PID
    号;内核模块遍历内核进程控制块链表,获取对应两个 PID 的进程控制块;通过访
    问两个进程的控制块,分别获取其调度实体中存储的进程真实执行时间和虚拟执行
    时间。

  3. 计算两个进程真实执行时间的比值和虚拟执行时间的比值,并结合实验原理(CFS
    调度算法)对计算结果进行分析。

实验步骤

  1. lscpu 查看cpu数量
    在这里插入图片描述

有4个核

  1. 编写两个进程程序
#include <stdio.h>

int main(){
 while(1){
 }
 }

在这里插入图片描述

在这里插入图片描述
3. 编译执行这两个程序

在这里插入图片描述
在这里插入图片描述
4. 查看进程的PID 将这两个进程设置在同一个核,并设置不同的优先级
在这里插入图片描述
在这里插入图片描述
5. 内核模块执行
km_param.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/sched/signal.h>

int pid1;
int pid2;
module_param(pid1, int, S_IRUGO); //parameter name; parameter type; parameter access permission
module_param(pid2, int, S_IRUGO); //S_IRUGO: can be read by UGO but cannot be modified


int module_load(void)
{
	struct task_struct *p;   
    	for_each_process(p) {  
       	if(p->pid == pid1 || p->pid == pid2){   
                	printk("Process found!\n");  
                    printk("%d  runtime:%llu \t vruntime:%lld\n", p->pid, p->se.sum_exec_runtime, p->se.vruntime);}
    	}     
   	return 0; 
}

void module_rm(void) {

	printk(KERN_INFO "Module removed!\n");
}

module_init(module_load);
module_exit(module_rm);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("execution time");
MODULE_AUTHOR("PS");

Makefile

obj-m += km_param.o
all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

执行过程:

make
sudo insmod km_param.ko pid1=2810 pid2=2835
dmesg

在这里插入图片描述
pid1 pid2 根据自己创建的两个进程PID 号修改

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值