【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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...