在FreeBSD 使用者空間與核心空間使用記憶體共享

2021-04-26 04:39:04 字數 2156 閱讀 4725

kernel建立一裝置分配記憶體, 並將記憶體位址通過d_mmap 對映, userland使用mmap!

參考/sys/dev/mem/memdev.c.

freebsd 7.1

kernel **:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

//#include

/* for use with destroy_dev(9). */

static struct cdev *memio_dev;

static d_write_t memio_write;

static d_ioctl_t memio_ioctl;

static d_read_t  memio_read;

static d_mmap_t     memio_mmap;

#define memio_minor    212

static struct cdevsw memio_cdevsw = ;

static void *zbuf;

static int

memio_read(struct cdev *dev __unused, struct uio *uio, int flags __unused)

/* argsused */

static int

memio_write(struct cdev *dev __unused, struct uio *uio, int flags __unused)

static int

memio_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,

int prot __unused)

/* argsused */

static int

memio_ioctl(struct cdev *dev __unused, u_long cmd, caddr_t data __unused,

int flags __unused, struct thread *td)

/* argsused */

static int

memio_modevent(module_t mod __unused, int type, void *data __unused)

return (0);

}dev_module(memio, memio_modevent, null);

module_version(memio, 1);

makefile

srcs    = main.c

kmod    = memio

ko      = $(kmod).ko

kldmod  = t

.include

userland test**

#include

#include

#include

#include

#define page_size 4096

int main ( int argc, char **argv )

char * address = null;

address = mmap(null, page_size, prot_read|prot_write, map_shared, configfd, 0);

if (address == map_failed)

printf("address=%p/n", address );

printf("initial message: %s/n", address);

memcpy(address + 11 , "*user*", 6);

printf("changed message: %s/n", address);

close(configfd);

return 0;

}

核心空間與使用者空間

1.核心態與使用者態的區別 1 核心態 的 不受任何限制,可以訪問 所有處理器指令集 記憶體位址以及i o空間 2 使用者態的 只能訪問其位址空間的頁表項中規定的虛擬位址。2.使用者態到核心態的切換方式 1 系統呼叫 軟中斷的一種 由使用者程序主動發起 2 異常 當cpu在執行執行在使用者態下的程式...

核心空間與使用者空間

首先,這個概念的由來,我認為跟cpu的發展有很大關係,在目前cpu的保護模式下,系統需要對其賴以執行的資料進行保護,為了保證作業系統核心資料,我們把記憶體空間進行劃分,一部分為作業系統核心執行的空間,另一部分是應用程式執行的空間,所謂空間就是記憶體的位址。因此核心空間和使用者空間的概念就出現了。在3...

核心空間與使用者空間

關於虛擬記憶體有三點需要注意 上圖展示了整個程序位址空間的分布,其中4g的位址空間分為兩部分,在使用者空間內,對應了記憶體分布的五個段 資料段 段 bss段 堆 棧。在上篇文章中有詳細的介紹。這個圖示核心使用者空間的劃分,圖中最重要的就是高階記憶體的對映 其中kmalloc和vmalloc函式申請的...