Linux????е????
???????????? ???????[ 2012/12/17 10:28:16 ] ????????
???????????????????棨??????棩??????????????????е???????棨??????棩????????н????????????????????????4GB????????棬????????????????????????е???????棬??Щ????????????????????????????????????????????Ч??Χ????????????????????????????????Ч????????????????y??????????δ????????
??????????????????????????????????????????????struct mm_struct?????????????????????????????????????fork????????copy_mm????????????????????????????current->mm???????????????????е?mm_struct??????????????allocate_mm???mm_cachep_slab?????з???????????????CLONE_VM??????????????????allocate_mm????????????????????copy_mm?????н?mm??????丸????????????????
?????????????????????
????????????н???????????????????????????????????????????????????????????????????????????棬???????????????????????????????????????????????????????????????????????????Щ???????????????????????????????????????????????棬?????????????????????????????????????????????????????????????к??????????????????Щ????????????????????????
?????????????struct vm_area_struct????????????linux????У??????????????????????VMAs?????????????????????????????????????????????????λ????[vm_start??vm_end]?????struct vm_area_struct?У??????и?flags??????????VMA????????????????????????VMA?????????????????????????????????????????????????????VMA?????????????????????????open??close??fault??page_mkwrite??access??????
????????????????????????????????
?????????????????????????С???????????????????????????????????????е??κ????????????·??????????????????????????????????????????壬????????????????????????????????O??log??n?????????????????????????????????????????????????ж?λ????????????????????????????????????????????????????????????ú???????????????????????
????????????????????
?????????????????????????do_mmap????????????????????mmap?????????????do_mmap??????????????????????????????????do_munmap????????????????????munmap??????????do_munmap??????????
?????????????????????豸???mmap???????????????豸?????????????????????????????豸????????mmap???幦??????????????????????????????У???????????????????????д???????????????д???I/O??д?????y??????????????????????????????????????????????????????????С?
?????????????mmap????????????????′???????????????????????????VMA????????????VMA?????????????????豸??????????????????file_operations??????mmap?????????????????????????VMA????????VMA?????С?
??????ò????mmap????
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
int main()
{
int fd;
char *map;
char buf[20];
fd=open("mmap_test"?? O_RDWR);
//?????????????????????????NULL??????????
map=mmap(NULL??20??PROT_READ|PROT_WRITE??MAP_SHARED??fd??0);
strcpy(buf??map); /*read date from map*/
printf("%s"??buf);
strcpy(map??"This is a map test!");
munmap(map??20); //???????????
close(fd);
return 0;
}
???????
????????ó???????????????????????????????????????????????????????????????????????????????????????Σ??????????????????????????????Linux?????????????????????????????????PGD?????????????pgd_t???????飬???б??????PMD?е???????????????mm_struct?????а???pgd_t???????????????????м??????PMD???????????pmd_t???????飬???е???????PTE?е???????????????????????????pte_t???????飬????????????檔??????????????????????????????????????????????????????????????е?page_table_lock????
????????????е?????????????????????????????????????????????TLB???????·???棩??TLB???????????????????????????????檔???????????????????????????????????TLB?????????????????????????????????????????????У???????????????????????????????????????????????2.6?汾??????????????????????????????????δ????????????????д?????????????????????????????fork????????????????????????
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11