【Java Saves!】Session 4:電腦器之二--石器時代

来源:http://www.cnblogs.com/lowg/archive/2016/12/18/javasaves_computing_part2.html
-Advertisement-
Play Games

轉載一則朋友圈新聞: 2月30日,考古學家在發掘大荒山無稽崖青梗峰下的一處石器時代的遺址時獲得重大發現!一臺外觀完好的電腦,在歷經10000多年的滄海桑田後終於重見天日。一個包括程式員在內的跨學科專項組迅速成立,對這台電腦的初步研究表明,該電腦能夠順利啟動並正常運行。在本報記者拍攝的照片上可以 ...


轉載一則朋友圈新聞:

2月30日,考古學家在對我國西北邊陲大荒山無稽崖青梗峰下的一處石器時代的遺址發掘工作中取得重大發現!一臺外觀完好的電腦,在地下沉睡10000多年、歷經滄海桑田後終於重見天日。有關部門迅速抽調精幹力量,成立了包括程式員在內的跨學科專項組,初步研究表明,該電腦能夠順利啟動並正常運行。而在本報記者拍攝的高清照片上可以看到,該電腦正在執行一個計算圓面積的程式:

我們向項目組成員、退休程式員LowG瞭解到了該電腦的組成結構和工作原理等更多信息。

電腦組成及工作原理

據Low師傅介紹,這台石器時代的電腦,其工作原理與現代電腦無異。Low師傅向記者詳細講解了這台電腦的部件結構和程式的執行過程,現完整轉錄,以饗充滿好奇心的讀者。

Low師傅:這個…你現在看到的這台電腦它這個…呃…是由以下幾部分組成的:

  • CPU(Central Processing Unit,中央處理器),這是電腦的核心部件。電腦之所以叫做電腦,是因為它是用來計算的機器,而計算就是由CPU來執行的
  • 記憶體(Memory,簡稱 Mem)。記憶體就像一個抽屜櫃,每個抽屜裡面可以放一條數據(Data)。所有抽屜按順序編號,正如照片上的37、38、39… 這叫記憶體地址(Memory Address),CPU就是通過記憶體地址往某一個抽屜裡面存數據,或者從裡面取數據
  • 外圍設備,包括輸入設備(例如鍵盤)、輸出設備(例如顯示屏)、磁碟(Disk)等。外圍設備由I/O模塊控制,嗯,你真聰明!I/O就是輸入(Input)和輸出(Output)的意思
  • 匯流排。CPU、記憶體、I/O設備通過匯流排連接起來,互相傳遞信號和數據

程式本身是一個文件。通常我們也將程式叫做可執行程式,其原因是不言自明的。在Windows中,可執行程式的文件擴展名是.exe,例如,Windows自帶的繪圖程式,在 C:\Windows\System32 文件夾中,文件名是 mspaint.exe。

當用戶雙擊一個可執行程式時,操作系統就從磁碟上將程式載入到記憶體中,CPU開始執行程式中的第一條指令。這樣,程式就開始運行了。

程式包括數據和指令2部分。其實指令本身也是數據,一種特殊的數據;還記得嗎,前面說過,記憶體是用來存放數據的,既然程式能被放到記憶體中,那就說明程式指令也是數據。

我們知道,圓面積的計算公式是

A = π × R2

其中,π是常數3.14159…,R是圓的半徑。由於絕大部分地球人智力退化,手工計算圓的面積不僅耗時漫長,且易出錯,所以,程式員專門寫了一個圓面積計算程式,用戶只需要輸入半徑R,程式就能計算出圓面積,並輸出到顯示屏上。電腦就是專門用來做這種機械、繁瑣的計算工作的,它第一是算得快,第二是算得準,只要程式的演算法是正確的,用戶的輸入是正確的,它算出來的結果就一定是正確的。

圓面積程式包含下列數據:

  • π=3.14159

因為π是常數,所以程式員就把它寫在程式裡面了,否則,用戶每次都要輸入這個數,你知道地球人的耐心程度的,萬一自己輸錯了反倒怪程式員…

圓面積程式包含下列指令:

  1. Read R -- 這條指令表示,從輸入設備讀一個數,這個數取了個名字叫 R
  2. R2 = R × R -- 這條指令表示,計算R的平方,得到的結果取個名字就叫 R2。CPU並不能計算一個數的平方,但是可以算乘法,所以這裡只能這樣子了。你看,電腦傻吧
  3. A = π × R2 -- 這條指令表示,用π乘以 R2,得到的結果取個名字叫 A。π是包含在程式內的數據,R2 是上一個指令計算出來的
  4. Write A -- 這條指令表示,把 A 寫出到輸出設備

一般情況下,CPU執行完一條指令後,會接著執行下一條指令。所以,圓面積程式在運行時,CPU就會按照上面的順序依次執行這4條指令。

用戶輸入的數,以及程式運行過程中產生的數,叫做變數。花2秒鐘時間想想“變數”的字面意思是什麼,然後我再告訴你程式裡面還有一種數叫做常量,圓面積程式裡面的常數π就是一個常量。你可以把變數和常量對立起來看,也可以把常量理解成一種特殊的變數,它的特殊性在於它不能變。變數和常量都有名字,稱為變數名。

聰明的你一定已經猜到了,常量位於程式的數據區,也就是照片上黃色的部分,在程式啟動時裝載到記憶體;而變數則是在程式執行過程中,由CPU存放在記憶體的“運行記憶體”區,也就是照片上藍色的部分。

知道了這些,我們就可以理解程式的執行過程了:

  1. 用戶雙擊可執行程式,程式啟動,操作系統將程式從磁碟上裝載到記憶體中地址38--42範圍內。其中地址38--38是數據區,地址39--42是指令區
  2. CPU讀取第一條指令,即地址39處的指令 Read R
  3. CPU執行 Read R 指令。CPU從輸入設備讀取用戶輸入的數,此數變數名為 R,將R存放到記憶體地址 43。如果CPU在讀取用戶輸入時,用戶並沒有輸入,則CPU會一直等待,直到用戶輸入為止
  4. CPU讀取下一條指令,即地址40處的 R2 = R × R
  5. CPU執行指令 R2 = R × R。CPU將地址43處的R與自己相乘,得到的結果變數名為 R2,存放到地址44
  6. CPU讀取下一條指令,即地址41處的 A = π × R2
  7. CPU執行指令A = π × R2。CPU將地址38處的π與地址44處的R2相乘,得到的結果變數名為 A,存放到地址45
  8. CPU讀取下一條指令,即地址42處的 Write A
  9. CPU執行指令 Write A。CPU將地址45處的A寫到輸出設備
  10. 程式執行完畢,操作系統清空程式運行期間所占用的記憶體,包括運行記憶體

嗯,差不多就是這樣子的

記者手記

聽著Low師傅娓娓道來,記者不禁感嘆,原來電腦的工作原理so easy啊!媽媽再也不用擔心我不懂電腦啦!另外LowG師傅還告訴記者,雖然上文這個程式中只有乘法計算,其實,CPU可以執行2類運算:

  1. 算術運算,如:加、減、乘、除等
  2. 邏輯運算

由於項目研究正進入攻堅階段,如對該電腦I/O中斷機制的論證、隨其一同出土的一批石刻代碼和文獻的清點等已提上日程,而項目組亦面臨嚴重的人員和經費緊張,記者不便多加打擾,便與LowG師傅約定改日有空再談談邏輯運算。握手辭別LowG師傅時,已是晚上9:15,華燈初上,萬家團圓。在驅車返回報社的途中,記者看到沿路紅旗招展、花團錦簇,一派繁榮富貴的景象!而回想起Low師傅那蒼老而矍鑠、沉穩而親切的面龐,以及千千萬萬像Low師傅這樣可敬的程式員們躬身在一方鍵盤上辛勤耕耘、默默奉獻的偉岸身影,我對偉大祖國的崛起信心滿滿!

據悉,該電腦現已上交國家。



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 建立窗體的名稱修改為:Form_HoverTree文後附有源碼下載。主要代碼: 效果圖: 可以看出,這個窗體為自定義形狀的窗體,沒有標題欄。具體參考:http://hovertree.com/h/bjaf/52nadvt4.htm 源碼下載: http://hovertree.com/h/bjaf/ ...
  • 委托是個說爛了的話題,但是依舊有好多人不知道為什麼要在C 中使用委托,最近有朋友也問到我這個問題,所以舉例些場景,以供那些知道怎麼聲明委托、怎麼調用卻不知道為什麼要用的朋友一些參考,當然也是希望驗證下自己的理解是否正確。 如何聲明一個委托 委托使用關鍵字delegate,從外形上看和一個沒有方法體的 ...
  • 什麼是工作流? 工作流(Workflow),是對工作流程及其各操作步驟之間業務規則的抽象、概括、描述。BPM:是Business Process Management的英文字母縮寫.即業務流程管理,是一套達成企業各種業務環節整合的全面管理模式。 工作流軟體,顧名思義,就是業務信息數據在多個環節模塊之 ...
  • 1 public class BaseDAL 2 { 3 string strConn = ""; 4 public BaseDAL(string connString) 5 { 6 strConn = connString; 7 } 8 9 #region 通用增刪改查 10 #re... ...
  • 編程思想其本質是解決問題的思考,不過此時要站在電腦的角度思考如何解決? < 學習網站 > 博客園cnblogs --有優質博文 CSND --有優質討論 book.51cto.com //線上書籍 infoq //技術大牛講壇 it-ebooks.info //最新免費技術書籍下載 w3cscho ...
  • 2016-12-17 無意間看到了關於C#線程的講解。經過一下午的學習後,慢慢的對線程也有了一定的理解。這裡講解的是最基礎的內容,包括線程的創建、睡眠、等待、終止。 實驗環境:Visual studio 2010. 使用語言:C# 內容:創建、睡眠、等待、中止線程 1.創建新線程對象 Thread ...
  • 一、概述: 近來也是在看AOP方面的東西,瞭解到Emit可以實現。之前對Emit的瞭解也就是停留在Reflector針對方法反編譯出來的部分指令。就用這次機會學習下Emit也用這篇隨筆記錄下學習的過程。某些我也不瞭解的地方也希望各位瞭解的朋友指導下。 學習前可以先瞭解下Opcodes 二、工具 1、 ...
  • Solr3.6.1 在Tomcat6下的環境搭建 Tomcat路徑:D:\prg\apache-tomcat-6-solr 簡寫為tomcat_home Solr文件下載保存路徑為:F:\software\Lucence\solr\apache-solr-3.6.1 簡寫為solr_home 1:將 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...