用户态和内核共享内存的使用范例

例子中,用户态程序的KERNEL_VIRT_ADDR就是内核模块打印的地址p这里是hardcoding(先加载内核模块,再把打印的地址赋值给KERNEL_VIRT_ADDR),

可以采用其他的方式传递。

2.6内核验证。

内核模块-----------------------

#include
#include
#include
#include
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Wheelz");
MODULE_DESCRIPTION("mmap demo");
static unsigned long p = 0;
static int __init init(void)
{
//分配共享内存(一个页面)
p = __get_free_pages(GFP_KERNEL, 0);
SetPageReserved(virt_to_page(p));
printk("<1> p = 0x%08x\n", p);
//在共享内存中写上一个字符串
strcpy(p, "Hello world!\n");
return 0;
}
static void __exit fini(void)
{
ClearPageReserved(virt_to_page(p));
free_pages(p, 0);
}
module_init(init);
module_exit(fini);
用户态程序---------------------------------
#include 
#include
#include
#include 
#include 
#define PAGE_SIZE (4*1024)
#define PAGE_OFFSET 0xc0000000
#define KERNEL_VIRT_ADDR0xc5e3c000
int main()
{
char *buf;
int fd;
unsigned long phy_addr;
fd=open("/dev/mem",O_RDWR);
if(fd == -1)
 perror("open");
phy_addr=KERNEL_VIRT_ADDR - PAGE_OFFSET;
buf=mmap(0, PAGE_SIZE,
 PROT_READ|PROT_WRITE, MAP_SHARED,
 fd, phy_addr);
if(buf == MAP_FAILED)
 perror("mmap");
puts(buf);//打印共享内存的内容
munmap(buf,PAGE_SIZE);
close(fd);
return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索内存
, include
, 内核
, 模块
, define
用户
内核态 用户态、用户态和内核态的区别、linux 用户态 内核态、用户态和内核态、linux用户态和内核态,以便于您获取更多的相关知识。

时间: 2024-07-28 14:15:44

用户态和内核共享内存的使用范例的相关文章

用户态和内核态

(1)用户态和内核态的概念? --->内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序--->用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取 (2)为什么需要用户态和内核态? --->由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 :用户态 和 内核态 (3)用

多线程之:用户态和内核态的区别

一:大话版用户态和内核态 (1)用户态和内核态的概念? --->内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序--->用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取 (2)为什么需要用户态和内核态? --->由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 :用

用户态与内核态通信-netlink处理大数据在用户空间和用户态的通信问题时间问题?

问题描述 netlink处理大数据在用户空间和用户态的通信问题时间问题? 在中断处理函数中进行网络报文的读取,然后通过netlink机制上传到用户态,进行报文分析.要求真个netlink上传数据,到数据处理完成,不超过250us,通过测试时间为2mn,左右 请问谁知道netlink用户态和内核通信时间大概多久? 解决方案 linux用户态与内核态通信netlink

Linux用户态和内核态

转载 - Linux用户态和内核态 作者 digoal 日期 2016-11-20 标签 Linux , 内核态 , 用户态 背景 原文 http://longmans1985.blog.163.com/blog/static/7060547520109262178736/ 原文 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个

基础:内核态和用户态的区别

当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态).此时处理器处于特权级最高的(0级)内核代码中执行.当进程处于内核态时,执行的内核代码会使用当前进程的内核栈.每个进程都有自己的内核栈.当进程在执行用户自己的代码时,则称其处于用户运行态(用户态).即此时处理器在特权级最低的(3级)用户代码中运行.当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态.因为中断处理程序将使用当前进程的内核栈.这与处于内核态的进程的状

Linux用户空间与内核空间(理解高端内存)

Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中.   Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存. 段页式机制如下图.   Linux内核地址空间划分 通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间.注意这里

什么是用户态?什么是内核态?如何区分?

本知识点来自网易云课堂的上课笔记,linux内核分析----中国科学技术大学软件学院:孟宁  一般现代CPU都有几种不同的指令执行级别. 在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态. 而在相应的低级别执行状态下,代码的掌控范围会受到限制.只能在对应级别允许的范围内活动. 举例: intel x86 CPU有四种不同的执行级别0-3,linux只使用了其中的0级和3级分别来表示内核态和用户态.             我想说,对于这个知识我问过我们学

用户空间与内核空间,进程上下文与中断上下文[总结]

1.前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文.看着很熟悉,半天又说不出到底是怎么回事,有什么区别.看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天好好结合书和网上的资料总结一下,加深理解. 2.用户空间与内核空间 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保

linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间

转载 - linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间 作者 digoal 日期 2016-11-20 标签 Linux , 用户空间 , 内核空间 , 用户态 , 内核态 , 进程上下文 , 中断上下文 背景 原文 http://blog.csdn.net/bingqingsuimeng/article/details/7924756 原文 linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及