教育:構造主義和機能主義

「CPU如何工做?」

  (這個問題由隨筆《一種很簡單的編程語言》引起)(該文寫了一部分,還未發表)編程

  我看過《編碼:隱匿在計算機軟硬件背後的語言》,可是今天回想這個問題,仍是以爲不懂,因而上網搜索,結果仍是不懂。這本書強大到——用繼電器實現CPU!但我爲何仍是沒看懂?編程語言

  我不會以爲本身笨,因此必定是書有問題。(呵呵?)可是這本書不應有問題,那……總之不怪我,是書的表達問題……ide

  心理學中曾有構造主義和機能主義之爭。我打個比方:有一隻懷錶,爲了弄懂其如何工做,構造主義仔細地拆開了表,說:「這個表有100個齒輪。」而機能主義看了看錶,說:「這個表有一個錶盤,錶盤之下必然有一個動力系統,也必然有一個能量儲存系統。」——兩者說得都很對,可是前者顯然仍不知道表如何工做,咱們也彷佛也不能說後者就弄懂了表如何工做。那麼,咱們該怎麼回答這個問題呢?函數

  咱們使用懶人信條的第二條,假設咱們已經回答完了,因此你也該懂了——什麼叫「懂了」?「我明白CPU是怎麼工做的了」、「我明白懷錶是怎麼工做的了」、「我懂微積分了」,這些都是什麼意思?也許某人會算二次函數下的面積,但他未必「懂」微積分,由於他只知道能夠套用某個公式。但我還知道爲什麼能夠套用這個公式——由於這個公式包含在微積分基本定理中,而微積分基本定理對光滑曲線老是有效。雖然說要是把「爲何」一直問下去,我也不會懂,但其一我懂的比他多,其二我已經觸碰到了最基本的一些定律。因而可知,「懂」就是能把基本的東西一直上推到表面——經過不斷組合。因此對於CPU,要作的就是從門電路開始——但經過對門電路的組合,咱們能夠組合出新的成分,並以此爲新的基石。自底向上是構造主義,自頂向下是機能主義。前者是工程組裝順序,後者是分析設計順序。兩者必然是能夠對接的——可是在心理學中,這個對接十分困難,從神經到精神實在太遠——CPU則相對簡單。《編碼:隱匿在計算機軟硬件背後的語言》這本書,大致是按構造主義方法寫的,這很好,可是缺點是看不到目標;而用機能主義方法寫,則看不到底層細節——也就是咱們擁有的東西。對接是感人的:你用機能主義方法分析出了一個基本須要,而後發現某現有之物恰能夠去知足這一需求——這讓人興奮。但我也就是說,在目標主導的狀況下,機能主義方法纔是基本的,要回答「CPU的工做原理是什麼」,也當從機能主義角度開始。倒不是說這本書倒過來寫更好些,但絕對更快、更簡練。可是開頭——從繼電器到門,就難以倒敘了,我認可這是一個例外,而且難以言說,或許是由於繼電器過於基本了?可是畢竟結構主義路線在這裏過於難走,(心理學尚有解剖可看,而且器官可能做用並不單一而是通過高度合併;而CPU是咱們的設計,合併功能是將來的事了)總之設計應當主修機能主義,而拆表工做中結構主義就更沾光一些——也只是一些。編碼

  那麼我是否是該試圖回答一下這一問題——「CPU如何工做?」spa

  第一步,「CPU」是什麼?——先列出計算機的所有結構:設計

  • 邏輯儲存器(包括儲存器、輸入、輸出,此抽象來自《彙編語言》)
  • CPU(包括運算器、控制器,此抽象來自《計算機組成原理》)

  ……不得不說我再一次意識到本身的紕漏——問題應該是「CPU」是完成何工做之物。而在此以前我先回答一下計算機爲完成何工做之物——咱們定義一臺簡單計算機,爲了區別於圖靈機,暫稱「簡單機」,其工做原理以下:it

  1. (初始化)簡單機分爲「儲存部分」和「處理部分」,儲存部分爲足夠長的一串的字節(8位),處理部分爲一個寄存器A和一套指令,寄存器A存放地址,指令將一個數對應於一個操做,這個操做能夠按固定規則地更新寄存器A和儲存部分。
  2. 執行寄存器A中數值對應地址中的操做
  3. 回到1

  然而這不就是那一篇隨筆(見開頭)中的BF語言嗎?咱們甚至不須要那個寄存器A,把寄存器A看作某個固定地址就能夠,把第一條改成「執行地址…中的操做」。若是這樣,那麼CPU就是幹這件事的東西,即【把數字轉化爲數據操做】class

CPU就是把數轉化爲操做的東西原理

  如今才得出這個結論彷佛有些好笑——CPU等價於一個switch,但咱們知道數據很容易儲存,操做呢?咱們以「取某地址的數」操做爲例:(設置一個寄存器X來簡化)

  (參考《編碼:隱匿在計算機軟硬件背後的語言》第17章)

  (2018-1-6 於地球, 未完待續)

相關文章
相關標籤/搜索