Skip to content

CE408-OSL/Experiment09

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

آزمایش ۱۰ - آشنایی با وقفه‌ها

  • گروه شماره ۲۵
    • معین آعلی - ۴۰۱۱۰۵۵۶۱
    • ثمین اکبری - ۴۰۱۱۰۵۵۹۴

آزمایش اول

یک برنامه می‌نویسیم به نام interrupts.sh و دستور زیر را در آن قرار می‌دهیم:

cat /proc/interrupts

سپس به آن دسترسی اجرا می‌دهیم:

sudo chmod 777 interrupts.sh

و در نهایت اجرا می‌کنیم:

./interrupts.sh

نتیجه:

آزمایش دوم

در لینوکس، برنامه‌های سطح کاربر نمی‌توانند مستقیماً وقفه (Interrupt) تولید کنند. وقفه‌ها توسط سخت‌افزار یا کرنل مدیریت می‌شوند. تنها راهی که یک برنامه سطح کاربر بتواند یک وقفه را تحریک کند، از طریق syscall است.

ابتدا این را به enum داخل فایل /include/linux/interrupt.h اضافه می‌کنیم:

حال handler مربوط به آن را به فایل kernel/softirq.c اضافه می‌کنیم:

static void my_softirq_handler(struct softirq_action *a){
    printk(KERN_INFO "My custom softirq\n");
}

void __init softirq_init(void)
{
	int cpu;

	for_each_possible_cpu(cpu) {
		per_cpu(tasklet_vec, cpu).tail =
			&per_cpu(tasklet_vec, cpu).head;
		per_cpu(tasklet_hi_vec, cpu).tail =
			&per_cpu(tasklet_hi_vec, cpu).head;
	}
	open_softirq(TASKLET_SOFTIRQ, tasklet_action);
	open_softirq(HI_SOFTIRQ, tasklet_hi_action);
	open_softirq(MY_SOFTIRQ, my_softirq_handler);
}

حال در ادامه در همان فایل به لیست softirq_to_name وقفه جدید را اضافه می‌کنیم:

در نهایت کرنل را کامپایل و نصب و ریبوت می‌کنیم:

sudo make -j${nproc}

فرآیند کامپایل:

سپس:

sudo make modules_install
sudo make install
sudo update-grub

در نهایت سیستم‌ را ریبوت می‌کنیم و مجدد اسکریپت آزمایش ۱ را اجرا می‌کنیم تا وقفه خود را ببینیم.

ما به دلیل اینکه دم ددلاین آزمایش رو زدیم دیگه فرصت نشد کامپایل کنیم. اما خب در نهایت خروجی چیزی شبیه زیر خواهد شد:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages