diff --git a/docs/static/kalloc.jpg b/docs/static/kalloc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c32fc4ac5f21522117b747c3ba0f126cce4fb98a Binary files /dev/null and b/docs/static/kalloc.jpg differ diff --git "a/docs/\351\241\271\347\233\256\350\256\276\350\256\241\346\226\207\346\241\243.md" "b/docs/\351\241\271\347\233\256\350\256\276\350\256\241\346\226\207\346\241\243.md" index 85e06c9aac09952f934d3ac67e2e1d0ae99d623f..2e701686d93d86ee1a69950cac8a7ccc464bdca9 100644 --- "a/docs/\351\241\271\347\233\256\350\256\276\350\256\241\346\226\207\346\241\243.md" +++ "b/docs/\351\241\271\347\233\256\350\256\276\350\256\241\346\226\207\346\241\243.md" @@ -102,6 +102,8 @@ impl<T> Drop for SpinlockGuard<'_, T>{ ``` +**ç¡çœ é”** + ç¡çœ é”åŒè‡ªæ—‹é”ä¸åŒï¼Œè‡ªæ—‹é”通过 CAS (Compare And Swap)æ¥å®žçŽ°ï¼Œè€Œç¡çœ é”åˆ™é™¤äº†ä½¿ç”¨è‡ªæ—‹é”æ¥ä¿æŠ¤ç¡çœ é”ä¹‹å¤–ï¼ŒåŒæ—¶éœ€è¦è°ƒç”¨å½“å‰è¿›ç¨‹çš„ `sleep` ä½¿å…¶ä¼‘çœ å¹¶è¿›å…¥è°ƒåº¦å™¨è¿›è¡Œè°ƒåº¦ï¼Œå½“è°ƒç”¨ä¹‹åŽåˆ™é‡Šæ”¾è‡ªæ—‹é”ã€‚ä½¿ç”¨è‡ªæ—‹é”æ¥ä¿æŠ¤çš„åŽŸå› æ˜¯æˆ‘ä»¬å¯ä»¥ç¡®ä¿æˆ‘们将ä¸ä¼šé”™è¿‡ä»»ä½•一次 `wake_up` æ¥å”¤é†’è¢«ä¼‘çœ çš„è¿›ç¨‹ã€‚å½“ç¡çœ é”è§£é”的时候,也需è¦åŽ»èŽ·å–自旋é”并调用 `wake_up` 方法æ¥å”¤é†’è¢«ä¼‘çœ çš„è¿›ç¨‹ï¼Œä¹‹åŽé‡Šæ”¾è‡ªæ—‹é”。 **2. 陿€å˜é‡** @@ -293,6 +295,8 @@ pub struct ProcExtern { 由于 rust 有 `alloc` 特性,æä¾›äº†å†…å˜åˆ†é…çš„ API。在æä¾›äº†æ ‡å‡†åº“的程åºé‡Œéƒ½ä¼šæœ‰ä¸€ä¸ªå…¨å±€çš„内å˜åˆ†é…器æ¥è¿›è¡Œå†…å˜åˆ†é…,而在 `no_std` 的环境下,åªè¦æˆ‘们实现了 `alloc` 特性并æä¾›äº†å…¨å±€çš„内å˜åˆ†é…器,我们就å¯ä»¥ä½¿ç”¨ `Box` 或者 `Vec` ç‰æ™ºèƒ½æŒ‡é’ˆã€‚而在我们的实现ä¸ï¼Œåœ¨**å†…æ ¸æ€**å’Œ**用户æ€**分别使用了ä¸åŒçš„æ–¹æ³•æ¥å®žçŽ°ã€‚ +  + **å†…æ ¸æ€** åœ¨å†…æ ¸æ€ä¸ï¼Œæˆ‘们使用**伙伴内å˜åˆ†é…系统**æ¥å®žçŽ°ã€‚ä¼™ä¼´å†…å˜åˆ†é…ç³»ç»Ÿä¸»è¦æ˜¯ä¸ºäº†å‡å°‘内å˜çš„æµªè´¹ï¼Œä¾‹å¦‚è¦åˆ†é…一å—大的内å˜ï¼Œä½¿ç”¨ä¼ 统的链å¼å†…å˜åˆ†é…åªèƒ½å¯»æ‰¾ä¸€å—è¶³å¤Ÿå¤§çš„å†…å˜æ¥åˆ†é…,这时ä¸é—´æœ‰å¾ˆå¤šå°å—的内å˜ä¼šè¢«å¿½ç•¥ï¼Œè¿™æ—¶å°±ä¼šé€ æˆå†…å˜çš„æµªè´¹ã€‚ @@ -313,6 +317,10 @@ pub struct ProcExtern { 当用户程åºé‡Šæ”¾å†…å˜æ—¶ï¼Œæˆ‘ä»¬æ ¹æ® Layout 的信æ¯èŽ·å–其指针和大å°ã€‚当改内å˜å—ä»ç„¶åœ¨é“¾è¡¨ä¸åˆ™ç§»åŠ¨å¤´éƒ¨æŒ‡é’ˆä½ç½®ä¿®æ”¹å¤´éƒ¨ä¿¡æ¯ã€‚若该内å˜å—å·²ç»è¢«ç§»å‡ºé“¾è¡¨ï¼Œæˆ‘们å¯ä»¥æ ¹æ®å¯¹åº”的头部信æ¯å°†å…¶é‡æ–°åŠ åˆ°é“¾è¡¨å¯¹åº”çš„ä½ç½®ä¸ã€‚ +- æ ˆçš„æ”¹è¿› + + 由于在 `xv6-riscv` ä¸çš„å†…æ ¸æ ˆçš„å¤§å°ä¸º 4KB(å³1页)。但4KB的大å°å¯¹äºŽæŸäº›è¿›ç¨‹æ¥è¯´æ˜¯ä¸å¤Ÿçš„ï¼Œå› æ¤æˆ‘们统一将æ¯ä¸ªè¿›ç¨‹çš„æ ˆå¤§å°è®¾ç½®ä¸º 16KB(å³4页)。当我们为æ¯ä¸ªè¿›ç¨‹æ˜ å°„æ ˆå†…å˜æ—¶ï¼Œéœ€è¦åˆ†é…5页,其ä¸4页用æ¥è¿›è¡Œæ ˆå†…å˜çš„æ˜ 射,而最åŽä¸€é¡µåˆ™ä¸è¿›è¡Œæ˜ å°„ï¼Œå¯¹äºŽå†…æ ¸è¿›è¡Œä¿æŠ¤ï¼Œå½“è¿›ç¨‹çˆ†æ ˆåŽä¼šç”±äºŽè®¿é—®è¢«ä¿æŠ¤çš„页而被强行终æ¢è€Œä¸ä¼šé€ æˆå®‰å…¨æ¼æ´žã€‚0 + ### 三ã€å®žçްæè¿° 请è§è¯¥ç›®å½•下其他文档,除æ¤ä¹‹å¤–,我们也在代ç ä¸æä¾›äº†è¯¦ç»†çš„æ³¨é‡Šã€‚ç”±äºŽæ—¶é—´åŽŸå› ï¼Œæ–‡æ¡£å†…å®¹æœ‰ç©ºç¼ºæˆ–è€…æœªæ›´æ–°ï¼Œè¯·è§è°…ï¼