强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁(yè) > 廠商 > 知識(shí) > munmap,mmapmunmap映射函數(shù)在windows下是什么如何修改

munmap,mmapmunmap映射函數(shù)在windows下是什么如何修改

來(lái)源:整理 時(shí)間:2023-10-19 03:03:14 編輯:智能門戶 手機(jī)版

1,mmapmunmap映射函數(shù)在windows下是什么如何修改

munmap(解除內(nèi)存映射) 相關(guān)函數(shù) mmap 表頭文件 #include #include 定義函數(shù) int munmap(void *start,size_t length); 函數(shù)說(shuō)明 munmap()用來(lái)取消參數(shù)start所指的映射內(nèi)存起始地址,參數(shù)length則是欲取消的內(nèi)存大校當(dāng)進(jìn)程結(jié)束或利用exec相關(guān)函。

mmapmunmap映射函數(shù)在windows下是什么如何修改

2,mmap devzero 還需要munmap嗎

munmap(解除內(nèi)存映射) 相關(guān)函數(shù) mmap 表頭文件 #include #include 定義函數(shù) int munmap(void *start,size_t length); 函數(shù)說(shuō)明 munmap()用來(lái)取消參數(shù)start所指的映射內(nèi)存起始地址,參數(shù)length則是欲取消的內(nèi)存大校當(dāng)進(jìn)程結(jié)束或利用exec相關(guān)函...
應(yīng)該不用吧。

mmap devzero 還需要munmap嗎

3,linux中mmap函數(shù)怎么用

mmap系統(tǒng)調(diào)用并不是完全為了用于共享內(nèi)存而設(shè)計(jì)的。它本身提供了不同于一般對(duì)普通文件的訪問(wèn)方式,進(jìn)程可以像讀寫內(nèi)存一樣對(duì)普通文件的操作。用open系統(tǒng)調(diào)用打開文件, 并返回描述符fd. 用mmap建立內(nèi)存映射, 并返回映射首地址指針start. 對(duì)映射(文件)進(jìn)行各種操作, 顯示(printf), 修改(sprintf). 用munmap(void *start, size_t lenght)關(guān)閉內(nèi)存映射. 用close系統(tǒng)調(diào)用關(guān)閉文件fd. 推薦你一本《linux就該這么學(xué)》書,看看吧會(huì)對(duì)你有用的
你是不是沒(méi)有temp這個(gè)文件??? 先建立好文件、在里面填充足夠的內(nèi)容(具體到你這個(gè),就是填充個(gè)4bytes),再mmap

linux中mmap函數(shù)怎么用

4,linux memmap是什么時(shí)候建立的

mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory Amount of memory to be used when the kernel is not able to see the whole system memory or for test. [IA-32] Use together with memmap= to avoid physical address space collisions. Without memmap= PCI devices could be placed at addresses belonging to unused RAM.mem=nopentium [BUGS=IA-32] Disable usage of 4MB pages for kernel memory.memmap=exactmap [KNL,IA-32] Enable setting of an exact E820 memory map, as specified by the user. Such memmap=exactmap lines can be constructed based on BIOS output or other requirements. See the memmap=nn@ss option description.memmap=nn[KMG]@ss[KMG] [KNL] Force usage of a specific region of memory Region of memory to be used, from ss to ss+nn.
mmap系統(tǒng)調(diào)用并不是完全為了用于共享內(nèi)存而設(shè)計(jì)的。它本身提供了不同于一般對(duì)普通文件的訪問(wèn)方式,進(jìn)程可以像讀寫內(nèi)存一樣對(duì)普通文件的操作。用open系統(tǒng)調(diào)用打開文件, 并返回描述符fd. 用mmap建立內(nèi)存映射, 并返回映射首地址指針start. 對(duì)映射(文件)進(jìn)行各種操作, 顯示(printf), 修改(sprintf). 用munmap(void *start, size_t lenght)關(guān)閉內(nèi)存映射. 用close系統(tǒng)調(diào)用關(guān)閉文件fd. 推薦你一本《linux就該這么學(xué)》書,看看吧會(huì)對(duì)你有用的

5,Linux下的幾種文件拷貝方式效率對(duì)比

不管是哪種操作系統(tǒng),要實(shí)現(xiàn)文件拷貝,必須陷入內(nèi)核,從磁盤讀取文件內(nèi)容,然后存儲(chǔ)到另一個(gè)文件。實(shí)現(xiàn)文件拷貝最通常的做法是:讀取文件用系統(tǒng)調(diào)用read()函數(shù),讀取到一定長(zhǎng)度的連續(xù)的用戶層緩沖區(qū),然后使用write()函數(shù)將緩沖區(qū)內(nèi)容寫入文件。也可以用標(biāo)準(zhǔn)庫(kù)函數(shù)fread()和fwrite(),但這兩個(gè)函數(shù)最終還是通過(guò)系統(tǒng)調(diào)用read()和write()實(shí)現(xiàn)拷貝的,因此可以歸為一類(不過(guò)效率肯定沒(méi)有直接進(jìn)行系統(tǒng)調(diào)用的高)。一個(gè)更高級(jí)的做法是使用虛擬存儲(chǔ)映射技術(shù)進(jìn)行,這種方法將源文件以共享方式映射到虛擬存儲(chǔ)器中,目的文件也以共享方式映射到虛擬地址空間中,然后使用memcpy高效地將源文件內(nèi)容復(fù)制到目的文件中。 點(diǎn)擊(此處)折疊或打開#include <stdio.h>#include <stdlib.h>#include <sys/mman.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <string.h>#include <sys/times.h>#define error(fmt,args...)\ printf(fmt, ##args);\ printf(":%s\n",strerror(errno))inline int cp_rw(int srcfd,int dstfd,char *buf,intlen);inline int cp_map(int srcfd,int dstfd,size_t len);int main(int argc,char **argv)if(argc!=3) printf("usage: cmd <src> <dst>");tck=sysconf(_SC_CLK_TCK); start = times(&stm); if((srcfd=open(argv[1],O_RDONLY))==-1) sprintf(cmdline,"rm -f %s",argv[2]); system(cmdline);return 0;}inline int cp_rw(int srcfd,int dstfd,char *buf,intlen){ int nread; while((nread=read(srcfd,buf,len))>0) { if(write(dstfd,buf,nread)!=nread) { error("write error"); return -1; } } if(nread ==-1) { error("read error"); return -1; } return 0;}inline int cp_map(int srcfd,int dstfd,size_t len){ char *src,*dst; if((src=mmap(0,len,PROT_READ,MAP_SHARED,srcfd,0))==MAP_FAILED) { error("mmap src error"); return -1; } if((dst=mmap(0,len,PROT_WRITE,MAP_SHARED,dstfd,0))==MAP_FAILED) { error("mmap dst error"); return -1; } if(memcpy(dst,src,len)==NULL) { error("memcpy error"); return -1; } munmap(src,len); munmap(dst,len); return 0;}運(yùn)行,拷貝一個(gè)1.1G的文件,得到如下結(jié)果[root@garden copy]# ./copy /home/ker.tgz ./ker.tgzcopying /home/ker.tgz to ./ker.tgz using cp_map:filesize=1030 MBytes Using 61.900000 secondscopying /home/ker.tgz to ./ker.tgz using cp_rw:filesize=1030 MBytes Using 34.330000 seconds使用read/write的方法居然比mmap的快一倍,這是怎么回事呢?理論上mmap系統(tǒng)調(diào)用只進(jìn)行了一次,而且拷貝文件是直接在內(nèi)核空間進(jìn)行的,read/write則需要通過(guò)系統(tǒng)調(diào)用把內(nèi)核空間的緩存復(fù)制到用戶空間,再將用戶空間緩存復(fù)制到內(nèi)核空間,拷貝次數(shù)明顯多了一個(gè)呢?速度為什么于理論預(yù)測(cè)的不一致呢?

6,malloc之后內(nèi)核發(fā)生了什么

考慮這樣一種常見(jiàn)的情況:用戶進(jìn)程調(diào)用malloc()動(dòng)態(tài)分配了一塊內(nèi)存空間,再對(duì)這塊內(nèi)存進(jìn)行訪問(wèn)。這些用戶空間發(fā)生的事會(huì)引發(fā)內(nèi)核空間的那些反映?本文將簡(jiǎn)單為您解答。1.brk系統(tǒng)調(diào)用服務(wù)例程malloc()是一個(gè)API,這個(gè)函數(shù)在庫(kù)中封裝了系統(tǒng)調(diào)用brk。因此如果調(diào)用malloc,那么首先會(huì)引發(fā)brk系統(tǒng)調(diào)用執(zhí)行的過(guò)程。brk()在內(nèi)核中對(duì)應(yīng)的系統(tǒng)調(diào)用服務(wù)例程為SYSCALL_DEFINE1(brk, unsigned long, brk),參數(shù)brk用來(lái)指定heap段新的結(jié)束地址,也就是重新指定mm_struct結(jié)構(gòu)中的brk字段。brk系統(tǒng)調(diào)用服務(wù)例程首先會(huì)確定heap段的起始地址min_brk,然后再檢查資源的限制問(wèn)題。接著,將新老heap地址分別按照頁(yè)大小對(duì)齊,對(duì)齊后的地址分別存儲(chǔ)與newbrk和okdbrk中。brk()系統(tǒng)調(diào)用本身既可以縮小堆大小,又可以擴(kuò)大堆大小??s小堆這個(gè)功能是通過(guò)調(diào)用do_munmap()完成的。如果要擴(kuò)大堆的大小,那么必須先通過(guò)find_vma_intersection()檢查擴(kuò)大以后的堆是否與已經(jīng)存在的某個(gè)虛擬內(nèi)存重合,如何重合則直接退出。否則,調(diào)用do_brk()進(jìn)行接下來(lái)擴(kuò)大堆的各種工作。 SYSCALL_DEFINE1(brk, unsigned long, brk) { unsigned long rlim, retval; unsigned long newbrk, oldbrk; struct mm_struct *mm = current->mm; unsigned long min_brk; down_write(&mm->mmap_sem); #ifdef CONFIG_COMPAT_BRK min_brk = mm->end_code; #else min_brk = mm->start_brk; #endif if (brk < min_brk) goto out; rlim = rlimit(RLIMIT_DATA); if (rlim < RLIM_INFINITY && (brk - mm->start_brk) + (mm->end_data - mm->start_data) > rlim) newbrk = PAGE_ALIGN(brk); oldbrk = PAGE_ALIGN(mm->brk); if (oldbrk == newbrk) goto set_brk; if (brk brk) { if (!do_munmap(mm, newbrk, oldbrk-newbrk)) goto set_brk; goto out; } if (find_vma_intersection(mm, oldbrk, newbrk+PAGE_SIZE)) goto out; if (do_brk(oldbrk, newbrk-oldbrk) != oldbrk) goto out; set_brk: mm->brk = brk; out: retval = mm->brk; up_write(&mm->mmap_sem); return retval; } brk系統(tǒng)調(diào)用服務(wù)例程最后將返回堆的新結(jié)束地址。2.擴(kuò)大堆用戶進(jìn)程調(diào)用malloc()會(huì)使得內(nèi)核調(diào)用brk系統(tǒng)調(diào)用服務(wù)例程,因?yàn)閙alloc總是動(dòng)態(tài)的分配內(nèi)存空間,因此該服務(wù)例程此時(shí)會(huì)進(jìn)入第二條執(zhí)行路徑中,即擴(kuò)大堆。do_brk()主要完成以下工作:1.通過(guò)get_unmapped_area()在當(dāng)前進(jìn)程的地址空間中查找一個(gè)符合len大小的線性區(qū)間,并且該線性區(qū)間的必須在addr地址之后。如果找到了這個(gè)空閑的線性區(qū)間,則返回該區(qū)間的起始地址,否則返回錯(cuò)誤代碼-ENOMEM;2.通過(guò)find_vma_prepare()在當(dāng)前進(jìn)程所有線性區(qū)組成的紅黑樹中依次遍歷每個(gè)vma,以確定上一步找到的新區(qū)間之前的線性區(qū)對(duì)象的位置。如果addr位于某個(gè)現(xiàn)存的vma中,則調(diào)用do_munmap()刪除這個(gè)線性區(qū)。如果刪除成功則繼續(xù)查找,否則返回錯(cuò)誤代碼。3.目前已經(jīng)找到了一個(gè)合適大小的空閑線性區(qū),接下來(lái)通過(guò)vma_merge()去試著將當(dāng)前的線性區(qū)與臨近的線性區(qū)進(jìn)行合并。如果合并成功,那么該函數(shù)將返回prev這個(gè)線性區(qū)的vm_area_struct結(jié)構(gòu)指針,同時(shí)結(jié)束do_brk()。否則,繼續(xù)分配新的線性區(qū)。4.接下來(lái)通過(guò)kmem_cache_zalloc()在特定的slab高速緩存vm_area_cachep中為這個(gè)線性區(qū)分配vm_area_struct結(jié)構(gòu)的描述符。5.初始化vma結(jié)構(gòu)中的各個(gè)字段。6.更新mm_struct結(jié)構(gòu)中的vm_total字段,它用來(lái)同級(jí)當(dāng)前進(jìn)程所擁有的vma數(shù)量。7.如果當(dāng)前vma設(shè)置了VM_LOCKED字段,那么通過(guò)mlock_vma_pages_range()立即為這個(gè)線性區(qū)分配物理頁(yè)框。否則,do_brk()結(jié)束。可以看到,do_brk()主要是為當(dāng)前進(jìn)程分配一個(gè)新的線性區(qū),在沒(méi)有設(shè)置VM_LOCKED標(biāo)志的情況下,它不會(huì)立刻為該線性區(qū)分配物理頁(yè)框,而是通過(guò)vma一直將分配物理內(nèi)存的工作進(jìn)行延遲,直至發(fā)生缺頁(yè)異常。3.缺頁(yè)異常的處理過(guò)程經(jīng)過(guò)上面的過(guò)程,malloc()返回了線性地址,如果此時(shí)用戶進(jìn)程訪問(wèn)這個(gè)線性地址,那么就會(huì)發(fā)生缺頁(yè)異常(Page Fault)。整個(gè)缺頁(yè)異常的處理過(guò)程非常復(fù)雜,我們這里只關(guān)注與malloc()有關(guān)的那一條執(zhí)行路徑。當(dāng)CPU產(chǎn)生一個(gè)異常時(shí),將會(huì)跳轉(zhuǎn)到異常處理的整個(gè)處理流程中。對(duì)于缺頁(yè)異常,CPU將跳轉(zhuǎn)到page_fault異常處理程序中: //linux-2.6.34/arch/x86/kernel/entry_32.S ENTRY(page_fault) RING0_EC_FRAME pushl $do_page_fault CFI_ADJUST_CFA_OFFSET 4 ALIGN error_code: ………… jmp ret_from_exception CFI_ENDPROC END(page_fault) 該異常處理程序會(huì)調(diào)用do_page_fault()函數(shù),該函數(shù)通過(guò)讀取CR2寄存器獲得引起缺頁(yè)的線性地址,通過(guò)各種條件判斷以便確定一個(gè)合適的方案來(lái)處理這個(gè)異常。3.1.do_page_fault()該函數(shù)通過(guò)各種條件來(lái)檢測(cè)當(dāng)前發(fā)生異常的情況,但至少do_page_fault()會(huì)區(qū)分出引發(fā)缺頁(yè)的兩種情況:由編程錯(cuò)誤引發(fā)異常,以及由進(jìn)程地址空間中還未分配物理內(nèi)存的線性地址引發(fā)。對(duì)于后一種情況,通常還分為用戶空間所引發(fā)的缺頁(yè)異常和內(nèi)核空間引發(fā)的缺頁(yè)異常。內(nèi)核引發(fā)的異常是由vmalloc()產(chǎn)生的,它只用于內(nèi)核空間內(nèi)存的分配。顯然,我們這里需要關(guān)注的是用戶空間所引發(fā)的異常情況。這部分工作從do_page_fault()中的good_area標(biāo)號(hào)處開始執(zhí)行,主要通過(guò)handle_mm_fault()完成。 //linux-2.6.34/arch/x86/mm/fault.c dotraplinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code) { ………… good_area: write = error_code & PF_WRITE; if (unlikely(access_error(error_code, write, vma))) { bad_area_access_error(regs, error_code, address); return; } fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); ………… } 3.2.handle_mm_fault()該函數(shù)的主要功能是為引發(fā)缺頁(yè)的進(jìn)程分配一個(gè)物理頁(yè)框,它先確定與引發(fā)缺頁(yè)的線性地址對(duì)應(yīng)的各級(jí)頁(yè)目錄項(xiàng)是否存在,如何不存在則分進(jìn)行分配。具體如何分配這個(gè)頁(yè)框是通過(guò)調(diào)用handle_pte_fault()完成的。 int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, unsigned int flags) { pgd_t *pgd; pud_t *pud; pmd_t *pmd; pte_t *pte; ………… pgd = pgd_offset(mm, address); pud = pud_alloc(mm, pgd, address); if (!pud) return VM_FAULT_OOM; pmd = pmd_alloc(mm, pud, address); if (!pmd) return VM_FAULT_OOM; pte = pte_alloc_map(mm, pmd, address); if (!pte) return VM_FAULT_OOM; return handle_pte_fault(mm, vma, address, pte, pmd, flags); } 3.3.handle_pte_fault()該函數(shù)根據(jù)頁(yè)表項(xiàng)pte所描述的物理頁(yè)框是否在物理內(nèi)存中,分為兩大類:請(qǐng)求調(diào)頁(yè):被訪問(wèn)的頁(yè)框不再主存中,那么此時(shí)必須分配一個(gè)頁(yè)框。寫時(shí)復(fù)制:被訪問(wèn)的頁(yè)存在,但是該頁(yè)是只讀的,內(nèi)核需要對(duì)該頁(yè)進(jìn)行寫操作,此時(shí)內(nèi)核將這個(gè)已存在的只讀頁(yè)中的數(shù)據(jù)復(fù)制到一個(gè)新的頁(yè)框中。用戶進(jìn)程訪問(wèn)由malloc()分配的內(nèi)存空間屬于第一種情況。
文章TAG:映射映射函數(shù)函數(shù)windowsmunmap

最近更新

  • 宣城開發(fā)區(qū)自動(dòng)化設(shè)備,什么是自動(dòng)化設(shè)備?一起來(lái)了解下!宣城開發(fā)區(qū)自動(dòng)化設(shè)備,什么是自動(dòng)化設(shè)備?一起來(lái)了解下!

    什么是自動(dòng)化設(shè)備?如果想了解更多自動(dòng)化設(shè)備的知識(shí),可以去生產(chǎn)自動(dòng)化設(shè)備的公司。深圳市普斯自動(dòng)化科技有限公司歡迎您的參觀和學(xué)習(xí),自動(dòng)化設(shè)備(Automationequipment)是自動(dòng)化系統(tǒng)中的大.....

    知識(shí) 日期:2023-10-19

  • u一,u左邊加一豎是什么符號(hào)u一,u左邊加一豎是什么符號(hào)

    u左邊加一豎是什么符號(hào)μ讀miuμ是10的-6次方。與m類似,m是10的-3次方。摩擦力μ2,單位uM中的u是什么意思呀長(zhǎng)度單位1um(1微米)=0.001mm(0.001毫米)讀音:米油母(音譯)U代表微3,汽車儀表指示出現(xiàn)u型.....

    知識(shí) 日期:2023-10-19

  • 趣鏈,區(qū)塊鏈有哪些結(jié)構(gòu)趣鏈,區(qū)塊鏈有哪些結(jié)構(gòu)

    區(qū)塊鏈有哪些結(jié)構(gòu)區(qū)塊鏈現(xiàn)在是比較熱門的一項(xiàng)技術(shù),有家叫趣鏈科技的公司在區(qū)塊鏈底層技術(shù)研究這塊做的挺好,一般說(shuō)來(lái),區(qū)塊鏈系統(tǒng)由數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、激勵(lì)層、合約層和應(yīng)用層組成的.....

    知識(shí) 日期:2023-10-19

  • 自動(dòng)化相關(guān)專業(yè)包括什么,自動(dòng)化專業(yè)有哪些?自動(dòng)化相關(guān)專業(yè)包括什么,自動(dòng)化專業(yè)有哪些?

    自動(dòng)化專業(yè)是什么?自動(dòng)化專業(yè)是什么?自動(dòng)化是機(jī)電專業(yè)的范疇。自動(dòng)化相關(guān)專業(yè)有哪些?自動(dòng)化專業(yè)包括什么:自動(dòng)化專業(yè)主要研究自動(dòng)控制的原理和方法,自動(dòng)化單元技術(shù)和集成技術(shù)及其在各種控.....

    知識(shí) 日期:2023-10-19

  • 核能是什么能源,核能是一種什么的能源嗎核能是什么能源,核能是一種什么的能源嗎

    核能是一種什么的能源嗎核能是一種新能源。核電作為一種新興的能源,已在世界能源中占有舉足輕重的地位?,F(xiàn)在的核電站都采取嚴(yán)密的安全措施,層層把關(guān)、縱深設(shè)防,確保萬(wàn)無(wú)一失。二級(jí)能.....

    知識(shí) 日期:2023-10-19

  • 胡志祥,胡志祥有兩周沒(méi)跟他聯(lián)系了唉胡志祥,胡志祥有兩周沒(méi)跟他聯(lián)系了唉

    胡志祥有兩周沒(méi)跟他聯(lián)系了唉你朋友啊用電話擴(kuò)他沒(méi)意外應(yīng)該能找到他2,八字起名我家女寶寶胡姓出生于201516請(qǐng)各位幫忙取個(gè)好名胡美琳(美麗,善良,活潑)胡志祥3,我有個(gè)侄子想給他起個(gè)名字叫胡祥.....

    知識(shí) 日期:2023-10-19

  • 關(guān)于電氣自動(dòng)化的英語(yǔ)短文,電氣自動(dòng)化英語(yǔ)不好可以學(xué)嗎關(guān)于電氣自動(dòng)化的英語(yǔ)短文,電氣自動(dòng)化英語(yǔ)不好可以學(xué)嗎

    求一份關(guān)于電氣自動(dòng)化、幫忙翻譯電氣工科和自動(dòng)化/論文的中英文科技文檔。這里簡(jiǎn)單介紹一下中國(guó)/,電氣自動(dòng)化的概念已經(jīng)出廠了,電氣工科及其自動(dòng)化專科英語(yǔ)翻譯~急!減少?gòu)妮敵龅诫妷夯虺?....

    知識(shí) 日期:2023-10-18

  • 服裝自動(dòng)化設(shè)備制造廠招聘,公司招聘信息來(lái)源于企業(yè)征信機(jī)構(gòu)服裝自動(dòng)化設(shè)備制造廠招聘,公司招聘信息來(lái)源于企業(yè)征信機(jī)構(gòu)

    上海慶杰自動(dòng)化設(shè)備制造有限公司招聘信息,沈陽(yáng)紀(jì)信自動(dòng)化設(shè)備有限公司招聘信息,上海慶杰自動(dòng)化設(shè)備制造有限公司...釘釘企業(yè)碼數(shù)據(jù)來(lái)自企業(yè)征信機(jī)構(gòu),包括企業(yè)風(fēng)險(xiǎn)數(shù)據(jù)、公司官網(wǎng)、公司簡(jiǎn).....

    知識(shí) 日期:2023-10-18

相關(guān)文章