时间片轮转的多道程序

来源:互联网 发布:jdk 7u40 windows x64 编辑:程序博客网 时间:2024/04/29 08:25

张伟 + 时间片轮转的多道程序 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000


两个源文件:

mymain.c的内容如下:

/* *  linux/mykernel/mymain.c * *  Kernel internal my_start_kernel * *  Copyright (C) 2013  Mengning * */#include <linux/types.h>#include <linux/module.h>#include <linux/proc_fs.h>#include <linux/kernel.h>#include <linux/syscalls.h>#include <linux/stackprotector.h>#include <linux/string.h>#include <linux/ctype.h>#include <linux/delay.h>#include <linux/ioport.h>#include <linux/init.h>#include <linux/initrd.h>#include <linux/bootmem.h>#include <linux/acpi.h>#include <linux/tty.h>#include <linux/percpu.h>#include <linux/kmod.h>#include <linux/vmalloc.h>#include <linux/kernel_stat.h>#include <linux/start_kernel.h>#include <linux/security.h>#include <linux/smp.h>#include <linux/profile.h>#include <linux/rcupdate.h>#include <linux/moduleparam.h>#include <linux/kallsyms.h>#include <linux/writeback.h>#include <linux/cpu.h>#include <linux/cpuset.h>#include <linux/cgroup.h>#include <linux/efi.h>#include <linux/tick.h>#include <linux/interrupt.h>#include <linux/taskstats_kern.h>#include <linux/delayacct.h>#include <linux/unistd.h>#include <linux/rmap.h>#include <linux/mempolicy.h>#include <linux/key.h>#include <linux/buffer_head.h>#include <linux/page_cgroup.h>#include <linux/debug_locks.h>#include <linux/debugobjects.h>#include <linux/lockdep.h>#include <linux/kmemleak.h>#include <linux/pid_namespace.h>#include <linux/device.h>#include <linux/kthread.h>#include <linux/sched.h>#include <linux/signal.h>#include <linux/idr.h>#include <linux/kgdb.h>#include <linux/ftrace.h>#include <linux/async.h>#include <linux/kmemcheck.h>#include <linux/sfi.h>#include <linux/shmem_fs.h>#include <linux/slab.h>#include <linux/perf_event.h>#include <linux/file.h>#include <linux/ptrace.h>#include <linux/blkdev.h>#include <linux/elevator.h>#include <asm/io.h>#include <asm/bugs.h>#include <asm/setup.h>#include <asm/sections.h>#include <asm/cacheflush.h>#ifdef CONFIG_X86_LOCAL_APIC#include <asm/smp.h>#endifvoid __init my_start_kernel(void){    int i = 0;    while(1)    {        i++;        if(i%100000 == 0)            printk(KERN_NOTICE "my_start_kernel here  %d \n",i);                }}

myinterrupt.c内容如下:

/*
 *  linux/mykernel/myinterrupt.c
 *
 *  Kernel internal my_timer_handler
 *
 *  Copyright (C) 2013  Mengning
 *
 */
#include <linux/kernel_stat.h>
#include <linux/export.h>
#include <linux/interrupt.h>
#include <linux/percpu.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/swap.h>
#include <linux/pid_namespace.h>
#include <linux/notifier.h>
#include <linux/thread_info.h>
#include <linux/time.h>
#include <linux/jiffies.h>
#include <linux/posix-timers.h>
#include <linux/cpu.h>
#include <linux/syscalls.h>
#include <linux/delay.h>
#include <linux/tick.h>
#include <linux/kallsyms.h>
#include <linux/irq_work.h>
#include <linux/sched.h>
#include <linux/sched/sysctl.h>
#include <linux/slab.h>


#include <asm/uaccess.h>
#include <asm/unistd.h>
#include <asm/div64.h>
#include <asm/timex.h>
#include <asm/io.h>


#define CREATE_TRACE_POINTS
#include <trace/events/timer.h>


/*
 * Called by timer interrupt.
 */
void my_timer_handler(void)
{
printk(KERN_NOTICE "\n>>>>>>>>>>>>>>>>>my_timer_handler here<<<<<<<<<<<<<<<<<<\n\n");
}


执行两条命令:

cd LinuxKernel/linux-3.9.4

qemu -kernel arch/x86/boot/bzImage

出现如下图所示的进程执行页面,

该程序执行两个动作,CPU在每个周期内执行一个进程,每10万个CPU周期打印输出一个进程的ID号,然后进入时间处理函数。

完成一个简单的时间片轮转的进程调度机制。

0 0