005 | linux發展歷史-01
本文為《跟馬哥學Linux》系列文章的第五篇,上一篇文章為《Linux云計算架構師課程介紹》。
前面的內容當中呢,我們給大家簡單介紹了一下我們的課程體系,并且也描述了在IT領域當中的我們的常見的技術方面的工作崗位,會集中在兩個的的領域的那個位置,然后做了一些說明。那接下來我們會繼續相關的話題。不過,這次我們要描述的是簡單來講是計算機與操作系統,給大家做一下簡單的描述。各位都知道其實計算機誕生也很久了,在上個世紀的四十年代其實是三四十年代,電子計算機還是真空管的或者說是電子管的計算機已經出現了。而真正在ENIARC出現的時候,大概是上個世紀的四十年代,應該是誕生在美國賓夕法尼亞大學,而且那個時候整個計算機的體系結構就已經凈化到了,我以前說過五大基本部件組成,在此之前我們就講到過這五大基本部件,不知道大家號有沒有印象,我們說過計算機的五大基本部件及所謂的放諾依曼體系。五個部件分別是,CPU,其實CPU里面包含了兩個部件集成,第一個部件是運算器。他只要是做算術運算和邏輯運算等各種各樣的運算的,所以把它稱之為運算器。那第二個就是控制器,比如我們控制的總線的使用權限。我們等會改大家做一下簡要的描述,比如說沒他還需要完成尋址控制對內存當中的訪問權限是做讀訪問還是寫訪問,等等,這一切都是由CPU來完成的。另外,cpu內部其實還有大大小小眾多的寄存器,其實就是內部的存儲器,我們稱為寄存器,額外還有緩存,很多同學都聽說過,這兩個都是用來實現存儲數據的。緩存又分為了一級緩存,二級緩存,三級緩存等等,而最核心的部件無非是運算器和控制器。
接著第三個部件值得是存儲器。這個寄存器和緩存僅僅是為了加速,為了提升cpu的性能而提供的輔助性工具,比如寄存器是用來所鎖存數據的,而緩存只是用來緩存數據的所以它并不是核心部件,而是一些加速部件。存儲器也就是我們通常在口語中的內存,它被稱為RAM,也被稱為叫隨機訪問存儲器(Random Access Mem)。所以把它稱之為RAM,而存儲器和cpu結合起來組成了計算機做核心的部件,而整個計算機也是圍繞著這三大部件,運算器,控制器和存儲器就能夠展開的并完成所有操作。
不過除了他們之外我們說過還有另外兩個部件,而這兩個部件僅僅是讓計算機能夠按需,按人類自身的需求完成數據加工的組件,第一個我們稱為Input設備,另一個是Output設備,所以稱為輸入輸出設備,輸入輸出就跟我們之前舉例子說過的,想那個洗衣機一樣的道理。我們為了能讓洗衣機洗衣服,他必須給我們一個接口能夠讓我們把衣服塞進去所以這叫輸入設備,同樣的衣服寫完了我們還必須要把他取回來,所以這就叫輸出設備,計算機對這個輸入輸出通常只是Input向計算機下指令,告訴他需要做什么,叫下指令。以及并提供需要加工的數據等相關的操作的,而output呢,通常就是將對方計算結果輸出,所以就是輸出數據加工后的結果。大體上就是這個樣子完成這幾個操作,所以我們說CPU和存儲器才是最核心的部件。
但是各位又有一個問題了,我們計算機是如何能夠從存儲器中取得數據呢?簡單的講,其實在馮諾依曼體系中,也定義了另外一個概念,叫做程序,是由指令加數據組成我們此前也提到過很多次,指令就是指計算機需要操作的命令,比如我們做加法做減法等這種叫做指令,當然我們從內存的某個位置取得數據也叫做指令,但是數據本身則是被加工的內容,另外,程序還可以分為另外兩種方式,后面我們講到shell變成是可能更容易理解。程序也是由所謂叫算法加數據結構組成,什么叫算法能?同樣的道理,我們從下載的位置走到天安門廣場肯定有N多條路徑可以到達,所以我們要計算出,哪一種方式對我們是代價最低的。我們就走這條路徑。那問題是我們要現在走到廣場,我們算出來說乘坐直升機是最快的,而且代價呀不是很高是能接受的,問題是我們能夠完成打飛的將你運過去,這個飛的應該具有這樣的組成格式呢?最起碼要運載一個人,如果要是一個簡單的無人機的話,壓根是承載不了一個人,很顯然這種操作我們是無法執行的。所以,數據就夠則是用于表明這種指令這種算法本身,他們要完成數據加工,我們如何將數據放置到可放置數據的位置,以及按照哪種格式進行組織,人們發現無人機也能將人運過去比如將人切成沒一公斤一塊能運過去,這也是一種數據結構,所以說,不同的算法通常而言需要對應不同的數據結構。不同的算法對于不同的數據結構來說是有很密切的關系的有些數據結構用A算法效率較好,有些數據結構用B算法效率較好,就像剛剛給大家描述的那樣。所以說程序是由指令加數據組成,指令怎么跑,對于計算機來講cpu就是跑程序的或者說是跑指令的。
而cpu又有運算器和控制器組成,我么你將兩者給劃分開,給大家描述一下。假如說做左側是運算器,右側是控制器,
然后底下再加上存儲器里面有數據告訴cpu做加法運算,
于是,cpu上一定有一個指令是在cpu芯片設計時其內生在硬件邏輯上要支持加法運算,不支持則無法運算,所以這個就是cpu自己支持的指令,而cpu能夠做加法減法乘法除法運算等,那么所有的指令結合起來,對cpu而言就叫做指令集,即所有能夠執行的指令的集合。指令集大體上有分為兩類,一類叫做不同指令,一類叫做特權指令,普通指令就是算一算一加一等于幾,他的操作幾乎時對其他人時沒有影響的,但是如果告訴你把內存清空,大家應該明白,所有的數據都在內存中,如果把內存清空就意味著也把其他人的數據清空,這個時候有可能危及到其他人的。
比如說,來一顆原子彈往東京扔過去,這實際上是影響到別人的,何種操作時不被允許的,但是要是在西伯利亞那個萬里無人區扔一顆問題不大,是可以做核試驗的,所以希望各位理解指令集操作的概念。好的,同樣的道理,對于這的存儲運算器來講他是有各種各樣的指令的,控制器也有各種各樣的指令,不過運算器通常只是做運算,而控制器這是控制這幾個部件來協調也包括尋址操作。來個大家簡單描述一下存儲器跟他們彼此之間時如何結合的。
比如要做加法運算,問題是幾加幾,誰加誰,數據時在什么地方存放的呢,指令是cpu自己支持的,那我們要算的數據在什么地方,加工點對象在什么地方一般來講這就需要到存儲器來存儲數據了,而我們看到的就是那個內存設備,而再其內部是劃分成各個存儲單元的,每一個單元加入叫做一個存儲細胞,每一個sell的大小是固定的,而在歷史上各種各樣說不清道不明的原因,每一個sell的大小是8位,
自此之前的預科學前班當中各位知道,我們的計算機是按位以二進制的方式來存儲的,8位指的就是8位二進制,最高只能存8個二進制數字就是0,1當中的任何一種變化形式。每8位組成一個sell一個存儲單元,這每一個sell所提供的存儲單元通常稱為一個字節叫做一個Byte。把他分為大B和小b的概念,小b通常是bit是位,而大B指的是Byte這個Byte指的是8位二進制,這每一個存儲單元都是由8位二進制組成注意我們對內存而言最小的存儲單位就是字節不能再小了,哪怕是存儲一位數據也是占用一個字節,另外7位只不過是空的,對你來講沒有用,所以大家一定要是知道最小尋出單元指的是什么。就像你買東西一樣,對方說按斤起買,少了不賣這其實就是最小存儲單位。
問題是,我們有這么多個存儲單元格子,我們想訪問數據時,我們要訪問區計算第8個sell和第3個sell之間兩個數字之間的和,問題是我們怎么能夠知道第8個格子在什么地方,第3個格子在什么地方,對我們人而言很容易理解,比如說對于北京市來將他又某個路,某某單元,某某號,某某棟等等來進行編制的。這每一個位都可以住人,所以可以理解位人就是一個數據。就是組織在這樣一個對應的能夠存儲人類的地方的房子,這樣就稱為存儲格子。那么為了每一個格子能方便的找到,所以我們給他做了編制內存也是一樣的道理,相信各位也容易理解。內存當中的每一個sell都是有地址的,而對于計算機來講他們叫電子數字計算機,所以他們更容易理解的時數字而不是字符串,不像現實生活中我們叫北京市,比如某某胡同,某某巷。某某街,某某號之類的,
這兒統統按照數字進行編制,而且數字編制時我們必須能夠在一個平面下編制完成才行,什么叫做一個平面下,比如對于一個北京市而言,北京市一號,北京市二號,北京市三號,問題是大家想想我說北京市一號,你知道北京市一號在什么嗎?我們就無從得知了,所以說我們有一個或者說為了讓我們知道有一種特定的邏輯性編碼,從南向北,橫過去一排,橫過去的時候我們就自東向西然后開始編12345678……那這樣子就編譯在了一個平面下,而天安門可能就是北京市第100號,因為人們幣最大也差不過100,所以就給他是北京市100號,我只是舉個例子這樣說明,這種就叫做一個平面單元。在一個平面單元下我們能編多少呢,假如說我們只有3000號,如果說我們北京有了3001號,那號怎么辦呢,在我們的戶口部上就沒他了。我們無法找到他,這就溢出了,但不管怎么講,剛剛我們描述的這種就是平面編制,我們發現,編碼不方便,查找也不方便于是我們可以把他劃分成N層的立體編制方式,比如北京市海淀區,朝陽區,像這樣就是一個立體編制方式了我們從一個大空間縮小到了若干個小空間,小空間還可以在此縮小空間。但是內存不能,內存的便是方式是一個在平面結構下進行編制的,他的編制方式必須能夠容納所有的內存空間才可以,而歷史上有說不清道不明的原因,cpu有字長的概念,比如有8位cpu,16位cpu,32位cpu,而現在更多的是64位cpu,你知道這個位是什么概念?巷32位的cpu指的就是,我簡單的來講,就是他的詩句存取能力一次是32位二進制你可以想象成在32位cpu之前有32并排的跟線,每一根線對于計算機來講無非就是通電不通電,有電壓無電壓,所以用來表示有電壓表示1無電壓表示0。
因此有32根線沒跟線只有兩種狀態,就是0或1.,大家可以想象一下,有32根線能表示多少不同的變化呢?在高中的時候,我們學過排列組合的概念。每一根只有兩種變化,一共有32根線組合起來有多少種變化呢2的32次方種變化,所以這個cpu最多只能引用2的32次方的不同的位置,對于32位的cpu來講他最多只能理解2的32次方的sell大概是40多億個。
2的10次方是1024。2的10次方做10進制換算2的10次方=1024,2的32次方就等于1024乘以1024再乘以1024在再乘4.本來默認一個最小存儲單元是字節所以結果就成了把他做一次向上進制所以KB指的是1024個Bytes所以就相當于1024再乘以1024在再乘4.個KB那再來一個1024就是MB了所以將這個單位換算成一個1024乘以4個MB。M和G之間又相差一個1024所以就成了4個GB,所以K在計算機術語當中表示1024為單位進行進制的,
而在十進制中k是以1000為進制的,所以現實生活當中我們買U盤也是這個道理。生產廠商是以1000為進制單位的而計算機識別是以1024為進制單位的所以買了一個32g的U盤一格式化發現只有29點多G,而是無良廠商使用了和計算機不一樣的進制來描述的。所以32位的cpu最多可以使用4g的內存。所以這里的每一個內存單元,都是使用了32位的二進制對32位的主機來講進行標識的你如第一個那就是前面是31個0或者說全是0所以用32個0,標識第一個存儲單元,01標識后面的單元,10標識后一個單元……
所以是在同一個平面下進行編制的,因此所有的內存包括我們手機上的那個內存也是基于這種方式來定義的。因此計算機運行程序是怎么運行的呢。什么叫指令加數據,對于計算機來講,他能夠運行指令加數據,我剛剛說過,程序是有程序員變寫的程序員寫好的程序應該放哪啊,通常是放在外部設備上的,寫好的程序要做永久存儲會放在硬盤上因此這個程序要想能夠運行就必須首先裝載到內存中因為cpu只能跟內存打交道不可能跟硬盤直接打交道所以所有內存都應該先裝入內存,硬盤其實是一個IO設備。