
ã³ãŒããééãããšãéåžžãã»ã°ã¡ã³ããŒã·ã§ã³ãã©ãŒã«ããã¡ãã»ãŒãžã衚瀺ããããã»ã°ã¡ã³ããŒã·ã§ã³ãã©ãŒã«ããã«ççž®ãããããšããããããŸãã ãããŠãååãšçµå¶é£ãç§ã®ãšããã«æ¥ãŸããã ä¿®æ£ããã»ã°ã¡ã³ããŒã·ã§ã³éåããããŸãïŒã-ããŸããã¯ããããã¯ç§ã®ããã§ããç§ã¯éåžžçããŸãã ãããããã»ã°ã¡ã³ããŒã·ã§ã³ãã©ãŒã«ããã®å®éã®æå³ãç¥ã£ãŠãã人ã¯ã©ããããããŸããïŒ
ãã®è³ªåã«çããããã«ã¯ãé ã1960幎代ã«æ»ãå¿ èŠããããŸãã ã³ã³ãã¥ãŒã¿ãŒãã©ã®ããã«æ©èœããã®ãããããã¯çŸä»£ã®ã³ã³ãã¥ãŒã¿ãŒãã©ã®ããã«ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããã®ãã説æããããšæããŸãã ããã¯ããã®å¥åŠãªãšã©ãŒã¡ãã»ãŒãžã®åå ãç解ããã®ã«åœ¹ç«ã¡ãŸãã
以äžã®æ å ±ã¯ãã¹ãŠãã³ã³ãã¥ãŒã¿ãŒã¢ãŒããã¯ãã£ã®åºæ¬ã§ãã ãããŠãå¿ èŠãªããç§ã¯ãã®é åã«æ·±ãå ¥ããŸããã ãŸããç§ã¯ããç¥ãããŠããçšèªããã¹ãŠã®äººã«é©çšããã®ã§ãç§ã®æçš¿ã¯ãã³ã³ãã¥ãŒã¿ãã¯ãããžãŒã«ç²ŸéããŠããªã人ã«ãç解ã§ããããã«ãªããŸãã ã¡ã¢ãªãŒã®æäœã®åé¡ãããã«è©³ãã調ã¹ããå Žåã¯ãå ¥æå¯èœãªå€æ°ã®æç®ãåç §ã§ããŸãã ãããåæã«ãäžéšã®OSïŒLinuxãªã©ïŒã®ã«ãŒãã«ã®ãœãŒã¹ã³ãŒããæãäžããããšãå¿ããªãã§ãã ããã ããã§ã¯ãã³ã³ãã¥ãŒã¿ãŒãã¯ãããžãŒã®æŽå²ã«ã€ããŠã¯èª¬æããŸãããããã€ãã®ããšã¯èª¬æããŸããã
ã¡ãã£ãšããæŽå²
ãããããããã³ã³ãã¥ãŒã¿ãŒã¯éåžžã«å€§ãããéããéããåæã«åäžã®ããã»ããµãŒãšçŽ16 Kbã®ã¡ã¢ãªãŒãææããŠããŸããã ãã®ãããªã¢ã³ã¹ã¿ãŒã®ã³ã¹ãã¯çŽ150,000ãã«ã§ãäžåºŠã«1ã€ã®ã¿ã¹ã¯ããå®è¡ã§ããŸããã§ãããç¹å®ã®æç¹ã§å®è¡ãããããã»ã¹ã¯1ã€ã ãã§ãã åœæã®ã¡ã¢ãªã¢ãŒããã¯ãã£ã¯ã次ã®ããã«æŠç¥çã«è¡šãããšãã§ããŸãã

ã€ãŸããOSã¯ãããšãã°ã䜿çšå¯èœãªãã¹ãŠã®ã¡ã¢ãªã®4åã®1ãå ããæ®ãã¯ãŠãŒã¶ãŒã¿ã¹ã¯å°çšã§ããã åœæã®OSã®åœ¹å²ã¯ãCPUå²ã蟌ã¿ã䜿çšããŠããŒããŠã§ã¢ãåçŽã«å¶åŸ¡ããããšã§ããã ãã®ãããOSã¯ãããã€ã¹ããããŒã¿ãã³ããŒããããããæäœããããã«ïŒ PIOã¢ãŒã ïŒãã¡ã¢ãªãå¿ èŠãšããŸããã ç»é¢ã«ããŒã¿ã衚瀺ããã«ã¯ãã¡ã€ã³ã¡ã¢ãªã®äžéšã䜿çšããå¿ èŠããããŸããããããªãµãã·ã¹ãã ã«ã¯ç¬èªã®RAMããªãããæ°ãããã€ãããããã§ãã ãããŠããã§ã«ããã°ã©ã èªäœã¯OSã®çŽåŸã®ã¡ã¢ãªé åã§å®è¡ãããã¿ã¹ã¯ã解決ããŸããã
ãªãœãŒã¹å ±æ
äž»ãªåé¡ã¯ã150,000ãã«ã®è²»çšããããããã€ã¹ãã·ã³ã°ã«ã¿ã¹ã¯ã§ãããæ°ãããã€ãã®ããŒã¿ã®åŠçã«äžž1æ¥è²»ãããããšã§ãã
è«å€§ãªè²»çšã®ãããè€æ°ã®ã¿ã¹ã¯ãåæã«åŠçããããã«äžåºŠã«è€æ°ã®ã³ã³ãã¥ãŒã¿ãŒãè³Œå ¥ããäœè£ã®ãã人ã¯ã»ãšãã©ããŸããã§ããã ãã®ããã人ã ã¯1å°ã®ã³ã³ãã¥ãŒã¿ãŒã®ã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãå ±æããæ¹æ³ãæ¢ãå§ããŸããã ããã§ããã«ãã¿ã¹ã¯ã®æ代ãæ¥ãŸããã åœæã¯ããã«ãããã»ããµã³ã³ãã¥ãŒã¿ã«ã€ããŠèª°ãèããŠããªãã£ãããšã«æ³šæããŠãã ããã ããã§ã¯ã1ã€ã®CPUãæèŒããã³ã³ãã¥ãŒã¿ãŒã«è€æ°ã®ç°ãªãã¿ã¹ã¯ãå®è¡ãããã«ã¯ã©ãããã°ããã§ããããïŒ
解決çã¯ãã¿ã¹ã¯ã¹ã±ãžã¥ãŒã©ïŒã¹ã±ãžã¥ãŒãªã³ã°ïŒã䜿çšããããšã§ããã1ã€ã®ããã»ã¹ãäžæãããI / Oæäœã®å®äºãåŸ ã£ãŠããéãCPUã¯å¥ã®ããã»ã¹ãå®è¡ã§ããŸããã ããã§ã¯ããã¿ã¹ã¯ã¹ã±ãžã¥ãŒã©ãæ±ããŸããããããã¯ã¡ã¢ãªã«é¢ä¿ã®ãªãéåžžã«åºç¯ãªãããã¯ã§ãã
ã³ã³ãã¥ãŒã¿ãè€æ°ã®ã¿ã¹ã¯ã亀äºã«å®è¡ã§ããå Žåãã¡ã¢ãªå²ãåœãŠã¯æ¬¡ã®ããã«ãªããŸãã

ã¿ã¹ã¯AãšBã¯ãã£ã¹ã¯ã«ã³ããŒããããã£ã¹ã¯ããã³ããŒããããããšã³ã¹ããé«ããããããã¡ã¢ãªã«ä¿åãããŸãã ãŸããããã»ããµãç¹å®ã®ã¿ã¹ã¯ãå®è¡ãããšãé¢é£ããŒã¿ã®ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããŸãã ããããåé¡ããããŸãã
1人ã®ããã°ã©ããã¿ã¹ã¯Bãå®äºããããã®ã³ãŒããæžããšããå²ãåœãŠãããã¡ã¢ãªã»ã°ã¡ã³ãã®å¢çãç¥ãå¿ èŠããããŸãã ã¿ã¹ã¯Bãã¡ã¢ãªã®10ã12 KBãå æããŠããå Žåãåã¡ã¢ãªã¢ãã¬ã¹ã¯ãããã®å¢çå ã§ããŒãã³ãŒãã£ã³ã°ããå¿ èŠããããŸãã ããããã³ã³ãã¥ãŒã¿ãŒãäžåºŠã«3ã€ã®ã¿ã¹ã¯ãå®è¡ããå Žåãã¡ã¢ãªã¯ããå€ãã®ã»ã°ã¡ã³ãã«åå²ãããŸããã€ãŸããã¿ã¹ã¯Bã®ã»ã°ã¡ã³ããã·ããããå¯èœæ§ããããŸãã ãã®åŸãããå°ãªãã¡ã¢ãªã§åäœãããã¹ãŠã®ãã€ã³ã¿ãå€æŽã§ããããã«ãããã°ã©ã ã³ãŒããæžãæããå¿ èŠããããŸãã
ããã§å¥ã®åé¡ãçºçããŸãïŒã¿ã¹ã¯Bãã¿ã¹ã¯Aã«å²ãåœãŠãããã¡ã¢ãªã»ã°ã¡ã³ãã«ã¢ã¯ã»ã¹ãããšã©ããªããŸããïŒ ããã¯ç°¡åã«çºçããå¯èœæ§ããããŸããã¡ã¢ãªãã€ã³ã¿ãæäœããå Žåãããããªãã¹ãç¯ãã ãã§ååã§ãããããã°ã©ã ã¯å®å šã«ç°ãªãã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ããå¥ã®ããã»ã¹ã®ããŒã¿æŽåæ§ã«éåããŸãã ãã®å Žåãã¿ã¹ã¯Aã¯ãã»ãã¥ãªãã£ã®èŠ³ç¹ããéåžžã«éèŠãªããŒã¿ãåŠçã§ããŸãã Bãã¡ã¢ãªé åAã«äŸµå ¥ããã®ãé²ãæ¹æ³ã¯ãããŸãããæåŸã«ãããã°ã©ãã®ãšã©ãŒã«ãããã¿ã¹ã¯Bã¯OSã¡ã¢ãªé åïŒãã®å Žåã¯0ã4 KBïŒãäžæžãã§ããŸãã
ã¢ãã¬ã¹ç©ºé
ã¡ã¢ãªã«ä¿åãããããã€ãã®ã¿ã¹ã¯ãå®å šã«å®è¡ã§ããããã«ãOSãšããŒããŠã§ã¢ã®æ¯æŽãå¿ èŠã§ãã ç¹ã«ãã¢ãã¬ã¹ç©ºéã ããã¯ãããã»ã¹ã«ãã£ãŠOSã«ãã£ãŠå²ãåœãŠãããäžçš®ã®ã¡ã¢ãªæœè±¡åã§ãã ä»æ¥ãããã¯ã©ãã§ã䜿çšãããŠããåºæ¬çãªæŠå¿µã§ãã å°ãªããšãæ°éçšã®ãã¹ãŠã®ã³ã³ãã¥ãŒã¿ãŒã¯ãã®ã¢ãããŒããæ¡çšããŠãããè»ã«ã¯ç¬èªã®ç§å¯ããããŸãã 人äºãã¹ããŒããã©ã³ããã¬ããã²ãŒã ã³ã³ãœãŒã«ãã¹ããŒããŠã©ãããATM-ä»»æã®ããã€ã¹ãçªããšããã³ãŒãã¹ã¿ãã¯ããŒããã®ååã«åŸã£ãŠã¡ã¢ãªãå²ãåœãŠãããŠããããšãããããŸãã
ã¢ãã¬ã¹ç©ºéã«ã¯ãããã»ã¹ãå®äºããããã«å¿ èŠãªãã¹ãŠãå«ãŸããŠããŸãã
- CPUãåŸããªããã°ãªããªãæ©æ¢°åœä»€ã
- ãããã®ãã·ã³åœä»€ãæ©èœããããŒã¿ã
æŠç¥çã«ãã¢ãã¬ã¹ç©ºéã¯æ¬¡ã®ããã«åå²ãããŸãã

- ã¹ã¿ãã¯ã¯ãåŒã³åºãããé¢æ°ããã®åŒæ°ãããã³é¢æ°å ã®åããŒã«ã«å€æ°ã«é¢ããæ å ±ãããã°ã©ã ãä¿åããã¡ã¢ãªé åã§ãã é åã®ãµã€ãºã¯ãããã°ã©ã ã®å®è¡ã«å¿ããŠå€ããå ŽåããããŸãã é¢æ°ãåŒã³åºããšã¹ã¿ãã¯ã倧ãããªããå®äºãããšã¹ã¿ãã¯ãå°ãããªããŸãã
- ããŒãã¯ãããã°ã©ã ã奜ããªããã«å®è¡ã§ããã¡ã¢ãªé åã§ãã ãšãªã¢ã®ãµã€ãºã¯ç°ãªãå ŽåããããŸãã ããã°ã©ãã¯ã
malloc()
é¢æ°ã䜿çšããŠããŒãã¡ã¢ãªã®äžéšã䜿çšããæ©äŒãããããã®ã¡ã¢ãªé åãå¢å ããŸãã ãªãœãŒã¹ã®è¿åŽã¯free()
ã䜿çšããŠå®è¡ããããã®åŸãããŒããåæžãããŸãã - ã³ãŒãã»ã°ã¡ã³ãã¯ãã³ã³ãã€ã«ãããããã°ã©ã ã®ãã·ã³åœä»€ãæ ŒçŽãããã¡ã¢ãªé åã§ãã ãããã¯ã³ã³ãã€ã©ãŒã«ãã£ãŠçæãããŸãããæåã§äœæããããšãã§ããŸãã ãã®ã¡ã¢ãªé åã¯ã3ã€ã®éšåïŒããã¹ããããŒã¿ãBSSïŒã«åå²ããããšãã§ããŸãã ãã®ã¡ã¢ãªé åã¯ãã³ã³ãã€ã©ã«ãã£ãŠæ±ºå®ãããåºå®ãµã€ãºã§ãã ãã®äŸã§ã¯ã1 KbãšããŸãã
ã¹ã¿ãã¯ãšããŒãã¯ãµã€ãºãç°ãªãå¯èœæ§ãããããããããã¯å ±éã¢ãã¬ã¹ç©ºéã®å察åŽã®éšåã«é 眮ãããŸãã ãµã€ãºå€æŽã®æ¹åã¯ç¢å°ã§ç€ºãããŠããŸãã ãããã®é åãéè€ããªãããã«ããããšã¯OSã®è²¬ä»»ã§ãã
ã¡ã¢ãªä»®æ³å
ã¿ã¹ã¯Aã«äœ¿çšå¯èœãªãã¹ãŠã®ãŠãŒã¶ãŒã¡ã¢ãªããããšä»®å®ããŸãã ãããŠãããã§åé¡BãçºçããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ä»®æ³åã§èŠã€ãããŸããã
AãšBãåæã«ã¡ã¢ãªã«ããå Žåãåã®å³ã®1ã€ãæãåºãããŠãã ããã

Aããããšãã°11 KBã®ã€ã³ããã¯ã¹ã§ãç¬èªã®ã¢ãã¬ã¹ç©ºéã§ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããããšããŠãããšããŸãã ããã圌女èªèº«ã®ã¹ã¿ãã¯ã«ãªãå¯èœæ§ãããããŸãã ãã®å Žåãå®éã«ã¯ã¿ã¹ã¯Bã®é åã瀺ãããšãã§ãããããOSã¯ã€ã³ããã¯ã¹1500ãããŒãããªãæ¹æ³ãææ¡ããå¿ èŠããããŸãã
å®éãåããã°ã©ã ãã¡ã¢ãªãšã¿ãªãã¢ãã¬ã¹ç©ºéã¯ä»®æ³ã¡ã¢ãªã§ãã åœç© ã ãŸããã¿ã¹ã¯Aã®ã¡ã¢ãªé åã§ã¯ã11 KBã®ã€ã³ããã¯ã¹ãåœã®ã¢ãã¬ã¹ã«ãªããŸãã ã€ãŸã-ä»®æ³ã¡ã¢ãªã®ã¢ãã¬ã¹ã
ã³ã³ãã¥ãŒã¿ãŒã§å®è¡ãããŠããåããã°ã©ã ã¯ãåœã®ïŒä»®æ³ïŒã¡ã¢ãªã§åäœããŸã ã äžéšã®ãããã§ã¯ãOSã¯ã¡ã¢ãªã®ä»»æã®é åã«ã¢ã¯ã»ã¹ãããšãã«ããã»ã¹ãã ãŸããŸãã ä»®æ³åã®ãããã§ãã©ã®ããã»ã¹ãããã«å±ããŠããªãã¡ã¢ãªã«ã¢ã¯ã»ã¹ã§ããŸãããã¿ã¹ã¯Aã¯ã¿ã¹ã¯Bã®ã¡ã¢ãªãŸãã¯OSèªäœã«é©åããŸããã åæã«ããŠãŒã¶ãŒã¬ãã«ã§ã¯ãOSã«ãŒãã«ã®åºç¯ã§è€éãªã³ãŒãã®ãããã§ããã¹ãŠãå®å šã«ééçã§ãã
ãããã£ãŠãåã¡ã¢ãªã¢ã¯ã»ã¹ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ãã£ãŠèŠå¶ãããŸãã ãŸããå®è¡äžã®ããŸããŸãªããã°ã©ã ã®åäœãé ãããªãããã«ãããã¯éåžžã«å¹ççã«è¡ãå¿ èŠããããŸãã å¹çã¯ããŒããŠã§ã¢ãäž»ã«CPUããã³MMUãªã©ã®äžéšã®ã³ã³ããŒãã³ãã«ãã£ãŠæäŸãããŸãã åŸè ã¯1970幎代åæã«å¥ã®ããããšããŠç»å Žããä»æ¥ã§ã¯MMUãããã»ããµã«çŽæ¥çµã¿èŸŒãŸãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§å¿ ã䜿çšãããŠããŸãã
以äžã¯ãã¡ã¢ãªã¢ãã¬ã¹ãæäœããæ¹æ³ã瀺ãå°ããªCããã°ã©ã ã§ãã
#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { int v = 3; printf("Code is at %p \n", (void *)main); printf("Stack is at %p \n", (void *)&v); printf("Heap is at %p \n", malloc(8)); return 0; }
LP64 X86_64ãã·ã³ã§ã¯ã次ã®çµæã衚瀺ãããŸãã
Code is at 0x40054c
Stack is at 0x7ffe60a1465c
Heap is at 0x1ecf010
説æããããã«ãæåã«ã³ãŒãã»ã°ã¡ã³ãã次ã«ããŒãã次ã«ã¹ã¿ãã¯ã®é ã«é²ã¿ãŸãã ããããããã3ã€ã®ã¢ãã¬ã¹ã¯ãã¹ãŠåœç©ã§ãã å€ã3ã®æŽæ°å€æ°ã¯ãç©çã¢ãã¬ã¹0x7ffe60a1465cã«ã¯ãŸã£ããä¿åãããŸããããã¹ãŠã®ãŠãŒã¶ãŒããã°ã©ã ãä»®æ³ã¢ãã¬ã¹ãæäœããã«ãŒãã«ãŸãã¯ããŒããŠã§ã¢ãã©ã€ããŒã¬ãã«ã§ã¯ç©çã«ãŒãã«ã¢ãã¬ã¹ã®ã¿ãèš±å¯ãããããšãå¿ããªãã§ãã ããã
ç信転é
転éïŒå€æãå€æãã¢ãã¬ã¹å€æïŒã¯ãä»®æ³ã¢ãã¬ã¹ãç©çã¢ãã¬ã¹ã«ãããã³ã°ããããã»ã¹ãæãçšèªã§ãã MMUã¯ãããè¡ã£ãŠããŸãã å®è¡äžã®ããã»ã¹ããšã«ãOSã¯ãã¹ãŠã®ä»®æ³ã¢ãã¬ã¹ãšç©çã¢ãã¬ã¹ã®å¯Ÿå¿ãèšæ¶ããå¿ èŠããããŸãã ãããŠãããã¯ããªãé£ããäœæ¥ã§ãã å®éãOSã¯åŒã³åºãããšã«åãŠãŒã¶ãŒããã»ã¹ã®ã¡ã¢ãªã管çããå¿ èŠããããŸãã ãããã£ãŠãç©çã¡ã¢ãªã®æªå€¢ã®ãããªçŸå®ãã䟿å©ã§åŒ·åã§äœ¿ããããæœè±¡åã«å€ããŸãã
ããèŠãŠã¿ãŸãããã
ããã»ã¹ãéå§ãããšãOSã¯16 Kbã§ãã£ãŠãäžå®éã®ç©çã¡ã¢ãªãäºçŽããŸãã ãã®ã¢ãã¬ã¹ç©ºéã®éå§ã¢ãã¬ã¹ã¯ãç¹å¥ãª
base
å€æ°ã«ä¿åãããŸãã ãŸãã
bounds
å€æ°ã¯ãå²ãåœãŠãããã¡ã¢ãªé åã®ãµã€ãºãèšé²ããŸãããã®äŸã§ã¯16 Kbã§ãã ãããã®2ã€ã®å€ã¯ãåããã»ã¹ããŒãã«-PCBïŒ Process Control Block ïŒã«èšé²ãããŸãã
ãããä»®æ³ã¢ãã¬ã¹ç©ºéã§ãïŒ

ãããŠãããã¯åœŒã®ç©ççãªã€ã¡ãŒãžã§ãã

OSã¯ã4ã20 KBã®ç©çã¢ãã¬ã¹ã®ç¯å²ãå²ãåœãŠãããšã決å®ããŸããã€ãŸãã
base
å€ã¯4 KBã§ããã
bounds
å€ã¯4 + 16 = 20 KBã§ãã ããã»ã¹ãå®è¡ã®ããã«ãã¥ãŒã«å ¥ãããããšïŒCPUæéãããã«å²ãåœãŠãããŸãïŒãOSã¯PCBããäž¡æ¹ã®å€æ°ã®å€ãèªã¿åããããããç¹å¥ãªCPUã¬ãžã¹ã¿ã«ã³ããŒããŸãã 次ã«ãããã»ã¹ãéå§ãããããšãã°2 KBã®ä»®æ³ã¢ãã¬ã¹ïŒããŒãå ïŒã«ã¢ã¯ã»ã¹ããããšããŸãã ãã®ã¢ãã¬ã¹ã«ãCPUã¯OSããåãåã£ã
base
å€ãè¿œå ããŸãã ãããã£ãŠãç©çã¢ãã¬ã¹ã¯2+ 4 = 6 Kbã§ãã
ç©çã¢ãã¬ã¹=ä»®æ³ã¢ãã¬ã¹+ããŒã¹
çµæã®ç©çã¢ãã¬ã¹ïŒ6 KbïŒãéžæããé åïŒ4ã20 KbïŒã®å¢çããå€ããå Žåãããã¯ããã»ã¹ãããã«å±ããŠããªãã¡ã¢ãªã«ã¢ã¯ã»ã¹ããããšããŠããããšãæå³ããŸãã 次ã«ãCPUã¯äŸå€ãã¹ããŒãããã®äŸå€ãåŠçããOSãå ±åããŸãã ãã®å Žåãã·ã¹ãã ã¯éåžžãããã»ã¹ã«éåãéç¥ããŸãïŒ SIGSEGV ãSegmentation Faultã ãã®ä¿¡å·ã¯ããã©ã«ãã§ããã»ã¹ãäžæããŸãïŒããã¯èšå®å¯èœã§ãïŒã
ã¡ã¢ãªåé å
ã¿ã¹ã¯Aãå®è¡ãã¥ãŒããé€å€ãããŠããå Žåãããã¯ããã«åªããŠããŸãã ããã¯ãã¹ã±ãžã¥ãŒã©ãå¥ã®ã¿ã¹ã¯ïŒããšãã°BïŒãå®è¡ããããã«èŠæ±ãããããšãæå³ããŸãã Bã®å®è¡äžãOSã¯ã¿ã¹ã¯Aã®ç©çã¹ããŒã¹å šäœãåé åžã§ããŸãããŠãŒã¶ãŒããã»ã¹ã®å®è¡äžãOSã¯å€ãã®å Žåãããã»ããµã®å¶åŸ¡ã倱ããŸãã ããããããã»ã¹ãã·ã¹ãã ã³ãŒã«ãè¡ããšãããã»ããµã¯åã³OSå¶åŸ¡ã«æ»ããŸãã ãã®ã·ã¹ãã ã³ãŒã«ã®åã«ãOSã¯ãããã»ã¹ã®ã¢ãã¬ã¹ç©ºéãå¥ã®ç©çããŒãã£ã·ã§ã³ã«å®å šã«ååé ãããªã©ãã¡ã¢ãªã䜿çšããŠäœã§ãã§ããŸãã
ãã®äŸã§ã¯ãããã¯éåžžã«ç°¡åã§ããOSã¯16ãããã€ãã®é åãé©åãªãµã€ãºã®å¥ã®ç©ºãé åã«ç§»åããã¿ã¹ã¯Aã®ããŒã¹å€æ°ãšå¢çå€æ°ã®å€ãæŽæ°ããŸããå€æŽãããŸããã
ã¿ã¹ã¯Aã®èŠ³ç¹ããã¯ãäœãå€åãããèªèº«ã®ã¢ãã¬ã¹ã¹ããŒã¹ã¯0ã16 Kbã®ç¯å²ã«ãããŸãã åæã«ãOSãšMMUã¯ã¿ã¹ã¯ã®åã¡ã¢ãªã¢ã¯ã»ã¹ãå®å šã«å¶åŸ¡ããŸãã ã€ãŸããããã°ã©ããŒã¯ä»®æ³é å0ã16 KbãæäœããMMUã¯ç©çã¢ãã¬ã¹ã§ãããã³ã°ãè¡ããŸãã
åé åžåŸãã¡ã¢ãªã€ã¡ãŒãžã¯æ¬¡ã®ããã«ãªããŸãã

ããã°ã©ãã¯ãèªåã®ããã°ã©ã ãåäœããã¡ã¢ãªã®ã¢ãã¬ã¹ãå¿é ããå¿ èŠããªããªãã競åãå¿é ããå¿ èŠããªããªããŸããã OSã¯MMUãšé£åããŠãããã®å¿é ããã¹ãŠåãé€ããŸãã
ã¡ã¢ãªã»ã°ã¡ã³ããŒã·ã§ã³
åã®ç« ã§ã¯ãã¡ã¢ãªã®è»¢éãšåå²ãåœãŠã®åé¡ã«ã€ããŠèŠãŠããŸããã ãã ããã¡ã¢ãªãæäœããã¢ãã«ã«ã¯ããã€ãã®æ¬ ç¹ããããŸãã
- åä»®æ³ã¢ãã¬ã¹ã¹ããŒã¹ã®ãµã€ãºã¯16 KBãšæ³å®ããŠããŸãã ããã¯çŸå®ãšã¯é¢ä¿ãããŸããã
- OSã¯ã16Kã®ç©ºãç©çã¡ã¢ãªç¯å²ã®ãªã¹ããç¶æããŠãæ°ããã¹ã¿ãŒãã¢ããããã»ã¹ãŸãã¯çŸåšå²ãåœãŠãããŠããé åã®åé åžã«ããããå²ãåœãŠãå¿ èŠããããŸãã ã·ã¹ãã å šäœã®ããã©ãŒãã³ã¹ãæãªãããšãªããããããã¹ãŠãã©ã®ããã«å¹æçã«å®è¡ã§ããŸããïŒ
- åããã»ã¹ã«16 Kbãå²ãåœãŠãŸãããåããã»ã¹ãéžæããé åå šäœã䜿çšãããšããããšã§ã¯ãããŸããã ãããã£ãŠããŒãããå€ãã®ã¡ã¢ãªã倱ãã ãã§ãã ããã¯å éšãã©ã°ã¡ã³ããŒã·ã§ã³ãšåŒã°ããŸãâã¡ã¢ãªã¯äºçŽãããŠããŸããã䜿çšãããŠããŸããã
ãããã®åé¡ã®ããã€ãã解決ããããã«ãèšæ¶ãæŽçããããè€éãªã·ã¹ãã -ã»ã°ã¡ã³ããŒã·ã§ã³ãèŠãŠã¿ãŸãããã ãã®æå³ã¯ç°¡åã§ãããããŒã¹ãšå¢çãã®ååã¯ãã¡ã¢ãªã€ã¡ãŒãžãåäžã®äžæã®ãšã³ãã£ãã£ãšèŠãªã代ããã«ãããŒããã³ãŒãã»ã°ã¡ã³ããã¹ã¿ãã¯ãããã³ããã»ã¹ããšã«3ã€ã®ã¡ã¢ãªã»ã°ã¡ã³ããã¹ãŠã«æ¡åŒµãããŸãã
ãã®çµæãã¹ã¿ãã¯ãšããŒãéã®ã¡ã¢ãªã倱ãããªããªããŸããã

ãæ°ã¥ããããããŸããããã¿ã¹ã¯Aã®ä»®æ³ã¡ã¢ãªã®ç©ºãé åã¯ç©çã¡ã¢ãªã«ååšããªããªããŸããã ãŸããã¡ã¢ãªãããå¹ççã«äœ¿çšãããããã«ãªããŸããã ããã§ãOSã¯åã¿ã¹ã¯ã«å¯ŸããŠ
base
ãš
bounds
3ã€ã®ãã¢ïŒåã»ã°ã¡ã³ãã«1ã€ãã€ïŒãèšæ¶ããŸãã MMUã¯ä»¥åãšåæ§ã«ãªãã€ã¬ã¯ãã«åŸäºããŠããŸããã3ã€ã®
base
åäœããŸã
base
ããã³3ã€ã®
bounds
ã
ã¿ã¹ã¯AããŒãã§ã
base
ãã©ã¡ãŒã¿ãŒã126 Kbã§ãå¢çã2 Kbã§ãããšããŸãã ã¿ã¹ã¯Aã«ïŒããŒãäžã®ïŒ3 Kbã®ä»®æ³ã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ãããŸãã 次ã«ãç©çã¢ãã¬ã¹ã¯3-2 KbïŒããŒãã®å é ïŒ= 1 Kb + 126 KbïŒã·ããïŒ= 127 KbãšããŠå®çŸ©ãããŸãã ããã¯128æªæºã§ããã€ãŸããå€æãšã©ãŒã¯ãããŸããã
ã»ã°ã¡ã³ãå ±æ
ç©çã¡ã¢ãªã®ã»ã°ã¡ã³ããŒã·ã§ã³ã¯ãä»®æ³ã¡ã¢ãªãç©çã¡ã¢ãªã䜿ãæããããšãèš±å¯ããã ãã§ãªããç°ãªãããã»ã¹ã®ä»®æ³ã¢ãã¬ã¹ç©ºéã䜿çšããŠç©çã»ã°ã¡ã³ããå ±æããããšãå¯èœã«ããŸãã
ã¿ã¹ã¯Aã2åå®è¡ãããšãã³ãŒãã»ã°ã¡ã³ãã¯åãã«ãªããŸããäž¡æ¹ã®ã¿ã¹ã¯ã§åããã·ã³åœä»€ãå®è¡ãããŸãã åæã«ãåã¿ã¹ã¯ã¯ç°ãªãããŒã¿ã»ããã§åäœãããããåã¿ã¹ã¯ã«ã¯ç¬èªã®ã¹ã¿ãã¯ãšããŒãããããŸãã

åæã«ãäž¡æ¹ã®ããã»ã¹ã¯ãã¡ã¢ãªã誰ããšå ±æããŠããããšãçã£ãŠããŸããã ãã®ã¢ãããŒãã¯ãã»ã°ã¡ã³ãä¿è·ãããã®å°å ¥ã«ããå¯èœã«ãªããŸããã
äœæãããç©çã»ã°ã¡ã³ãããšã«ãOSã¯
bounds
å€ãç»é²ããŸããããã¯ã以éã®ãªãã€ã¬ã¯ãã§MMUã«ãã£ãŠäœ¿çšãããŸãã ãããåæã«ãããããèš±å¯ãã©ã°ãç»é²ãããŸãã
ã³ãŒãèªäœã¯å€æŽã§ããªãããããã¹ãŠã®ã³ãŒãã»ã°ã¡ã³ãã¯RXãã©ã°ä»ãã§äœæãããŸãã ããã¯ãããã»ã¹ãåŸç¶ã®å®è¡ã®ããã«ãã®ã¡ã¢ãªé åãããŒãã§ãããã誰ãæžã蟌ãããšãã§ããªãããšãæå³ããŸãã ä»ã®2ã€ã®ã»ã°ã¡ã³ãïŒããŒããšã¹ã¿ãã¯ïŒã«ã¯RWãã©ã°ããããŸããã€ãŸããããã»ã¹ã¯ããã2ã€ã®ã»ã°ã¡ã³ããèªã¿æžãã§ããŸããããããããã³ãŒããå®è¡ããããšã¯ã§ããŸããã ããã¯ã»ãã¥ãªãã£ã確ä¿ããããã«è¡ãããæ»æè ãã³ãŒããæ¿å ¥ããŠã«ãŒãæš©éãååŸããããšã§ããŒããã¹ã¿ãã¯ãæå·ããããšã¯ãããŸããã ããã¯åžžã«ããã§ãããšã¯éããããã®ãœãªã¥ãŒã·ã§ã³ã®é«å¹çã®ããã«ãããŒããŠã§ã¢ãµããŒããå¿ èŠã§ãã Intelããã»ããµã§ã¯ãããã¯ã NXããã ããšåŒã°ããŸã ã
ãã©ã°ã¯ããã°ã©ã ã®å®è¡äžã«å€æŽã§ããŸããããã«ã¯mprotectïŒïŒã䜿çšãããŸãã
Linuxã§ã¯ããããã®ã¡ã¢ãªã»ã°ã¡ã³ãã¯ãã¹ãŠã / proc / {pid} / mapsãŸãã¯/ usr / bin / pmapãŠãŒãã£ãªãã£ã䜿çšããŠè¡šç€ºã§ããŸã ã
PHPã®äŸã次ã«ç€ºããŸãã
$ pmap -x 31329 0000000000400000 10300 2004 0 rx-- php 000000000100e000 832 460 76 rw--- php 00000000010de000 148 72 72 rw--- [ anon ] 000000000197a000 2784 2696 2696 rw--- [ anon ] 00007ff772bc4000 12 12 0 rx-- libuuid.so.0.0.0 00007ff772bc7000 1020 0 0 ----- libuuid.so.0.0.0 00007ff772cc6000 4 4 4 rw--- libuuid.so.0.0.0 ... ...
ã¡ã¢ãªå²ãåœãŠã«é¢ããŠå¿ èŠãªè©³çŽ°ã¯ãã¹ãŠãããŸãã ä»®æ³ã¢ãã¬ã¹ãåã¡ã¢ãªé åã®èš±å¯ã衚瀺ãããŸãã åå ±æãªããžã§ã¯ãïŒ.soïŒã¯ãããã€ãã®éšåïŒéåžžã¯ã³ãŒããšããŒã¿ïŒã®åœ¢åŒã§ã¢ãã¬ã¹ç©ºéã«é 眮ãããŸãã ã³ãŒãã»ã°ã¡ã³ãã¯å®è¡å¯èœã§ããã®ãããªå ±æãªããžã§ã¯ããã¢ãã¬ã¹ç©ºéã«é 眮ãããã¹ãŠã®ããã»ã¹ã«ãã£ãŠç©çã¡ã¢ãªã§å ±æãããŸãã
å ±æãªããžã§ã¯ãã¯ãUnixããã³Linuxã·ã¹ãã ã®æ倧ã®å©ç¹ã®1ã€ã§ãããã¡ã¢ãªãç¯çŽããŸãã
mmapïŒïŒã·ã¹ãã ã³ãŒã«ã䜿çšããŠãå ±æç©çã»ã°ã¡ã³ãã«å€æãããå ±æãšãªã¢ãäœæããããšãã§ããŸãã ãã®åŸãåãšãªã¢ã«ã¯å ±æãæå³ããã€ã³ããã¯ã¹ããããŸãã
ã»ã°ã¡ã³ããŒã·ã§ã³ã®å¶é
ãã®ãããã»ã°ã¡ã³ããŒã·ã§ã³ã«ãããæªäœ¿çšã®ä»®æ³ã¡ã¢ãªã®åé¡ã解決ã§ããŸããã 䜿çšãããŠããªãå Žåã䜿çšãããŠããã¡ã¢ãªã®éã«æ£ç¢ºã«å¯Ÿå¿ããã»ã°ã¡ã³ãã䜿çšãããŠãããããç©çã¡ã¢ãªã«é 眮ãããŸããã
ããããããã¯å®å šã«çå®ã§ã¯ãããŸããã
ããã»ã¹ãããŒããã16 kbãèŠæ±ãããšããŸãã ã»ãšãã©ã®å ŽåãOSã¯ç©çã¡ã¢ãªã«é©åãªãµã€ãºã®ã»ã°ã¡ã³ããäœæããŸãã ãŠãŒã¶ãŒã2 KBã解æŸãããšãOSã¯ã»ã°ã¡ã³ããµã€ãºã14 KBã«æžããå¿ èŠããããŸãã ããããããã°ã©ããããŒãã«ããã«30 KbãèŠæ±ãããã©ããªãã§ããããïŒ æ¬¡ã«ãåã®ã»ã°ã¡ã³ãã2å以äžã«ããå¿ èŠããããŸãããããã¯å¯èœã§ããïŒ ãã¶ãã圌ã¯ãã§ã«åœŒãæé·ãããªãä»ã®ã»ã°ã¡ã³ãã«å²ãŸããŠãããããããŸããã 次ã«ãOSã¯30 Kbã§ç©ºãé åãæ¢ããã»ã°ã¡ã³ããåé åžããå¿ èŠããããŸãã

ã»ã°ã¡ã³ãã®äž»ãªæ¬ ç¹ã¯ããŠãŒã¶ãŒããã»ã¹ãã¡ã¢ãªãèŠæ±ããã¡ã¢ãªã解æŸããã«ã€ããŠã»ã°ã¡ã³ããå¢æžãããããç©çã¡ã¢ãªãéåžžã«æçåãããããšã§ãã ãŸããOSã¯ç¡æãµã€ãã®ãªã¹ãã管çãã管çããå¿ èŠããããŸãã
æçåã¯ãäžéšã®ããã»ã¹ã空ãã»ã¯ã·ã§ã³ã®ãããããã倧ããªã¡ã¢ãªéãèŠæ±ãããšããäºå®ã«ã€ãªããå¯èœæ§ããããŸãã ãŸãããã®å ŽåãOSã¯ã空ãé åã®åèšéãå€§å¹ ã«å€§ãããªãå Žåã§ããã¡ã¢ãªã®å²ãåœãŠããã»ã¹ãæåŠããå¿ èŠããããŸãã
OSã¯ããã¹ãŠã®ç©ºãé åã1ã€ã®å€§ããªãã£ã³ã¯ã«çµåããŠãããŒã¿ãããã³ã³ãã¯ãã«é 眮ããããšããå ŽåããããåŸã§æ°ããããã»ã¹ãšåé åžã®ããŒãºã«äœ¿çšã§ããŸãã

ãã ãããã®ãããªæé©åã¢ã«ãŽãªãºã ã¯ããã»ããµã«å€§ããªè² è·ããããŸããããŠãŒã¶ãŒããã»ã¹ãå®è¡ããã«ã¯ãã®èœåãå¿ èŠã§ãã OSãç©çã¡ã¢ãªã®åç·šæãéå§ãããšãã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããªããªããŸãã
ãããã£ãŠãã¡ã¢ãªã®ã»ã°ã¡ã³ããŒã·ã§ã³ã«ã¯ãã¡ã¢ãªç®¡çãšãã«ãã¿ã¹ã¯ã«é¢é£ããå€ãã®åé¡ã䌎ããŸãã ã»ã°ã¡ã³ããŒã·ã§ã³æ©èœãäœããã®æ¹æ³ã§æ¹åããæ¬ é¥ãä¿®æ£ããå¿ èŠããããŸãã ããã¯ãå¥ã®ã¢ãããŒã-ä»®æ³ã¡ã¢ãªããŒãžã䜿çšããŠå®çŸãããŸãã
ããŒãžããŒã·ã§ã³
åè¿°ã®ããã«ãã»ã°ã¡ã³ããŒã·ã§ã³ã®äž»ãªæ¬ ç¹ã¯ãã»ã°ã¡ã³ãã®ãµã€ãºãé »ç¹ã«å€æŽãããããšã§ãããããã«ããã¡ã¢ãªã®æçåãçºçããOSãããã»ã¹ã«å¿ èŠãªã¡ã¢ãªé åãå²ãåœãŠãªãç¶æ³ã«ã€ãªããå¯èœæ§ããããŸãã ãã®åé¡ã¯ããŒãžã®å©ããåããŠè§£æ±ºãããŸãïŒã«ãŒãã«ãç©çã¡ã¢ãªã«äœãåå²ãåœãŠã¯åºå®ãµã€ãºãæã£ãŠããŸãã ã€ãŸããããŒãžã¯åºå®ãµã€ãºã®ç©çã¡ã¢ãªã®é åã§ããããã以äžã®ãã®ã§ã¯ãããŸããã ããã«ããã空ãããªã¥ãŒã ã管çããã¿ã¹ã¯ãå€§å¹ ã«ç°¡çŽ åãããæçåã解æ¶ãããŸãã
äŸãèŠãŠã¿ãŸãããã16KBã®ä»®æ³ã¢ãã¬ã¹ç©ºéãããŒãžåå²ãããŠããŸãã

ããã§ã¯ãããŒããã¹ã¿ãã¯ãã³ãŒãã»ã°ã¡ã³ãã«ã€ããŠã¯èª¬æããŸããã ã¡ã¢ãªã4 KBã®æçã«åå²ããã ãã§ãã 次ã«ãç©çã¡ã¢ãªã§åãããšãè¡ããŸãã

OSã¯ãããã»ã¹ä»®æ³ã¡ã¢ãªããŒãžãšç©çã¡ã¢ãªããŒãžïŒããŒãžãã¬ãŒã ãããŒãžãã¬ãŒã ïŒã®é¢ä¿ã瀺ãããã»ã¹ããŒãžããŒãã«ãä¿åããŸãã

ããã§ã空ãé åãèŠã€ããåé¡ãåãé€ããŸãããããŒãžãã¬ãŒã ã䜿çšãããŠãããã©ããïŒæªäœ¿çšïŒã§ãã ãŸããã«ãŒãã«ã¯ãã¡ã¢ãªå²ãåœãŠã®ããã»ã¹èŠæ±ãæºããã®ã«ååãªããŒãžæ°ãèŠã€ããã®ãç°¡åãªäŸã§ã¯ãããŸããã
ããŒãžã¯ãOSãåäœã§ããã¡ã¢ãªã®æå°ã§åå²ã§ããªãåäœã§ãã
åããã»ã¹ã«ã¯ããªãã€ã¬ã¯ããæ瀺ããç¬èªã®ããŒãžããŒãã«ããããŸãã ããã§ã¯ããªãŒãžã§ã³ã®å¢çã®å€ããã§ã«äœ¿çšãããŠããã®ã§ã¯ãªããä»®æ³ããŒãžã®æ°ïŒVPNãä»®æ³ããŒãžçªå·ïŒãšã·ããïŒãªãã»ããïŒã䜿çšãããŠããŸãã
äŸïŒä»®æ³ç©ºéã®ãµã€ãºã¯16 Kbã§ãããããã£ãŠãã¢ãã¬ã¹ãèšè¿°ããã«ã¯14ããããå¿ èŠã§ãïŒ2 14 = 16 KbïŒã ããŒãžãµã€ãºã¯4 Kbãªã®ã§ãç®çã®ããŒãžãéžæããã«ã¯4 KbïŒ16/4ïŒãå¿ èŠã§ãã

ããšãã°ãããã»ã¹ãã¢ãã¬ã¹9438ïŒ16,384ã®å¢çå€ïŒã䜿çšããå Žåããã€ããªã³ãŒã10.0100.1101.1110ã§èŠæ±ããŸãã

ããã¯ãä»®æ³ããŒãžçªå·2ã®1246ãã€ãç®ã§ãïŒã10ãããŒãžç®ã®ã0100.1101.1110ããã€ãïŒã ããã§ãOSã¯ããã»ã¹ããŒãžã®ããŒãã«ã調ã¹ãã ãã§ãã®ããŒãžçªå·2ãèŠã€ããããšãã§ããŸãããã®äŸã§ã¯ãç©çã¡ã¢ãªã®8åãã€ãã«å¯Ÿå¿ããŠããŸãã ãããã£ãŠãä»®æ³ã¢ãã¬ã¹9438ã¯ç©çã¢ãã¬ã¹9442ïŒ8000 +ãªãã»ãã1246ïŒã«å¯Ÿå¿ããŸãã
æ¢ã«è¿°ã¹ãããã«ãåããã»ã¹ã«ã¯ç¬èªã®ãªãã€ã¬ã¯ããšã»ã°ã¡ã³ãããããããåããã»ã¹ã«ã¯1ã€ã®ããŒãžããŒãã«ãããããŸããã ãããããããã®ããŒãã«ã¯ãã¹ãŠæ£ç¢ºã«ã©ãã«ä¿åãããŠããŸããïŒ ããããç©çã¡ã¢ãªå ã§ãã©ãã«ããã®ã§ããããïŒ
ããŒãžããŒãã«èªäœãã¡ã¢ãªã«æ ŒçŽãããŠããå ŽåãVPNãååŸããã«ã¯ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããå¿ èŠããããŸãã 次ã«ããã®åŒã³åºãã®æ°ã2åã«ãªããŸããæåã«ã¡ã¢ãªããç®çã®ããŒãžã®çªå·ãæœåºãããã®ããŒãžã«ä¿åãããŠããããŒã¿èªäœãåç §ããŸãã ãŸããã¡ã¢ãªã¢ã¯ã»ã¹é床ãé ãå Žåãç¶æ³ã¯ããªãæ²ããèŠããŸãã
æ©éããããã¡ãŒïŒTLBã翻蚳ã«ãã¯ã¢ãµã€ããããã¡ãŒïŒ
ä»®æ³ã¡ã¢ãªããµããŒãããããã®äž»èŠãªããŒã«ãšããŠããŒãžã䜿çšãããšãããã©ãŒãã³ã¹ãå€§å¹ ã«äœäžããå¯èœæ§ããããŸãã ã¢ãã¬ã¹ç©ºéãå°ããªæçïŒããŒãžïŒã«åå²ããã«ã¯ãããŒãžã®é 眮ã«é¢ãã倧éã®ããŒã¿ãä¿åããå¿ èŠããããŸãã ãŸãããã®ããŒã¿ã¯ã¡ã¢ãªã«ä¿åããããããããã»ã¹ãã¡ã¢ãªã«ã¢ã¯ã»ã¹ãããã³ã«ãå¥ã®è¿œå ã¢ã¯ã»ã¹ãå®è¡ãããŸãã
ããã©ãŒãã³ã¹ãç¶æããããã«ãæ©åšãµããŒããåã³äœ¿çšãããŠããŸãã ã»ã°ã¡ã³ããŒã·ã§ã³ãšåæ§ã«ãããŒããŠã§ã¢ææ³ã䜿çšããŠã«ãŒãã«ãå¹ççã«ãªãã€ã¬ã¯ãã§ããããã«ããŸãã ãããè¡ãã«ã¯ãMMUã®äžéšã§ãããäžéšã®VPNãªãã€ã¬ã¯ãã®åçŽãªãã£ãã·ã¥ã§ããTLBã䜿çšããŸãã TLB , .
MMU , VPN TLB, VPN. , . , MMU , , TLB, .
, , . , , , TLB . . - . . , Linux «» 2 4 .
, . , TLB , . (spacial locality efficiency): , , , TLB .
, TLB ASID (Address Space Identifier, ). PID, . , , ASID, TLB , .
: , TLB. , . , . 86- 4 , . , , (« », dirty bit), (protection bit), (reference bit) .. , SIGSEGV, âsegmentation faultâ, .
, . , , , (page eviction), «» ( , ).
ãããã«
, âsegmentation faultâ. . , MMU . , â , ( read only-), â SIGSEGV, âsegmentation faultâ. - âGeneral protection faultâ. Linux 86/64-, , â SIGSEGV . , . , , .