擬似ドライバを使用しているカーネル空間では、仮想メモリノードのスタックノードとヒープノードを区別する方法のプロセスのマップファイルを実装しようとしています。カーネル空間でvm_area_structのスタックノードとヒープノードを区別するにはどうすればよいですか?
long myIoctl(struct file* fp1, unsigned int pid, unsigned long b)
{
struct module* mod = NULL;
struct task_struct *my_task = NULL;
struct vm_area_struct * vm_area = NULL;
my_task = current;
vm_area = my_task -> mm -> mmap;
mod = THIS_MODULE;
while (vm_area) {
printk ("%p-%p ", (int *)(vm_area -> vm_start), (int *) (vm_area -> vm_end));
printk ("%d ", vm_area -> vm_flags);
if ((vm_area -> vm_flags) & VM_READ) {
printk("r");
}
if ((vm_area -> vm_flags) & VM_WRITE) {
printk("w");
} else {
printk ("_");
}
if ((vm_area -> vm_flags) & VM_EXEC) {
printk("x");
} else {
printk ("_");
}
if ((vm_area -> vm_flags) & VM_SHARED) {
printk("s");
} else {
printk ("p");
}
printk (" %.8lx ", (vm_area -> vm_pgoff) << 12);
if (vm_area -> vm_file) {
printk ("%ld ", vm_area -> vm_file -> f_inode -> i_ino);
printk ("%u\n", MAJOR(vm_area -> vm_file -> f_inode -> i_rdev));
printk (":%u\n", MINOR(vm_area -> vm_file -> f_inode -> i_rdev));
} else {
printk ("0\n");
}
vm_area = vm_area -> vm_next;
}
return 0;
}