看板 Gossiping
作者 jserv (松鼠)
標題 Re: [問卦] 讀通計算機組織對寫程式有什麼幫助?
時間 Mon Nov 13 00:54:13 2017


※ 引述《Huffman (HuffmanAlgorithm)》之銘言:
: 計算機組織與設計
: 內容就是組合語言 評估計算機效能 自組CPU 記憶體管理
: 想不太透這些與碼農寫程式啥關係
: 有無八卦?

既然八卦板在 40 天內有 4 篇文章的標題提及計算機組織,剛好小弟最近授課進度
與此相關,順手回覆如下,歡迎交流討論。(謎之聲:原來八卦板也能夠討論資訊
工程的課業,這看板實在太萬能了,讚歎 Ptt!)

首先,想像一個情境,你到某一間製造家電的公司服務,擔任軟體工程師的你被主管
要求「讓公司的電扇能夠透過某種時序編碼,得以讓使用者感覺出自然風,而且功耗
要降到最低」,你會怎麼應對呢?


於是你就求助只比 Ptt 大神還遜色一點的 Google,提交以下關鍵字:
「電扇 自然風 控制」

不難發現「用 PIC 單片機製作電扇自然風發生器」[1] 這篇文章,後者開頭寫得很
到位:

「我們使用美國 Microchip 公司的單片機製作了一種電扇自然風發生器,它能有
規律地控制風扇送風的強弱。傳統的電扇通過它可產生自然風,亦可將它直接做在
電扇里,即是自然風電扇。」


依據上面的描述,所謂「產生自然風」的電扇其實就傳統電扇加上特殊的控制,而且
正是時序控制,原來主管的要求還真的跟軟體工程師背景有關,不是特別刁難你呀。

文中提到的 Microchip 公司在 2016 年初分別收購 Micrel 和 Atmel 兩家老字號
的微處理晶片供應商。作為 8-bit 微控制器的領導廠商,Microchip 毛利高達六成
[2],這讓人不免好奇這利潤到底怎麼來?!Microchip 陸續清算低毛利 (< 50%)

的產品,現在該公司著重醫療與健身電子、照明控制、照護與手術等超高毛利的產
業。

舉例來說,在以醫院為背景題材的影集或電影中,我們可見外科醫師以傳統手術刀
切開組織器官,再以絲線結紮止血的畫面,但早在近 100 年前「電刀」的問世,
徹底縮短手術時間、改善傷口癒合,減少病人失血,也降低感染等併發症的機率、
提高醫療品質。「電刀」的英文名稱為 Electrosurgical Unit(縮寫為 ESU),
又稱為高頻電刀,當高頻電流透過器械(電刀筆)作用在人體組織時,會使具有

粘滯性的體液極劇振動,因摩擦而產生熱量,使組織內的水分快速蒸發,以致組織

分離或者凝固,這就是以電能代替傳統手術刀的基本原理。[3] 等等,這跟軟體有
什麼關聯?考慮到腦(神經)外科、眼科、耳鼻喉科、婦產科等較為精細的外科手
術時,電刀必須限定操作的次數 (這說法不精確,主要就是反映損耗的狀況),但
護理人員幾乎不能可能從表面上得知一把電刀到底用了多少次、損耗又如何,這時
就是咱們軟體工程師發揮作用之處,簡單來說,適用精細外科手術的雙極電刀

(bipolar) 裡頭有微控制器,隨時記錄電刀使用的狀況,並作為自我檢驗稽核
機制,避免醫療護理人員過度使用。

忘了說,男人攝護腺的手術自然也跟這類電刀有關,要是軟體沒寫好,讓男人的
功能永久 disable (應該要加上 "d",表示被動態,哎呀,想起來就心好痛),那
就是罪過了。既然上述領域裡頭軟體品質的影響很重大,形式化驗證自然就是關鍵
議題,不過有件事是前提:


「軟體要在什麼等級的硬體上運作,才能確保演算法和各式控制邏輯得以充分
  運作呢?」

就前述電扇控制、電刀,還有多種電廠安全監控系統來說,不乏仍採用 8-bit,
顯然不是為了省錢,而是要在最小的空間達到最低功耗且軟硬體本身都要做出
完整的檢驗,甚至要從電路 register-transfer level (RTL)、週邊硬體、軟體
系統,到通訊協定等等,沒有一個環節可放過。畢竟這動輒造成公共安全危機,
資訊系統造成的損失隨便都以十年起跳。


你說,計算機組織重不重要呢?要是資訊系統的研發人員不能很清楚知道 DMA,
interrupt, exception / trap / mode switch 的成本,不清楚各種硬體行為,
又如何確保時間精準地符合期待呢?當系統放到到汽車電子和航空系統時,就是
一連串即時系統 [5] 的考量,屆時即便是沒充分處理的 page fault 都會讓

系統陷入不可挽救的境界 (錯過 deadline,在 hard/safe real-time 往往會
釀造悲劇),在多核心的架構中,儘管 cache coherence 的成本看起來都是微秒
(10 的 -6 次方秒) 等級或更小,但累積起來卻很可能造成影響,注意,只要有
一次沒符合規範,就 GG 了 (捏著自己 GG 想想有多痛,我說軟體工程師的

良心)。

不過也不要怕自己做得不夠好,導致他人家破人亡,就不踏入軟體開發,我們
資訊從業人員本該創造更好的數位世界基礎建設,讓世人得以受益,不然我們
的存在還有什麼理由?


對了,在加密貨幣領域中,往往伴隨著虛擬機器,如 Ethereum 的 EVM 作為
執行 smart contract 的基礎 [6],這時你若有充分的計算機組織結構的背景
知識,會讓你開發相關系統軟體時,能夠確保行為更 deterministic, safe,
sequentually correct. 希望讀到這裡,您能有點啟發,歡迎來挑戰相關的
作業 sandbox [7] >>


預期目標
- 研讀 形式化驗證,並透過 cbmc 做 model checking 的練習
- 探討 隔離執行環境的建構與應用,思考加密貨幣領域的系統軟體
- 深入學習 GNU Toolchain,涵蓋 GDB 和 GProf
- 延伸 simulator 作業,培養軟體設計的技巧和學習嚴謹的系統分析

[1] http://cocdig.com/docs/show-post-626.html
[2] https://ycharts.com/companies/MCHP/gross_profit_margin
Microchip Technology Gross Profit Margin (Quarterly) (MCHP)
Microchip Technology has a Gross Profit Margin (Quarterly) of 60.67%. Microchip Technology Gross Profit Margin (Quarterly) (MCHP) charts, historical d ...

 
[3] https://www.ntuh.gov.tw/BMED/equipment/DocLib/

 
    %E6%B7%BA%E8%AB%87%E9%9B%BB%E5%88%80.aspx (請將兩行串接)
[4] https://hackmd.io/s/H1xxp3pF0
形式化驗證 (Formal Verification) - HackMD
[圖]
# 形式化驗證 (Formal Verification) 資料整理: [jserv]( ## 概況 論及主題前,我 ...

 
[5] 即時系統和 Linux 的關聯請見:
    https://www.slideshare.net/jserv/making-linux-do-hard-realtime
 
[6] https://github.com/pirapira/awesome-ethereum-virtual-machine
GitHub - pirapira/awesome-ethereum-virtual-machine: Ethereum Virtual Machine Awesome List
[圖]
awesome-ethereum-virtual-machine - Ethereum Virtual Machine Awesome List ...

 
[7] sandbox: https://hackmd.io/s/BJpTWUM1f
C08: sandbox - HackMD
[圖]
# C08: sandbox ###### tags: sysprog2017 :::info 主講人: [jserv]( ...

 

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.245.162
※ 文章代碼(AID): #1Q27oxcW (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1510505659.A.9A0.html
GYLin: 快推 不然大家以為我看不懂1F 11/13 00:55
Merkle: 媽的有神快拜2F 11/13 00:56
tnlomtt: 太猛啦3F 11/13 00:56
zeumax: 這是讀書筆記吧4F 11/13 00:56
IsaacNewton: 我也是這樣想的5F 11/13 00:57
g5637128: 先推6F 11/13 00:57
ILoveElsa: jserv@@7F 11/13 00:57
ogisun: 大神先推再看8F 11/13 00:58
sammoon: 116終於不是廢文惹9F 11/13 00:59
jserv: 對不起,是我們116教師不夠努力,檢討中10F 11/13 01:00
Reichenbach: WOWOWOWOWOWOW11F 11/13 01:01
xxxxxmay: 文組滾12F 11/13 01:02
VdustR: 推13F 11/13 01:03
r34796a: 這是教授還助教來發文嗎14F 11/13 01:03
jserv: 任何一個受過CS訓練的學生都應該可以上來澄清Arch的用處
不過我想學生都在忙著準備期中考,就幫他們回覆15F 11/13 01:05
RUSSIAN22: 參見大神17F 11/13 01:05
missingkid: jserv大大18F 11/13 01:06
fate201: 大神推19F 11/13 01:06
shdopeoplesn: 居然在八卦板看到jserv大神 推!20F 11/13 01:08
assassinzero: 強者21F 11/13 01:08
moocow: 靠 想說怎麼讀起來有料 原來是高手寫的22F 11/13 01:10
a58524andy: pusheen 我是說push23F 11/13 01:12
jengjye: 拜讀完 膝蓋痛了一下......24F 11/13 01:13
KNAM: …25F 11/13 01:15
jserv: 怎麼會是膝蓋痛呢?不是GG隱隱作疼啊?!軟體很重要26F 11/13 01:15
mvpdirk712: 唉唉唉唉,在八卦版看到唐鳳還看到敬群大大,小弟我髕27F 11/13 01:17
future314: 只能推了28F 11/13 01:17
mvpdirk712: 骨骨折還沒好啊,跪到不能再跪了29F 11/13 01:17
leftless: 考完研究所就忘光了QQ30F 11/13 01:18
neo5277: 讚讚31F 11/13 01:21
evaji548: !!!32F 11/13 01:21
freeblizzard: 有神快拜 剛好最近在念計組33F 11/13 01:23
asd2260123: QQ34F 11/13 01:23
andykuodd: 推35F 11/13 01:24
Luismth: 先推再看36F 11/13 01:26
cy4v: jserv37F 11/13 01:26
b0920075: 嘻嘻首噓
幹原來不是38F 11/13 01:27
hortune: 宅色夫 <(_ _)>40F 11/13 01:27
gipo776: 太專業了!  跪了41F 11/13 01:28
chses910372: 老師好42F 11/13 01:31
abc88662a: 未看先推
jserv大教我OS嗚嗚嗚嗚43F 11/13 01:31
kuromu: .45F 11/13 01:33
jserv: @abc88662a, 請見: http://hackfoldr.org/oscar/46F 11/13 01:35
xddd333: 太神辣47F 11/13 01:36
jserv: @b0920075, 感謝捧場,我會多回幾篇讓你好好噓48F 11/13 01:36
lulocke: 學店資科後面三分之一都不懂49F 11/13 01:37
bbo6uis122: 大神!!! 推!!!50F 11/13 01:37
jserv: @lulocke, 我從台灣最好的學店發文,是我沒寫好,會改進51F 11/13 01:38
Wand: 又是半夜優質文52F 11/13 01:38
Argos: 老師好53F 11/13 01:39
newwer: 大大有甚麼好懂的組合語言資料可以看嗎?54F 11/13 01:39
jserv: @newwer, 組合語言存在的目的不是「好懂」,而是掌握電腦還是回去翻 datasheet 和 reference manual 吧55F 11/13 01:40
NVCat: 認真文 推57F 11/13 01:41
j5f0129: push58F 11/13 01:45
facefear: push59F 11/13 01:46
vi000246: 跪拜大神60F 11/13 01:48
woo0422: 好羨慕有這種課…
研所才開始自學c語言、linux
就是沒有基礎才知道基礎學科的重要性
可惜大多數人在學校中只在意軟體跑出來的結果
內容及流程對大部分的人來說都是0 kpi. QQ61F 11/13 01:49
oaoa0123: XD 推66F 11/13 01:50
qweasd777: 推67F 11/13 01:50
ohsuoh: 推個68F 11/13 01:52
jserv: @woo0422, 歡迎用下班空檔挑戰課程練習題,我可以幫忙批改69F 11/13 01:52
kai91: 清流推70F 11/13 01:52
foreverwings: jes文 先推在看 !!!!71F 11/13 01:52
jserv: 軟體工程師挑好戰場很重要,不下於歌手選遠對合適的曲目72F 11/13 01:53
oaoa0123: 每次發文都附註解,真的是太強大了...73F 11/13 01:53
jackqoo183: 趕快推 不然人家以為我不懂74F 11/13 01:55
Yuwuen: 哩細在供三小辣75F 11/13 01:55
james80351: 釣到了 推76F 11/13 01:57
jserv: @Yuwuen, 我只是等學生天亮前把程式交出,發文打發時間77F 11/13 01:57
over117: 請問jserv老師,下班後要如何學好資料結構和演算法的基礎,彌補非純血CS背景的gap,必須以最有效率的寫法完成工作任務。78F 11/13 02:02
ARSC: 有神先拜再說81F 11/13 02:02
zzzz8931: 樓下解釋 pipeline82F 11/13 02:04
jserv: 配合 @zzzz8931 解釋: http://hackfoldr.org/cpu/83F 11/13 02:05
l8652012: 推84F 11/13 02:06
jserv: @over117, 應該先問「為何上班沒辦法達成目標呢?」85F 11/13 02:07
Lipton66g: 已收藏這篇文章86F 11/13 02:07
kiwi0530: 老師辛苦了87F 11/13 02:07
zzzz8931: 任何一個受過CS訓練的學生都應該可以上來澄清Arch的用處我不這麼認為
樓下比較 MIPS 和 ARM 的主要差異88F 11/13 02:08
Derek110206: 推專業91F 11/13 02:10
ttff: 難怪覺得這id很眼熟 原來是教授啊92F 11/13 02:11
jserv: http://hackfoldr.org/arm/ # 解釋 ARM 與 MIPS 的設計差異93F 11/13 02:16
YeSerD: 是松鼠!!94F 11/13 02:17
FrienDx: 太神啦95F 11/13 02:18
killloli: 有神快拜96F 11/13 02:21
gugugaga: 幹這ID先推再說97F 11/13 02:22
zzzz8931: 話說 jserv 大師是哪一年拿到助教授的職位的啊
以前 NCKU 不是只給講師的名份嘛......98F 11/13 02:22
knsm: 回14樓  是助理教授喔403F 11/14 14:09
CowBaoGan: 朝聖404F 11/14 14:39
HBKpaul: 老師好405F 11/14 19:10
calamus: 細細看好像蠻有意思~謝謝厲害的長知識教學分享文406F 11/14 20:32
mgrn: 推!407F 11/14 22:42

--
--
(jserv.): Re: [問卦] 讀通計算機組織對寫程式有什麼幫助? - Gossiping板