002、計算機基礎知識及UNIX發展史

TOC[-]

1、計算機系統組成機構

2、馮諾依曼體系結構

3、服務器硬件簡介

4、存儲容量換算

5、存儲基礎知識

6、操作系統

7、開發相關概念

8、UNIX發展史

9、開源協議

10、Linux哲學思想

計算機基礎知識及UNIX發展史

1、計算機系統組成機構

計算機系統由硬件(Hardware)系統和軟件(Software)系統兩大部分組成,如下圖所示:

TT2pH3Q.png

2、馮諾依曼體系結構

1946年數學家馮·諾依曼於提出,其中包括:運算器、控制器、存儲器(主/輔助)、輸入設備、輸出設備。

ygP57nD.pngg

五大部件組成簡要描述:

  • 存儲器用來存放數據和程序

  • 運算器主要運行算數運算和邏輯運算,並將中間結果暫存到運算器中

  • 控制器主要用來控制和指揮程序和數據的輸入運行,以及處理運算結果

  • 輸入設備用來將人們熟悉的信息形式轉換爲機器能夠識別的信息形式,常見的有鍵盤,鼠標等

  • 輸出設備可以將機器運算結果轉換爲人們熟悉的信息形式,如打印機輸出,顯示器輸出等

3、服務器硬件簡介

PC服務器含有的主要部件包括:CPU、內存、硬盤、RAID卡、網卡、HBA卡、風扇、電源等,其硬件結構圖如下所示:

oBLvYhC.jpg

對關鍵部件的簡要介紹如下:

a) CPU:

  • 主頻(CPU時鐘頻率)

  • 外頻(系統總線工作時鐘頻率)

  • 倍頻(外頻與主頻相差的倍數)

  • 三者關係是:主頻=外頻x倍頻

  • 高速緩存(cache),分爲一級,二級,三級緩存,即L1,L2,L3

b) 內存:

  • RAM(random access memory),斷電時將丟失其存儲內容 內存是介於CPU和外部存儲之間,與CPU直接交換數據的內部存儲器,用於存放程序指令、數據和中間結果的臨時場所

c) 外存:

  • ROM(read only memory,一次寫入,反覆讀取 外存通常是磁性介質或光盤,像硬盤,軟盤,磁帶,CD等,能長期保存信息,並且不依賴於電來保存信息,但是由機械部件帶動,速度與CPU相比就顯得慢的多。

d) 硬盤:

磁盤則爲永久存放數據的存儲器,磁盤上也是有緩存的(芯片),讀取數據的性能比內存差,所以,在企業工作中,我們纔會把大量的數據緩存到內存中,寫入到緩衝區。

  • 磁盤尺寸大小:2.5英寸、3.5英寸

  • 硬盤的轉速:7200rpm、10000rpm,15000rpm

  • 磁盤的接口或類型:IDE,SCSI,SAS,SATA

  • 硬盤接口類型:

    • a) IDE接口:硬盤接口規範,採用ATA技術規範

    • b) SCSI接口:應用於小型機上的高速數據傳輸技術

    • c) SATA接口: Serial ATA,提高傳輸速率,支持熱插拔

    • d) SAS接口: Serial Attached SCSI,兼容SATA

    • e) 目前主流的硬盤接口爲SATA和SAS接口,其中IDE和SCSI已經退出歷史舞臺

  • 企業應用中硬盤選取建議:

    • 常規的正式工作場景建議選SAS(結合SATA和SCSI的優點)硬盤,轉速可達15000rpm,機械磁盤轉速高的性能相對還可以。

    • 不對外提訪問的服務器,如數據的備份,建議選SATA(7200-10000轉/分),其特點是容量大、價格便宜、但是速度比較慢。

    • 高併發訪問、數據量小、資金充沛的情況下,建議選擇SSD ,讀取性能、用戶體驗較好。

    • 大型的服務器,一般會把SATA和SSD結合起來使用等。

    e) RAID卡:

    用來實現RAID的建立和重建,檢測和修復多位錯誤,錯誤磁盤自動檢測等功能。RAID芯片使CPU的資源得以釋放。 有Raid卡後,一般磁盤就會插在raid卡上再連接到主板上,而不是直接插到主板上面。當然Raid卡的級別和具體的配置做運維的同學也得掌握,如RAID0、1、5、6、10等(後續補充)。

    • RAID作用

      • 陣列卡把若干硬盤驅動器按照一定要求組成一個整體、由陣列控制器管理的系統。

      • 陣列卡用來提高磁盤子系統的性能及可靠性

      如上簡要介紹服務器組成結構的關鍵部件,其他部件如、網卡、HBA卡、風扇及電源等不在此贅述,請大家自行學習。

      f) 關鍵概念:

      • 熱插拔技術也稱爲熱交換技術(Hot Swap),允許在不關機的狀態下更換故障熱插拔設備。常見的熱插拔設備:硬盤,電源,PCI設備,風扇等。熱插拔硬盤技術與RAID技術配合起來,可以使服務器在不關機的狀態下恢復故障硬盤上的數據,同時並不影響網絡用戶對數據的使用。

      4、存儲容量換算

      關於存儲容量方面的換算,具體如下:

      1Byte=8bit
      1K=1024B=2^10
      1M=1024K=2^20
      1G=1024M=2^30
      1T=1024G=2^40
      .....

      其他單位換算以此類推:P、E、Z、Y、B、N、D、C,進入DT時代,數據大爆炸......

      5、存儲基礎知識

      服務器外置存儲根據連接方式可以分爲:直連式存儲(DAS: Direct-Attached Storage)和網絡化存儲(Fabric-Attached Storage,簡稱FAS)。網絡化存儲又分爲:網絡附加存儲(NAS:Network-Attached Storage)和存儲區域網絡(SAN:Storage Area Network)。

      9GGn6mZ.jpg

      • a) DAS(Direct-Attached Storage)

        • DAS存儲設備與服務器主機之間的連接通道通常採用SCSI連接,DAS存儲設備主要是磁盤陣列(RAID: Redundant Arrays of Independent Disks)、磁盤簇(JBOD:Just a Bunch Of Disks)等。隨着陣列的硬盤數量越來越多,SCSI通道將會成爲IO瓶頸。PC中的硬盤或只有一個外部SCSI接口的JBOD都屬於DAS架構。 注意: JBOD是在一個底板上安裝的帶有多個磁盤驅動器的存儲設備。通常又稱爲Span。和RAID陣列不同,JBOD沒有前端邏輯來管理磁盤上的數據分佈。每個磁盤進行單獨尋址,作爲分開的存儲資源。目前應用比較廣泛。
          JBOD是在邏輯上把幾個物理磁盤一個接一個串聯到一起,從而提供一個大的邏輯磁盤。JBOD存儲容量等於組成Span的所有磁盤的容量的總和。但JBOD不能提供任何RAID所能帶來的容錯或是性能方面的好處。

      • b) NAS(Network-Attached Storage)

        • NAS存儲就是存儲設備通過標準的網絡拓撲結構(比如以太網)添加到一羣計算機上。與DAS以及SAN不同,NAS是文件級的存儲方法。採用NAS較多的功能是用來進行文件共享。
          NAS存儲需要有一臺NAS服務器,NAS服務器可以爲網絡中的所有存儲節點建立分佈式的網絡文件系統,一般採用的協議是網絡文件系統(NFS:Network File System)協議或SMB(Server Message Block)協議。
          NAS設備,或者說網絡文件共享協議,一般支持多計算機平臺,如Linux、Windows、Solaris等,即插即用,存儲節點隨時可以把自己的文件目錄掛載到NAS服務器上。
          不同的主機(如NFS客戶機)通過NFS協議可訪問到同一個文件。而DAS與SAN存儲設備中的數據只屬於與之相連的主機,其他主機則無法訪問。

      • c) SAN(Storage Area Network)

        • 存儲區域網絡,是通過光纖通道(Fiber Channel)交換機連接存儲陣列和服務器主機,最後成爲一個專用的存儲網絡。

        與DAS相比,SAN存儲的優點在於:

        • 隨着存儲容量的增長,SAN允許企業獨立地增加他們的存儲容量。

        • SAN允許任何服務器連接到任何存儲陣列。

        • 由於使用光纖接口,SAN具有更高的帶寬。除了FC連接,SAN連接還有ISCSI(SCSI over IP)以及SAS(Serial Attached SCSI)接口。

        • 光纖接口可以提供10公里的連接長度,非常容易實現物理分離的存儲。

      用圖示說明DAS、NAS及SAN三者的區別,具體如下:

      YEtFT0o.jpg

      6、操作系統

      (後續補充……)

      7、開發相關概念

      a) ABI和API區別

      • ABI:Application Binary Interface

        • ABI描述了應用程序與OS之間的底層接口,允許編譯好的目標代碼在使用兼容ABI的系統中無需改動就能運行。

      • API:Application Programming Interface

        • API定義了源代碼和庫之間的接口,因此同樣的源代碼可以在支持這個API的任何系統中編譯。

      KGr5v8e.png

      綜上所述,它們都是所謂的應用程序接口,只是它們所描述的接口所在的層面不一樣。API往往指源代碼級別的接口,必然我們可以說POSIX是一個API標準、windows所規定的應用程序接口是一個API;而ABI是指二進制層面的接口,ABI的兼容程度比API要更爲嚴格,比如我們可以說C++的對象內存分佈(Object Memory Layout)是C++ ABI的一部分。

      b) Library fuction和System call

      • 系統調用(system call)

        • 操作系統爲用戶態運行的進程和硬件設備(如CPU、磁盤、打印機等)進行交互提供的一組接口,即就是設置在應用程序和硬件設備之間的一個接口層。可以說是操作系統留給用戶程序的一個接口。再來說一下,linux內核是單內核,結構緊湊,執行速度快,各個模塊之間是直接調用的關係。放眼望整個linux系統,從上到下依次是用戶進程->linux內核->硬件。其中系統調用接口是位於Linux內核中的,如果再稍微細分一下的話,整個linux系統從上到下可以是:用戶進程->系統調用接口->linux內核子系統->硬件,也就是說Linux內核包括了系統調用接口和內核子系統兩部分;或者從下到上可以是:物理硬件->OS內核->OS服務->應用程序,其中操作系統起到“承上啓下”的關鍵作用,向下管理物理硬件,向上爲操作系服務和應用程序提供接口,這裏的接口就是系統調用了。
          一般地,操作系統爲了考慮實現的難度和管理的方便,它只提供一少部分的系統調用,這些系統調用一般都是由C和彙編混合編寫實現的,其接口用C來定義,而具體的實現則是彙編,這樣的好處就是執行效率高,而且,極大的方便了上層調用。

      • 庫函數(Library fuction)

        • 顧名思義是把函數放到庫裏。是把一些常用到的函數編完放到一個文件裏,供別人用。別人用的時候把它所在的文件名用#include<>加到裏面就可以了。一般是放到lib文件裏的。一般是指編譯器提供的可在c源程序中調用的函數。可分爲兩類,一類是c語言標準規定的庫函數,一類是編譯器特定的庫函數。(由於版權原因,庫函數的源代碼一般是不可見的,但在頭文件中你可以看到它對外的接口)
          libc中就是一個C標準庫,裏面存放一些基本函數,這些基本函數都是被標準化了的,而且這些函數通常都是用匯編直接實現的。
          庫函數一般可以概括的分爲兩類,一類是隨着操作系統提供的,另一類是由第三方提供的。隨着系統提供的這些庫函數把系統調用進行封裝或者組合,可以實現更多的功能,這樣的庫函數能夠實現一些對內核來說比較複雜的操作。比如,read()函數根據參數,直接就能讀文件,而背後隱藏的比如文件在硬盤的哪個磁道,哪個扇區,加載到內存的哪個位置等等這些操作,程序員是不必關心的,這些操作裏面自然也包含了系統調用。而對於第三方的庫,它其實和系統庫一樣,只是它直接利用系統調用的可能性要小一些,而是利用系統提供的API接口來實現功能(API的接口是開放的)。部分Libc庫中的函數的功能的實現還是藉助了系統掉調用,比如printf的實現最終還是調用了write這樣的系統調用;而另一些則不會使用系統調用,比如strlen, strcat, memcpy等。

      JsnCDjJ.png

      實際上,系統調用所提供給用戶的是直接而純粹的高級服務,如果想要更人性化,具有更符合特定情況的功能,那麼就要我們用戶自己來定義,因此就衍生了庫函數,它把部分系統調用包裝起來,一方面把系統調用抽象了,一方面方便了用戶級的調用。系統調用和庫函數在執行的效果上很相似(當然庫函數會更符合需求),但是系統調用是運行於內核狀態;而庫函數由用戶調用,運行於用戶態。 系統調用是爲了方便使用操作系統的接口,而庫函數則是爲了人們編程的方便。 從實施者的角度,系統調用和庫函數之間有重大區別,但從用戶角度其區別並不非常重要。

      c) 用戶和內核空間

      • 用戶空間(User space)

        • 用戶程序的運行空間。爲了安全,它們是隔離的,即使用戶的程序崩潰,內核也不受影響。只能執行簡單的運算,不能直接調用系統資源,必須通過系統接口( system call),才能向內核發出指令

      • 內核空間(Kernel space)

        • 指Linux 內核的運行空間,可以執行任意命令,調用系統的一切資源

      WHv11rP.png

      8、UNIX發展史

      a) UNIX發展簡史
      1946年:世界上第一臺電腦ENIAC在美國賓夕法尼亞大學誕生,目的是用來計算炮彈彈道,重達30噸。

      1947年:BELL實驗室發明晶體管。

      1958年:TI發明集成電路。

      1969年之前,BELL實驗室、MIT、GE聯合開發Multics。

      1969年:BELL的Ken Thompson爲自己開發了Unics(這個是戲稱的非正式的名稱,因爲思想源自Multics)。 

      1971年:Intel發佈第一微處理器4004。 

      1973年:UNIX正式誕生,BELL實驗室的Dennis開發出C語言,並用C語言重寫了Unics,正式取名UNIX。 

      1977年:UNIX分支--BSD誕生,加州伯克利大學Bill Joy取得了UNIX的源代碼,加以修改和完善,成爲UNIX重要分支BSD-UNIX。之後的x86上的FreeBSD就是BSD改版而來。 

      1979年:AT&T宣佈收回UNIX版權,不再開放,同時發佈System V架構的UNIX。期間衆多公司的UNIX系統紛紛出現。 

      1979年:Intel推出8086/8088 CPU。 

      1981年:IBM發佈IBM PC,x86架構的PC機開始流行。 

      1984年:x86架構的Minix操作系統誕生。 

      1984年:Stallman啓動GNU項目,目的是開放一個自由、開源的UNIX(Free UNIX)。由於工程浩大,Stallman決定先編寫應用程序,如GCC,Emacs等出現。 

      1988年:XFree86誕生,即x86版UNIX上的GUI系統。 

      1991年:Linux誕生,Linus Torvalds發佈的運行在386機器上的內核程序。 

      2008年:Google發佈基於Linux的手機操作系統Android。

      pL9G7Ww.jpg

      b) UNIX發展史博文

      分享一篇以故事形式編寫的UNIX發展史博文。 http://www.cnblogs.com/Dodge/articles/4264833.html

      9、開源協議

      License就是版權許可證,裏面詳盡表述了你獲得代碼後擁有的權利,可以對別人的作品進行何種操作,何種操作又是被禁止的。軟件的版權許可證可有很多方式,本文僅限於討論開源軟件協議 Open Source License。 世界上的開源許可證(Open Source License)大概有上百種,而我們常用的開源軟件協議大致有GPL、BSD、MIT、Mozilla、Apache和LGPL。我們不必要每個開源協議都瞭然於心,但是可以瞭解幾個主要的協議的權利和義務。

      DZ1Peqg.png

      烏克蘭程序員Paul Bagwell,畫了一張分析圖,說明應該怎麼選擇開源協議,漢化版詳細如下:

      xq3vqGw.png

      如下更加清晰和完全一點的圖:

      VNKf5gp.png

      10、Linux哲學思想

      分享幾條大咖前輩們總結的Linux哲學思想:

      • 一切都是一個文件(包括硬件)

      • 小型,單一用途的程序

      • 鏈接程序,共同完成複雜的任務

      • 避免令人困惑的用戶界面

      • 配置數據存儲在文本中

      發表評論
      所有評論
      還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
      相關文章