「已知計算機M字長為32位,按字節編址,採用請求調頁策略的虛擬存儲管理方式,虛擬地址為32位,頁面大小為4KB;數據Cache採用4路組相聯映射,數據區大小為8KB,主存塊大小為32B。」
李林把試卷最後一題投影到白板上,念完題干,轉過身來。
台下二十來雙眼睛看著他。
有好奇的,有懷疑的,還有來自胡云程的審視。
但他毫不在意,只是在腦海中捋順著思路。
GOOGLE搜索TWKAN
在【保持簡單】的視角下,李林眼前的題干,其實和其他人眼中完全不同。
他試圖用語言來描述這種不同。
「這道題看起來很複雜,但其實每一問只涉及一個獨立的知識點,所以,我們先把它拆開。」
李林在題幹上輕輕畫了一道斜槓,將第一段文字和第二段文字隔開。
又畫了一道。
再一道。
很快,壓軸題被他用三道斜槓拆成了四個相互獨立的知識模塊——
虛擬內存、Cache映射、數組存儲、循環訪問模式。
胡云程的眉頭原本擰著,擔心這小子不知天高地厚,一上來就要硬啃最難的骨頭。
但當他看到李林沒有從任何一個具體的公式切入,而是先拆分題干時,不由得默默點頭。
這個拆題的方式不是他教的。
如果是他,應該是按出題順序逐問推進,先講頁表再講Cache,一路順下來。
但李林從題目本身入手,先切割結構再填充細節。
這個視角反過來,不是從答案倒推,而是從問題本身出發。
有點意思。
他摸了摸下巴,突然察覺到,本來空無一人的餘光里,不知道什麼時候冒出來一個黑影。
把胡云程嚇得一個振刀,手中的保溫杯差點甩出去當暗器。
同時,黑影也被嚇得不輕。
「不是,老胡,我就蹭個課聽,你不至於要打我吧。」
胡云程嘴角抽了抽,才發現來的是老熟人——
羅冠。
看這小子自說自話地進來不說,竟然還舉起了手機,像是在錄像。
「不是,你代表省競賽組暗訪來了是吧……不對,你TM從哪進來的!」
「後門沒鎖。」
「……」
「誒呀,老胡,這不是想你了嘛。那邊試卷正在封裝呢,我就過來看看你,沒想到還能看到大神講題,這下賺到了。有這個學生啊,你這次金牌有望——」
「大神?」
「對啊,大神,剛才我監考的他,那可太牛b……咳,後生可畏了。」
「……」
聽到這話,胡云程莫名有種被劇透的無力感。
完了。
完全了。
又讓這小子裝到了。
他TM到底是什麼時候學的?!
還是說……
和上次一樣,他其實早就會。
就是為了打我的臉。
「……」
我臉有那麼大嗎,你TM天天打啊!
雖然心裡驚濤駭浪,但是在小學弟面前,胡云程依舊面沉如水,
「嗯,大神,我的學生。」
「哎呀呀——」
羅冠突然想起來什麼似的,連忙捂住自己的嘴,
「不能說話了,剛才監考的時候就是因為走神,他解的最後一題我都沒看明白。」
「……」
到底誰是老師!
話雖如此,胡云程還是老老實實地轉回了注意力。
他這個小學弟,水平也不簡單……
竟然這麼推崇李林嗎?
一旁,羅冠的鏡頭正穩穩地對著講台,畫面里李林正用手指點著第一塊區域。
「先看第一個模塊,虛擬內存。題干給了四個關鍵點,分別是虛擬地址32位、頁面大小4KB、按字節編址和請求調頁,沒有頁面置換。那我們要先搞清楚一件事,這些參數放在一起,到底在描述一個什麼樣的系統。」
李林在黑板上畫了一個扁長的矩形,從中間一刀切成兩半。
「虛擬地址要分成兩部分,虛頁號和頁內偏移。」
「頁面大小4KB,就是2的12次方,所以頁內偏移占低12位。虛擬地址總共32位,剩下的高20位就是虛頁號。」
「這個過程不需要背,只需要知道為什麼這麼分。因為CPU發出一個地址,MMU要先確定它屬於哪個頁面,再確定它在這個頁面里的具體位置。前者就是虛頁號,後者就是頁內偏移。」
李林似乎非常清楚他們的痛點在哪,沒有把結論直接扔出來,而是從頭推了一遍。
從「為什麼」開始,而不是「是什麼」。
台下的學生逐漸被他講得內容所吸引,有幾個腦瓜轉得快的,已經開始記筆記了。
「然後看數組。」
李林的粉筆移到第二塊區域,
「a[24][64],int類型,一個元素占4個字節。一共有24乘64,1536個元素。占多少內存?」
「1536乘以4,6KB!」
台下跟得上的,已經開始稀稀拉拉地回應了。
蛙趣,還有互動環節。
羅冠默默沖一旁的胡云程比了個大拇指。
你這學生是從哪挖來的,連教學風格都這麼成熟。
胡云程:……
是啊,從哪挖來的來著。
我記得是普通班吧?
「沒錯,一個頁面只能裝4KB,所以6KB需要兩個頁面。這就回答了第一小問的第一部分,數組a分為兩個頁面存儲。」
李林頓了頓,在剛剛寫下的「2個頁面」旁邊又畫了條箭頭,指向「缺頁異常」。
「題目說了,執行之前數組a不在主存。訪問第一個頁面的時候,頁面還沒調入內存,缺頁異常一次。訪問第二個頁面的時候,同樣還沒調入,缺頁異常再一次。所以是兩次。」
「那頁故障地址呢?」
劉筱雨竟然跟上了李林的思路,猛地抬手問道。
在得到李林肯定性地點頭後,她不禁撓撓頭,小臉紅彤彤的。
胡云程硬了。
拳頭硬了。
(゚皿゚メ)
上我課的時候,怎麼不見你這個積極呢。
但不得不承認,這個思路,有東西的。
胡云程深吸一口氣,默默對一旁說道,
「一會兒視頻發我。」
羅冠:?
李林可不管堂下的小動作,指了指題幹上標出的起始地址,
「0042 2000H。這是第一個頁面的起始地址。第二個頁面緊接著它,頁面大小4KB,4KB等於1000H。注意這裡是十六進位,所以第二個頁面的起始地址是0042 2000H加1000H,等於0042 3000H。」
李林一路講下來,幾乎沒有停頓。
第一題的三個小問,從「為什麼頁面大小決定偏移位數」到「為什麼缺頁異常是兩次」到「怎麼加出第二個頁故障地址」。
一路推下來,每一步都落在前一步的基礎上。
環環相扣。
李林相信,絕大部分人都懂了。
聽不懂的,剛才都已經出去了。
但即便如此,面對第二問,李林的嘴角還是咧了咧。
他放下粉筆,雙手撐在講台上,滿臉誠懇,
「說實話,我不覺得,第二問是大家需要做的。」
「?」
「或者說,是大家有能力做的。」
「!」
此話一出,台下頓時喧譁。
畢竟,這相當於赤裸裸地看不起他們了。
第一問,能輕鬆跟下來的人不在少數,突然被這麼說,心裡肯定是不服的。
但是……
胡云程聽到李林的話。
默默嘆了口氣。
他……
太懂了。
教案里,第二問也被他畫了一個大大的叉。
李林似乎完全不在意喧譁一樣,只是轉過身,把第二問露了出來。
「數組a占用多少主存塊?」
「假設上述程序段執行過程中數組a的訪問不會和其他數據發生Cache訪問衝突,則數組a的Cache命中率是多少?」
「若將循環中i和j的次序按如下方式調換:for (j = 0; j < 64; j++) for (i = 0; i < 24; i++) a[i][j]= 10;則數組a的Cache命中率又是多少?」
三連問。
讓他們重新回憶起了考場上看到這一問時的絕望。
即便現在在李林的講解下,解決了第一問,這第二問看起來依舊那麼陌生。
雜亂聲頓時衰減了不少。
李林嘆了口氣,他說的都是實話。
也都是真心話。
他真心認為,花太多時間去搞懂第二問,不如去學把時間拿去學其他的。
什麼?
你說他自己為什麼會?
……那能一樣嗎?
「第四問。數組占多少主存塊?6KB除以32B,192個。命中率,關鍵在於理解這個循環的訪問模式。」
既然大部分人不信邪,或者說不想表現出來信邪,他也不吝嗇於講一遍。
至於能吸收多少。
只有天知道。
李林把題干里的雙重循環圈出來,
「外層i從0到23,內層j從0到63。按行優先存儲,a[0][0]到a[0][63]是連續的256個字節,正好占8個主存塊,每塊32B,一塊裝8個int。按這個順序訪問,每訪問一個主存塊的第一個元素時Cache缺失,剩下的7個都命中。所以命中率是7除以8,87.5%。」
他停了一下,看了看台下。
鴉雀無聲。
但沒有題講到一半就走的道理,於是,他繼續說,只是語速加快了,
「如果是按列訪問呢?交換內外層循環,j在外,i在內。外層j總共64次疊代,每次疊代訪問同一列的不同行。數組有24行,每訪問8行就會填滿一個組,但4路組相聯有4個槽位,而同一列的不同行會被映射到同一個組的不同行。24行除以每組4行,6組。64組Cache,這些數據分散在8個組裡,每組正好分到3行。3小於4,所以不會發生替換——每次疊代,一個組裡最多裝3個不同行的數據,4個槽位夠用。所以即便是按列訪問,只要不發生替換,每次調入一個主存塊後,剩下的7個元素依然是命中的。命中率還是87.5%。」
「……」
「啪。」
粉筆被他丟在了講台上,
「到這裡,這道題就完美的結束了。」
從開始到結束,沒有卡頓,沒有翻書,沒有看答案。
每一步都扎紮實實地落在前一步的基礎上——
從虛存到Cache,從時間局部性到空間局部性,從行訪問到列訪問。
早在一開始,就被他用題幹上的三道斜槓標記了出來。
回望自己做的這一切,李林也不由得有些恍惚。
keep easy。
我也算是做到了吧。
【檢測到能力鞏固——】
【計算機基礎(相性:50%->52%|水平:通曉中期->通曉後期)】
「講課……也在一定程度上,鞏固了我的能力嗎?」
李林眯起眼睛,若有所思。
台下依舊沒人說話,但抄筆記的沙沙聲卻愈發明顯。
羅冠把手機放下來,甩了甩髮酸的雙手。
剛才那將近二十分鐘裡,他幾乎沒有換過姿勢,就那麼舉著手機。
鏡頭裡的畫面他打算回去之後再看一遍。
不是為了學什麼,就是單純想再看一遍。
這種講法,感覺某種程度上能和導師……
不,哪怕是導師,也未必能在沒有備課的情況下,把這道題拆解到這種程度。
「老師,」
眼見時間差不多了,李林轉過身,面向最後一排默默舉起手,
「我能走了嗎?」
胡云程不知道什麼時候,已經站了起來。
他張了張嘴,想說點什麼。
但該說什麼呢?
你講得還行?
這個思路你是怎麼想到的?
或者……你他媽到底是什麼時候學的?
但千言萬語,最終只匯成一句,
「你不能走!」
「他必須走!」
兩道聲音幾乎同時在會議室里炸開。
胡云程喊的是第一句,第二句來自前門。
葉雅蘭猛地推門而入,臉上寫滿了正氣凜然。
好像她不是老師,而是一位英勇的騎士,前來拯救被惡龍囚困的美麗公主。
李林:……
胡云程:?
我記得,至少前門還是鎖了的啊?
「你是誰,有什麼資格讓他走。」
胡云程沉聲問道。
「那個,雲程啊,李林同學他確實趕時間。」
後面跟進來探頭髮聲的是夏秉謙。
作為校長,雖然壓不住胡云程,但是拿鑰匙開門還是能做到的。
胡云程皺了皺眉頭。
「老夏,這個學生不一樣。今年的金牌——」
他搖搖頭,不再說那些虛的,只是指著黑板上的推演過程,
「我跟你說實話,我帶了這麼多年競賽,能把競賽題講到這個程度的,學生也好老師也好,不超過這個數。」
胡云程伸出三根手指。
現在也不怕李林年輕沉不住氣了。
他就是最沉不住的那個。
媽的,再沉,學生都跑了個屁的了!
「大不了,我一會兒親自開車送他去省城,絕對耽誤不了事情。但一會兒我要講的東西,對他是直接有用的東西,讓他更上一個台階,不比那個什麼杯子重要?!」
儘管胡云程說的聲嘶力竭,情真意切。
葉雅蘭卻完全不退縮。
畢竟,她搬來的救兵,可不止夏校長一個。
「我說,小胡……」
一個不緊不慢的聲音從前門飄進來,語氣溫和,但每個字都格外沉重,
「李林該走了。」
馮伊畫踩著高跟鞋走了進來,站在葉雅蘭旁邊,朝胡云程微微點了點頭。
這是通知,不是商量.jpg
胡云程的表情在臉上凝固了。
同樣凝固的還有李林。
我說,為什麼壓軸的不是校長,而是一個老師啊,這下氣勢全沒了!
就算你是清北班的老師也……
「……彳亍。」
胡云程幾乎是咬著牙,吐出了這個字。
「?」