Linux内核学习笔记 -21 动手实践linux内存映射基础 - 下(用户测试进程,及测试进程的演示)

下面为用户程序代码,一个是读程序,一个是写程序 。

读程序中,将展示进程在用户态直接读取到我们在内核态写入内存的数据。而在写程序中,我们将展示进程在用户态直接向内核申请的内存区写入数据。

下面是读程序代码,读程序中,首先要做的是打开设备文件,open()

紧接着调用mmap系统调用,这是用户态的mmap函数,它第一个参数是映射区的地址,第二位是映射区的长度(LEN),接下啦是port的一个标志位,表示期望的内存保护标志,PROT_READ表示页内容可以被读取;紧接着是flags标志位(MAP_PRIVATE | MAP_LOCKED),它可以是多个标志位的组合,用来指定映射对象的类型,MAP_PRIVATE表示建立的是一个写入时拷贝的私有映射区,MAP_LOCKED表示的是锁定映射区的页面,从而防止页表被交换出内存。

fd就是刚刚打开的文件描述符

最后一位offset位表示被映射的对象从哪里开始,表示从该文件中的哪一个文件偏移量开始。这里我们从0开始

这里的循环loop++,我们可以看到,我们读取了映射区中2页的数据,并将它打印了出来

最后是一个死循环让进程执行完先暂时不要退出

接着看写入程序

写入程序中,我们可以看到与读取程序类似的代码。

区别仅在于写程序中,mmap标志位是MAP_SHARED,而都程序中用的是MAP_PRIVATE

MAP_SHARED就表示该映射区可以和其它所有映射这个对象的进程共享空间,因为我们要写入,如果我们还用的是私有的映射区,我们写入的数据将只能被写入的进程看到,其它映射该内存区的进

猜你喜欢

转载自blog.csdn.net/f2157120/article/details/107754390
今日推荐