Linux運維與架構之淺談計算機系統

Linux運維與架構之淺談計算機系統

1.1 什麼是計算機

計算機是一種用於高速計算的電子機器,能夠進行數值運算、邏輯判斷,還有存儲記憶功能,
可以接收和存儲信息,並按照存儲在其內部的程序對海量數據進行自動、高速的處理,而後把處理的結果輸出的現代化智能電子設備。平常生活中常見的臺式機、筆記本、手機等等都屬於計算機。html

1.2 計算機發展歷史

計算機從1945年發展至今經歷了四個階段,分別是電子管計算機、晶體管計算機、集成電路計算機和超大規模集成電路計算機。java

  • 電子管計算機(1945年-1957年)
    第二次世界大戰是電子管計算機產生的催化劑,而最著名的電子管計算機是來自美國的埃尼阿克(ENIAC),這一時期的計算機有以下特色:linux

    • 集成度小,佔用空間大
    • 功耗高,運行速度慢
    • 操做複雜,更換程序須要接線
  • 晶體管計算機(1957年-1964年)
    1948年,貝爾實驗室的三個科學家發明了晶體管,相比電子管而言,晶體管有着更小的體積,更低的功耗以及更高的運算效率。而全世界第一臺晶體管計算機TX-0誕生於麻省理工大學的MIT林肯實驗室,而當時性能最高的計算機是PDP-1,它具有4K的內存,每秒能夠執行20W條指令,同時配備了512*512的顯示器,晶體管相對於電子管計算機而言:shell

    • 集成度相對較高,佔用空間相對較小
    • 功耗相對較低,運行速度較快
    • 操做相對簡單,交互更加方便
  • 集成電路計算機(1964年-1980年)
    集成電路計算機出現的背景是德州儀器的工程師發明了集成電路(IC),集成電路計算機相對於晶體管計算機而言:數據庫

    • 計算機變得更小
    • 功耗相對較低,
    • 運行速度較快
    • 具有進入千家萬戶的條件
      在集成電路計算機階段,IBM有兩款暢銷的計算機 IBM 7094和IBM 1401 ,可是這兩款計算機主打的功能不一樣,而且相互沒法兼容,並且企業購買IBM 7094和IBM1401後也不肯意投入兩組人力開發,在此背景下IBM推出了兼容的產品System/360,也就是操做系統的雛形,它的出現使得不一樣的電子元器件,不一樣電路的計算機都能在同一個操做系統下運行。
  • 超大規模集成電路計算機(1980年-今)
    CPU就是超大規模集成電路的典型產品,一個芯片能夠集成上百萬的晶體管。
    並且超大規模集成電路計算機速度更快,體積更小,價格更低,更能被大衆接受,同時在此階段計算機用途也變得豐富起來,能夠用於文本處理,表格處理以及高交互的遊戲和應用。
    而喬布斯在這個階段推出了Apple,Apple二代。編程

隨着計算機的發展,將來會出現生物計算機和量子計算機。服務器

生物計算機是以蛋白質分支做爲主要原材料,和人體結合起來進行相關的運算。並且生物計算機體積小,不易損壞,提供生物級別的自動修復以及不受信號干擾和無熱損耗。微信

量子計算機是遵循量子力學的物理計算機,目前量子計算機已經有相關的研究成果網絡

2013年5月,谷歌和NASA發佈了D-Wave Tow
2017年5月,中國科學院宣佈製造出光量子計算機。
2019年1月,IBM展現了世界首款商業化量子計算機架構

並且目前國內的阿里和騰訊在量子計算機領域進行相關的研究。

1.3 計算機的分類

計算機能夠按照不一樣的用途分爲超級計算機,大型機,小型機,我的計算機。

  • 超級計算機
    超級計算機是功能最強,運算速度最快,存儲容量最大的計算機,主要用於國家高科技領域尖端技術研究,咱們使用每秒一萬億浮點數計算(1TFlop/s)指標來衡量超級計算機的性能。
    若是想要了解超級計算機的排名,能夠訪問網站 https://www.top500.org/。
    目前(2019/10/18)排名第一的超級計算機配置
    IBM

  • 大型計算機
    IBM z15™
    大型計算機又稱爲大型機、大型主機、主機等等,大型計算機具備高性能。可處理大量數據與複雜運算,應用場景一般是銀行、證券等金融機構。在大型機市場領域,IBM佔據着很大的份額。
    因爲大型機造價高昂,不夠靈活,伸縮性弱,目前不少企業替換成小型機。
    阿里巴巴在2008年發起去IOE行動,I就是IBM大型機,O就是商業數據庫Oracle,E就是EMC存儲,IOE表明了高成本,高維護費用的存儲系統。去IOE就是將大型機換成了普通的服務器,將Oracle替換成了分佈式的MySQL,去IOE行動直接驅動了阿里雲的誕生。

  • 小型機
    服務器也被稱爲小型機,普通服務器,相對於大型機而言,不要特殊的空調場所,同時也具有不錯的算力。常見的服務器廠商包括戴爾,聯想,IBM。
    普通服務器已經替代了傳統的大型機,成爲大規模企業計算機的中樞紐,好比國內的阿里雲、騰訊雲、華爲雲都是基於服務器構建的。

  • 工做站
    工做站是高端的通用微型計算機,能夠提供比我的計算機更強大的性能,相似於普通臺式電腦,體積大,性能強勁,例如Mac Pro。

  • 微型計算機
    微型計算機又稱爲我的計算機,是最普通的一類計算機,能夠分爲臺式機、筆記本電腦、一體機,微型計算機是成本最低的,可是從構造本質來說,我的計算機與超級計算機、大型機、小型機、工做站沒有區別。

日常開發人員一般接觸的比較多的是微型計算機,例如筆記本、臺式機,而運維人員一般接觸的是服務器。

1.4 計算機的計算單位

1.4.1 容量單位

在購買電腦時,一般會選擇高配置的內存、硬盤。例如最新款(2019)15寸的MacBookPro已經能夠選配32G內存和4T的固態硬盤,而這裏的32G和4T就是經常使用的容量單位。

在物理層面,咱們使用高低電平來記錄信息,一般使用高電平表示1,低電平表示0,所以在計算機底層只能認識0,1兩種狀態。而0,1可以表示的內容太少,迫切須要更大的容量表示方法,所以誕生了字節(Byte),千字節(KB),兆字節(MB),吉字節(GB),太字節(TB),拍字節(PB),艾字節(EB)。

1YB=1024ZB
1ZB=1024EB
1EB=1024PB
1PB=1024TB
1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B
1Byte=8bit
  • 位(bit)是最小的計算機容量單位,一般用於門電路,只能存儲0或者1
  • 字節(Byte)、千字節(KB)、兆字節(MB)表示網絡傳輸,文件大小,是最基本的容量計量單位。
  • 吉字節(GB)一般用於表示計算機內存、磁盤的容量單位
  • 太字節(TB),拍字節(PB)一般是用於表示雲盤、移動硬盤的容量單位
  • 艾字節(EB)一般是用於表示數據中心的容量單位

如今一般筆記本的內存一般是8G,16G,32G,64G等等,而運行在筆記本之上的操做系統廣泛都是64位的,由於32位系統只能使用4G內存,下面是4G的內存換算

4G=2^2 * 2^10 * 2^10 * 2^10 =4*1024*1024*1024=2^32

在購買內存或者買移動硬盤時,一般使用的存儲單位就是GB或者是TB,
可是在買4T的移動硬盤時,實際的可用容量卻只有3T多,由於計算機的存儲單位是以2的10次方(即1024)換算,而硬盤廠商們是以1000爲換算單位。

4T的硬盤換算成位以下所示

4T=4*1024GB*1024MB*1024KB*1024B*8bit

而硬盤廠商的實際容量

4T=1000*1000*1000*1000*8

所以實際的可用容量是

4*1000*1000*1000*1000/1024/1024/1024/10243.63T

而在一些互聯網巨頭(例如國內的BAT,國外的亞馬遜、蘋果、微軟、谷歌,臉書)公司中,可能使用到比TB更大的海量數據,也就是PB或者EB,它們的換算單位以下所示。

1PB=1024TB
1EB=1024PB

1.4.2 速度單位

  • 網絡速度
    網絡經常使用的單位是Mbps
    而網絡帶寬提供商(例如長城寬帶)聲稱的百兆帶寬其實是100Mbit/s,可是100M光纖測試的峯值速度只會有12.5MB/s,它們之間的換算是100Mbit/s=(100/8)MB/s=12.5MB/s。

  • CPU速度
    CPU的速度通常是由CPU的時鐘頻率所體現的,而時鐘頻率的單位是赫茲(Hz),目前主流的CPU時鐘頻率通常都在2GHz以上,而赫茲(Hz)其實就是秒分之一,也就是每秒鐘的週期性變更重複次數的計量。
    GHz即十億赫茲(10^9Hz),2GHz就是二十億赫茲,也就是說2GHz的CPU每秒能夠變化20億次。

1Khz=1000hz
1Mhz=1000khz
1Ghz=1000Mhz

1.5 計算機的體系結構

1.5.1 馮諾依曼體系結構

馮諾依曼體系就是將程序指令和數據一塊兒存儲的計算機設計概念結構。
早期的計算機僅能運行固定用途的程序,若是想要運行別的程序,必需要更改計算機結構、從新設計電路。而馮洛伊曼是把程序存儲起來,並設計通用的電路。存儲程序指令,設計通用電路。

馮諾依曼體系結構
馮諾依曼體系結構

  • 必須有存儲器,存儲運行的程序和數據,長期記憶程序、數據、中間結果和最終結果的運算能力
  • 必需要有控制器,控制程序的流程以及數據的流轉
  • 必需要有運算器,負責完成數據的算數、邏輯運算
  • 必需要有輸入設備,負責完成程序指令和數據的輸入
  • 必需要要輸出設備,負責完成程序的處理結果輸出

現代計算機都是屬於馮諾依曼機。

1.5.2 現代計算機的體系結構

現代計算機結構由馮諾依曼結構基礎之上進行修改,主要是解決CPU和存儲器速度差別的問題:即存儲器、運算器和控制器集中在一塊芯片上。

 現代計算機的體系結構
現代計算機的體系結構

1.6 淺談計算機系統

計算機系統組成
計算機系統組成

1.6.1 計算機系統概述

計算機系統由硬件(Hardware)系統和軟件(Software)系統兩大部分組成。
軟件是運行在硬件之上,而硬件的好壞會直接影響軟件運行的性能。
經過軟硬件的共同協做就能夠完成平常常見的任務,例如聽歌、看電影、購物、聊天等等。

1.6.2 計算機硬件系統

計算機硬件系統主要由主機和外部設備組成。
主機主要是包含中央處理器和內存儲器。
中央處理器主要由運算器和控制器組成。
而內存儲器分爲RAM和ROM,其中RAM(Random Access Memory)表示隨機存儲內存,這種存儲器在斷電時將會丟失其存儲的內容。而ROM(Read-Only Memory)表示只讀內存,是一種只能讀出事先存儲數據的固態半導體存儲器。

外部設備主要包含外部存儲器、輸入設備、輸出設備組成。常見的外存儲器包含移動硬盤U盤等等。而常見的輸入設備包含鼠標鍵盤等等,常見的輸出設備包含聲卡、顯卡等等。

每一個計算機組件的IO性能也各不相同,核心組件(CPU,內存,磁盤)都遵循容量越大,IO性能越差,在後期程序優化時,一般須要考慮時間和空間的問題

計算機各組件IO性能彙總
計算機各組件IO性能彙總

1.6.3 計算機軟件系統

軟件的出現實現了人和計算機更好的交互,它是由開發人員採用某種編程語言(C/C++/Java等等)編寫的一系列指令以及不一樣業務場景產生的數據組成。

一般將軟件分爲系統軟件和應用軟件

  • 系統軟件
    驅動程序、操做系統、語言處理程序等都是屬於系統軟件。
    驅動程序是硬件廠商使用編程語言(C/C++)編寫的程序,在使用硬件(例如打印機、顯卡等等)前必須安裝對應的驅動程序。
    操做系統是負責經過驅動程序管理硬件資源,同時給應用軟件提供運行平臺,目前主流的操做系統有Windows,Linux,macOS,Android,iOS。
    語言處理程序是用於將編程語言編寫的源程序編譯或者解釋成對應平臺的機器語言。

  • 應用軟件
    微信、支付寶、淘寶、Office都是屬於應用軟件,它們都是運行在操做系統之上的。
    運行在不一樣操做系統之上的軟件交互方式也不同,Linux上的軟件一般是使用字符界面的交互方式,運行在Windows,macOS上的軟件一般是以鼠標、鍵盤操做的交互方式,運行在Android,iOS上的軟件一般是以手勢觸控、語音等交互方式。

1.7 開發者必備硬件配置

開發者在購買筆記本或者臺式機時,一般須要關注CPU,內存、磁盤以及顯卡的相關配置。
和普通用戶不一樣,因爲開發時須要安裝許許多多相關的應用程序和配置各個集成開發環境,所以推薦購買高配置的電腦,若是你想購買MacBookPro,能夠參考以下配置。

組件名稱 配置
CPU i9 2.3Hz
內存 32G
磁盤 512SSD
顯卡 Radeon pro Vega 20

MacBookPro 2019配置
macOS

若是你想購買運行Windows的筆記本,參考以下配置。
Alienware 17R5
若是是想要從事軟件開發,電腦最低配置不要低於Intel i7 CPU + 內存 16G+ 固態硬盤 256G,出色的硬件可以提升開發效率。

1.8 Java開發者經常使用軟件

因爲本人是Java出身,這裏羅列出Windows和macOS平臺在作Java開發時經常使用到的一些應用軟件。

  • Windows/macOS應用篇

    • 微信/企業微信/QQ/ 釘釘/阿里旺旺
    • 百度網盤
    • 迅雷下載
    • WPS/Office
    • 有道詞典
    • 網易郵箱大師
    • QQ音樂/網易雲音樂
  • macOS篇

    • Dash 幫助文檔
    • iTerm 終端
    • IINA 視頻播放
    • Screen Flow 錄屏
    • Parallels Desktop 虛擬機
    • iStat Menus 系統資源監控
    • Fantanstical 日曆
    • CleanMyMac X
  • 開發工具篇

    • JDK
    • Visual Studio Code
    • IntelliJ IDEA
    • Git/Github /Gitlab
    • Maven/Gradle
    • Navicat/DataGrip
    • Chrome/Firefox/Safari
    • SecureCRT/Xshell
    • Xmind Zen
    • 億圖圖示
    • PowerDesigner
    • 印象筆記/剪藏
    • Typora/小書匠

1.9 計算機的字符與編碼集

1.9.1 字符集編碼

在計算機底層(內存、硬盤)都是使用01001二進制的方式存儲數據,而字符編碼集是描述了計算機數據(例如字符數據)和底層二進制數據的對應關係,例如在ASC||碼中字符a對應的十進制整數是97,字符A對應的十進制整數是65。

1.9.2 字符集編碼的歷史

  • ASC||碼
    因爲計算機最先是誕生在英美,所以最先的字符集是ASC||,用於表示平常開發中經常使用的大小寫字母以及經常使用的符號,使用7bits表示,包含95個可打印字符課33各個不可打印字符(包括控制字符),95+33=128,即2的7次方。

  • 可擴展的ASC||碼
    隨着計算機的發展以及逐漸普及,ASC||碼在不少應用或者國家中的符號沒法表示,例如數學符號"≠,≥,≈,π",所以對ASC||進行擴充,由原來的7bit擴充到8bits,所以能夠表示256個字符。擴展的運算符增長了數學運算符、帶音標的歐洲字符以及其餘經常使用符、表格符等等。

  • Unicode
    隨着計算機的進一步發展。愈來愈多的國家開始使用使用計算,而對於歐洲、中亞、拉丁美洲國家的語言多樣性,因爲語言體系不同,不以有限字符組合的語言,而中國、韓國、日本的語言最爲複雜。

Unicode定義了世界通用的符號集,能夠表示世界上全部的國家、全部語言的文字、符號,使用UTF-8,UTF-16,UTF-32實現了編碼。

UFT-8:一種變長的編碼方案,使用 1~6 個字節來存儲;
UFT-32:一種固定長度的編碼方案,無論字符編號大小,始終使用 4 個字節來存儲;
UTF-16:介於 UTF-8 和 UTF-32 之間,使用 2 個或者 4 個字節來存儲,長度既固定又可變。

1.9.3 中文編碼集

1980年國內發佈了中文編碼集 GB2312,一共收錄了7445個字符,包含6763個漢字和682個其餘符號,可是GB2312不符合國際標準,後來在1995年推出了GBK編碼,向下兼容GB2312,向上支持國際ISO標準,GBK收錄了21003個漢字,支持所有中日韓漢字。

可是GBK,GB2312都只是本地化的編碼集,若是中國人使用GBK或者GB2312開發了一個網站程序,被國外的用戶訪問了,可是國外的用戶不支持GBK或者GB2312,那麼看到的網站內容就是亂碼。

在國內,Windows系統的默認編碼是GBK編碼,而平常開發中最常使用的是UTF-8字符集。

1.10 計算機底層爲何只能識別二進制

咱們目前主要使用的計算機都是大規模集成電路,是採用大規模和超大規模的集成電路做爲邏輯元件的。集成電路按其功能、結構的不一樣,能夠分爲模擬集成電路、數字集成電路和數/模混合集成電路三大類。而咱們的計算機主要是採用數字集成電路搭建的。邏輯門是數字邏輯電路的基本單元。常見的邏輯門包括「與」門,「或」門,「非」門,「異或」等等。經過邏輯門能夠組合使用實現更爲複雜的邏輯運算和數值運算。邏輯門能夠經過控制高、低電平,從而實現邏輯運算。電源電壓大小的波動對其沒有影響,溫度和工藝誤差對其工做的可靠性影響也比模擬電路小得多,因此相對穩定。由於數字計算機是由邏輯門組成,而邏輯電路最基礎的狀態就是兩個——開和關。因此,數字電路是以二進制邏輯代數爲數學基礎。二進制的基本運算規則簡單,運算操做方便,這樣一來有利於簡化計算機內部結構,提升運算速度。可是在平常開發中,一般都會使用八進制和十六進制,由於八進制和十六進制相對於二進制表示數據更加簡潔,並且一個八進制表示三個二進制,一個十六進制表示四個二進制。例如1024使用二進制表示爲0b100 0000 0000,使用八進制表示爲02000,使用十六進制表示爲0x400。

1.11 計算機經常使用進制及其轉換

1.11.1 進制概述

進制的定義:進制是一種計數方式,也稱爲進位計數法或者位值計數法,使用有限數字符號表示無限的數值,使用的數字符號的數目稱爲這種進位制的基數或者底數,例如十進制就是由0-9十個數字組成。在計算機內存中,都是以二進制的補碼形式來存儲數據的,生活中以十進制方式計算的數據居多,例如帳戶餘額,開發人員的薪水等等。計算的內存地址、MAC地址等等一般都是使用十六進制表示的,Linux系統的權限系統採用八進制的數據表示的。相同進制類型數據進行運算時會遵照加法:逢R進1;減法:借1當R,其中R就表示進制。

計算機經常使用進制的組成、示例和使用場景

進制名稱 組成 數值示例 應用場景
二進制 0,1 1010 計算機底層數據存儲
八進制 0-7之間的8個整數 010 linux權限系統
十進制 0-9之間的10個整數 12 整數
十六進制 0-9,a-f之間的10個整數加上6個字母 12f 數據的內存地

1.11.2 十進制轉換二進制、八進制、十六進制

十進制轉換二進制、八進制、十六進制能夠採用短除法,即待轉換的十進制數除以指定的進制(例如2,8,16),直到商數爲0,求餘數。

十進制101轉換爲二進制的計算過程

重複除以2 商數 餘數
101/2 50 1
50/2 25 0
25/2 12 1
12/2 6 0
6/2 3 0
3/2 1 1
1/2 0 1

而後將餘數的結果從下到上串聯起來的結果:1100101,即十進制的101轉換爲二進制的結果爲1100101

十進制的237轉換爲二進制

重複除以2 商數 餘數
237/2 118 1
118/2 59 0
59/2 29 1
29/2 14 1
14/2 7 0
7/2 3 1
3/2 1 1
1/2 0 1

而後將餘數的結果從下到上串聯起來的結果:11101101,即十進制的237轉換爲二進制的結果爲11101101。

1.11.3 二進制、八進制、十六進制轉十進制

首先明確不一樣進制的值是如何計算的,這裏以十進制和二進制爲例子,闡述它們的計算過程。

十進制整數1024

1024=1*10^3+2*10^1+4*10^0=1000+20+4=1024

二進制整數 10000000000

10000000000 =1*2^10=1024

二進制、八進制、十六進制整數轉十進制整數是使用按權展開法計算的,這裏以二進制數據01100101爲例子。從右往左開始數,若是二進制位爲1,則依次用1*2^n,n從0開始。

二進制整數01100101 轉換爲十進制整數的計算過程

01100101=126+1*25+1*22+1*20=64+32+4+1=101

八進制整數0127轉換爲十進制整數的計算過程

0127=1*8^2+2*8^1+7=87

十六進制整數0x12f轉換爲十進制整數的計算過程

0x12f=1*16^2+2*16^1+f*16^0=256+32+15=303

1.11.4 二進制轉八進制、十六進制

二進制轉八進制是按照從右往左,每3位二進制對應1位八進制,由於2的3次方等於8

二進制整數11001100轉八進制計算過程

11 001 100 =0314

二進制轉十六進制是按照從右往左,每4位二進制對應1位十六進制,由於2的4次方等於16。

二進制整數1100 1110轉十六進制計算過程

1100 1110 =0xce

1.11.5 八進制、十六進制轉二進制

八進制轉二進制是按照從右往左,每1位八進制對應3位二進制。

八進制整數0127轉二進制整數計算過程

0127=001 010 111

十六進制轉二進制是按照從右往左,每1位十六進制對應4位二進制。

十六進制整數0x12f轉換爲二進制整數計算過程

0x12f=0001 0010 1111
相關文章
相關標籤/搜索