¶øÔÚÖÚ¶à²Ù×÷ϵͳÖУ¬Linux ÒÔÆä¿ªÔ´¡¢¸ßЧ¡¢Îȶ¨µÄÌØµã£¬³ÉΪÁË·þÎñÆ÷¡¢Ç¶ÈëʽϵͳÄËÖÁ¸öÈË×ÀÃæÁìÓòµÄٮٮÕß
Linux µÄÄÚ´æ¹ÜÀí»úÖÆÊÇÆä¸ßЧÔËÐеĹؼüÖ®Ò»£¬ÆäÖС°Ë½ÓÐÓ³É䡱£¨Private Mapping£©¸üÊǰçÑÝמÙ×ãÇáÖØµÄ½ÇÉ«
±¾ÎĽ«ÉîÈë̽ÌÖ Linux ˽ÓÐÓ³ÉäµÄÔÀí¡¢ÓÅÊÆÒÔ¼°ÆäÔÚÏÖ´ú¼ÆËã»úϵͳÖеÄÓ¦Óã¬Ö¼ÔÚ½ÒʾÕâÒ»¼¼ÊõÈçºÎΪϵͳµÄ¸ßЧÓ밲ȫµì¶¨¼áʵ»ù´¡
Ò»¡¢Linux ÄÚ´æ¹ÜÀí¸ÅÀÀ Linux µÄÄÚ´æ¹ÜÀíÊÇÒ»¸ö¸´ÔÓ¶ø¾«Ï¸µÄϵͳ£¬Ëü¸ºÔð·ÖÅä¡¢»ØÊÕ¡¢±£»¤ºÍ¹²ÏíÄÚ´æ×ÊÔ´£¬È·±£ÏµÍ³Äܹ»¸ßЧ¡¢Îȶ¨µØÔËÐÐ
Linux ²ÉÓÃÁËÐéÄâÄÚ´æ¼¼Êõ£¬ÎªÃ¿¸ö½ø³ÌÌṩÁËÒ»¸ö¶ÀÁ¢µÄµØÖ·¿Õ¼ä£¬ÕâÒ»¿Õ¼äͨ¹ýÒ³±í£¨Page Table£©Ó³Éäµ½ÎïÀíÄÚ´æ
ÕâÖÖ»úÖÆ²»½öÌá¸ßÁËÄÚ´æµÄÀûÓÃÂÊ£¬»¹ÔöÇ¿ÁËϵͳµÄ°²È«ÐÔºÍÎȶ¨ÐÔ
ÔÚ Linux µÄÄÚ´æ²¼¾ÖÖУ¬Óû§¿Õ¼ä£¨User Space£©ºÍÄں˿ռ䣨Kernel Space£©ÊÇ·Ö¿ªµÄ£¬ÕâÓÐÖúÓÚ·ÀÖ¹Óû§½ø³ÌÖ±½Ó·ÃÎÊ»òÆÆ»µÄÚºËÊý¾Ý£¬ÌáÉýÁËϵͳµÄ°²È«ÐÔ
Óû§¿Õ¼äµÄÄÚ´æ¹ÜÀíÖ÷Ҫͨ¹ýһϵÁеÄÄÚ´æ·ÖÅäÆ÷£¨Èç `malloc`¡¢`brk`¡¢`mmap` µÈ£©ÊµÏÖ£¬¶øÄں˿ռäÔò¸ºÔð´¦ÀíÕâЩÇëÇ󣬹ÜÀíÎïÀíÒ³ÃæµÄ·ÖÅäÓë»ØÊÕ
¶þ¡¢Ë½ÓÐÓ³ÉäµÄ¸ÅÄîÓëÔÀí ˽ÓÐÓ³ÉäÊÇ Linux ÄÚ´æ¹ÜÀí»úÖÆÖеÄÒ»¸öºËÐĸÅÄËüÖ¸µÄÊÇΪÿ¸ö½ø³Ì´´½¨¶ÀÁ¢µÄÄÚ´æÇøÓò£¬ÕâÐ©ÇøÓòÔÚÎïÀíÄÚ´æÖв¢²»¹²Ïí£¬¼´Ê¹ËüÃǵÄÐéÄâµØÖ·Ïàͬ
ÕâÒâζ×Å£¬µ±Ò»¸ö½ø³Ì¶ÔÆä˽ÓÐÓ³ÉäµÄÄÚ´æÇøÓò½øÐÐÐÞ¸Äʱ£¬ÕâЩÐ޸IJ»»áÓ°Ïìµ½ÆäËû½ø³Ì»òϵͳȫ¾Ö״̬£¬´Ó¶ø±£Ö¤ÁËÊý¾ÝµÄ¸ôÀëÐԺͰ²È«ÐÔ
˽ÓÐÓ³ÉäµÄʵÏÖÒÀÀµÓÚ Linux µÄÐéÄâÄÚ´æÏµÍ³
µ±½ø³Ìͨ¹ý `mmap` »òÀàËÆÏµÍ³µ÷ÓÃÇëÇóÄÚ´æÓ³Éäʱ£¬Èç¹ûÖ¸¶¨ÁË˽ÓУ¨`MAP_PRIVATE`£©±êÖ¾£¬Äں˽«Îª¸Ã½ø³Ì´´½¨Ò»¸öеÄÐéÄâÄÚ´æÇøÓò£¬²¢ÎªÆä·ÖÅäÏàÓ¦µÄÎïÀíÒ³Ãæ£¨Èç¹ûÉÐδ·ÖÅ䣩
ÕâЩÎïÀíÒ³Ãæ¶ÔÓڸýø³ÌÊÇ˽Óе쬼´Ê¹ÆäËû½ø³Ì³¢ÊÔ·ÃÎÊÏàͬµÄÐéÄâµØÖ·£¬Ò²»áÒòΪҳ±íµÄ²»Í¬¶ø±»Ó³Éäµ½²»Í¬µÄÎïÀíÒ³Ãæ»ò´¥·¢´íÎó
Èý¡¢Ë½ÓÐÓ³ÉäµÄÓÅÊÆ 1.Êý¾Ý¸ôÀëÓ밲ȫ£ºË½ÓÐÓ³Éä×îÖ±½ÓµÄÓÅÊÆÔÚÓÚʵÏÖÁ˽ø³Ì¼äµÄÊý¾Ý¸ôÀë
ÿ¸ö½ø³ÌÓµÓÐ×Ô¼º¶ÀÁ¢µÄÄÚ´æÊÓͼ£¬»¥²»¸ÉÈÅ£¬ÓÐЧ·ÀÖ¹ÁËÊý¾Ýй¶ºÍ·Ç·¨·ÃÎÊ£¬ÔöÇ¿ÁËϵͳµÄ°²È«ÐÔ
2.Ìá¸ßÎȶ¨ÐÔ£ºÓÉÓÚ˽ÓÐÓ³ÉäÈ·±£Á˽ø³Ì¼äµÄÄÚ´æ¶ÀÁ¢£¬Ò»¸ö½ø³ÌµÄ±ÀÀ£»ò´íÎó²Ù×÷²»»áÓ°Ïìµ½ÆäËû½ø³Ì£¬´Ó¶øÌá¸ßÁËÕû¸öϵͳµÄÎȶ¨ÐÔ
3.ÓÅ»¯ÐÔÄÜ£ºËäȻ˽ÓÐÓ³ÉäÔÚÎïÀí²ãÃæÉÏ¿ÉÄÜÉæ¼°¶îÍâµÄÒ³Ãæ·ÖÅ䣬µ«´ÓϵͳÕûÌå½Ç¶È¿´£¬Ëü¼õÉÙÁËÒò¹²ÏíÄÚ´æ´øÀ´µÄͬ²½¿ªÏúºÍDZÔڵľºÕùÌõ¼þ£¬ÓÐÖúÓÚÌáÉý¶à½ø³Ì»·¾³ÏµÄÕûÌåÐÔÄÜ
4.Áé»îÐÔÓë¿ÉÀ©Õ¹ÐÔ£ºË½ÓÐÓ³ÉäÔÊÐí½ø³Ì¸ù¾ÝÐèÒª¶¯Ì¬ÉêÇëºÍÊÍ·ÅÄڴ棬ÕâÖÖÁé»îÐÔ¶ÔÓÚ´¦Àí²»È·¶¨´óСµÄÊý¾Ý¼¯»òʵÏÖ¸´ÔÓµÄÊý¾Ý½á¹¹ÓÈÎªÖØÒª
ͬʱ£¬Ëæ×Åϵͳ¸ºÔصÄÔö¼Ó£¬Ë½ÓÐÓ³Éä»úÖÆÄܹ»×ÔÈ»À©Õ¹µ½¸ü´óµÄÄÚ´æ¿Õ¼ä£¬Âú×ãÓ¦ÓÃÐèÇó
ËÄ¡¢Ë½ÓÐÓ³ÉäµÄÓ¦ÓÃʵÀý 1.½ø³Ì¼äͨÐÅ£¨IPC£©Öеݲȫ¸ôÀ룺ËäȻ˽ÓÐÓ³ÉäÖ÷ÒªÓÃÓÚÊý¾Ý¸ôÀ룬µ«ÔÚijЩÇé¿öÏ£¬½áºÏ¹²ÏíÓ³É䣨`MAP_SHARED`£©ºÍÐźÅÁ¿µÈͬ²½»úÖÆ£¬¿ÉÒÔÇÉÃîµØÊµÏÖ½ø³Ì¼ä°²È«¡¢¸ßЧµÄͨÐÅ
ÀýÈ磬ʹÓÃÄäÃûÄÚ´æÓ³É䣨Anonymous Memory Mapping£©½áºÏÎļþÃèÊö·û´«µÝ£¬¿ÉÒÔÔÚ²»Ö±½Ó±©Â¶ÎïÀíÄÚ´æµØÖ·µÄÇé¿öÏÂʵÏÖÊý¾Ý¹²Ïí
2.¶¯Ì¬¿â¼ÓÔØÓëÖ´ÐУºÔÚ Linux ϵͳÖУ¬¶¯Ì¬Á´½Ó¿â£¨Dynamic Link Libraries, DLLs »ò Shared Objects, SOs£©µÄ¼ÓÔØÊÇͨ¹ý˽ÓÐÓ³ÉäÍê³ÉµÄ
ÕâÑù×ö²»½ö±£Ö¤ÁË¿â´úÂëµÄ¶ÀÁ¢ÐÔ£¬»¹ÔÊÐíÔËÐÐʱÁ´½ÓÆ÷£¨Runtime Linker£©¸ù¾ÝÐèÒª¶¯Ì¬µØ½âÎö·ûºÅ£¬Ìá¸ßÁ˳ÌÐòµÄÁé»îÐԺͿÉά»¤ÐÔ
3.ÄÚ´æÓ³ÉäÎļþ£ºË½ÓÐÓ³ÉäÒ²³£ÓÃÓÚÎļþÄÚÈݵÄÄÚ´æÓ³Éä
ͨ¹ý½«ÎļþÄÚÈÝÓ³Éäµ½½ø³ÌµÄÐéÄâµØÖ·¿Õ¼ä£¬¿ÉÒÔʵÏÖ¶ÔÎļþµÄ¿ìËÙ¶Áд²Ù×÷£¬Í¬Ê±±£³ÖÊý¾ÝµÄ¶ÀÁ¢ÐÔ
ÕâÔÚ´¦Àí´óÐÍÎļþ»òÐèҪƵ·±·ÃÎÊÎļþµÄ³¡¾°ÖÐÓÈΪÓÐЧ
4.ɳÏä»·¾³£ºÔÚÈÝÆ÷¼¼Êõ£¨Èç Docker£©ÖУ¬Ë½ÓÐÓ³ÉäÊÇʵÏÖ½ø³Ì¸ôÀëºÍ×ÊÔ´ÏÞÖÆµÄÖØÒªÊÖ¶ÎÖ®Ò»
ͨ¹ýΪÿ¸öÈÝÆ÷´´½¨¶ÀÁ¢µÄÄÚ´æÓ³É䣬ȷ±£ÁËÈÝÆ÷ÄÚÓ¦ÓõÄÊý¾Ý°²È«ºÍÔËÐл·¾³µÄ¸ôÀë
Îå¡¢½áÂÛ ×ÛÉÏËùÊö£¬Linux µÄ˽ÓÐÓ³Éä»úÖÆÒÔÆä¶ÀÌØµÄÊý¾Ý¸ôÀëÐÔ¡¢°²È«ÐÔ¡¢Îȶ¨ÐÔºÍÁé»îÐÔ£¬ÔÚÏÖ´ú¼ÆËã»úϵͳÖз¢»Ó×Ų»¿ÉÌæ´úµÄ×÷ÓÃ
Ëü²»½öΪ½ø³Ì¼äͨÐÅ¡¢¶¯Ì¬¿â¼ÓÔØ¡¢Îļþ²Ù×÷µÈÌṩÁ˸ßЧ¡¢°²È«µÄ½â¾ö·½°¸£¬»¹ÎªÈÝÆ÷»¯¡¢ÐéÄ⻯µÈм¼ÊõµÄ·¢Õ¹µì¶¨Á˼áʵµÄ»ù´¡
Ëæ×ż¼ÊõµÄ²»¶Ï½ø²½£¬Ë½ÓÐÓ³Éä»úÖÆ½«¼ÌÐøÓÅ»¯ºÍÍêÉÆ£¬ÒÔÊÊÓ¦¸ü¼Ó¸´ÔÓ¶à±äµÄ¼ÆËã»·¾³£¬Îª¹¹½¨¸ü¼Ó¸ßЧ¡¢°²È«¡¢¿ÉÀ©Õ¹µÄ¼ÆËã»úϵͳ¹±Ï×Á¦Á¿
×ÜÖ®£¬Linux ˽ÓÐÓ³Éä²»½öÊÇÄÚ´æ¹ÜÀíÁìÓòµÄÒ»Ïî¹Ø¼ü¼¼Êõ£¬¸üÊÇÍÆ¶¯²Ù×÷ϵͳºÍÕû¸öÐÅÏ¢¼¼ÊõÁìÓò³ÖÐø·¢Õ¹µÄÖØÒªÁ¦Á¿
ͨ¹ýÉîÈëÀí½â²¢ºÏÀíÀûÓÃÕâÒ»»úÖÆ£¬ÎÒÃÇÄܹ»¸üºÃµØÉè¼Æ³ö·ûºÏÏÖ´úÐèÇóµÄ¸ßЧ¡¢°²È«¡¢¿ÉÀ©Õ¹µÄÈí¼þϵͳ