看板 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
[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
[5] 即時系統和 Linux 的關聯請見:
https://www.slideshare.net/jserv/making-linux-do-hard-realtime
[6]
https://github.com/pirapira/awesome-ethereum-virtual-machine
[7] sandbox:
https://hackmd.io/s/BJpTWUM1f
--
--
※ 發信站: 批踢踢實業坊(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
推 zeumax: 這是讀書筆記吧4F 11/13 00:56
推 ogisun: 大神先推再看8F 11/13 00:58
推 sammoon: 116終於不是廢文惹9F 11/13 00:59
→ jserv: 對不起,是我們116教師不夠努力,檢討中10F 11/13 01:00
推 r34796a: 這是教授還助教來發文嗎14F 11/13 01:03
→ jserv: 任何一個受過CS訓練的學生都應該可以上來澄清Arch的用處
不過我想學生都在忙著準備期中考,就幫他們回覆15F 11/13 01:05
推 moocow: 靠 想說怎麼讀起來有料 原來是高手寫的22F 11/13 01:10
推 jengjye: 拜讀完 膝蓋痛了一下......24F 11/13 01:13
→ jserv: 怎麼會是膝蓋痛呢?不是GG隱隱作疼啊?!軟體很重要26F 11/13 01:15
→ mvpdirk712: 唉唉唉唉,在八卦版看到唐鳳還看到敬群大大,小弟我髕27F 11/13 01:17
推 cy4v: jserv37F 11/13 01:26
推 hortune: 宅色夫 <(_ _)>40F 11/13 01:27
推 abc88662a: 未看先推
jserv大教我OS嗚嗚嗚嗚43F 11/13 01:31
→ jserv: @b0920075, 感謝捧場,我會多回幾篇讓你好好噓48F 11/13 01:36
推 lulocke: 學店資科後面三分之一都不懂49F 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
推 woo0422: 好羨慕有這種課…
研所才開始自學c語言、linux
就是沒有基礎才知道基礎學科的重要性
可惜大多數人在學校中只在意軟體跑出來的結果
內容及流程對大部分的人來說都是0 kpi. QQ61F 11/13 01:49
→ jserv: @woo0422, 歡迎用下班空檔挑戰課程練習題,我可以幫忙批改69F 11/13 01:52
推 kai91: 清流推70F 11/13 01:52
→ jserv: 軟體工程師挑好戰場很重要,不下於歌手選遠對合適的曲目72F 11/13 01:53
推 oaoa0123: 每次發文都附註解,真的是太強大了...73F 11/13 01:53
推 Yuwuen: 哩細在供三小辣75F 11/13 01:55
→ 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: @over117, 應該先問「為何上班沒辦法達成目標呢?」85F 11/13 02:07
推 zzzz8931: 任何一個受過CS訓練的學生都應該可以上來澄清Arch的用處我不這麼認為
樓下比較 MIPS 和 ARM 的主要差異88F 11/13 02:08
推 ttff: 難怪覺得這id很眼熟 原來是教授啊92F 11/13 02:11
推 YeSerD: 是松鼠!!94F 11/13 02:17
推 zzzz8931: 話說 jserv 大師是哪一年拿到助教授的職位的啊
以前 NCKU 不是只給講師的名份嘛......98F 11/13 02:22
推 knsm: 回14樓 是助理教授喔403F 11/14 14:09
推 calamus: 細細看好像蠻有意思~謝謝厲害的長知識教學分享文406F 11/14 20:32
推 mgrn: 推!407F 11/14 22:42
--