謝煙客-----Linux入門
為什麽要學習 Linux
2050年人工智能或將超越人類智商,機器人產生了自主意識,,完全取代人腦思維甚至統治人類,或許....
有人說:windows是漂亮的,Linux是智慧的、透明的。
全球TOP500超級計算機排行榜中99%都是linux內核。
任何手持智能終端設備就連電子表的底層都是Linux
你或許會認為Windows更為易用,Linux操作起來很慢,Linux入門曲線陡峭,其實當我們學會一些命令之後,一個命令所完成的事,Windows中需要幾次步驟才能完成。
基於命令行,執行速度快,工作效率高
Linux系統遵循GPL協議,屬於開源軟件,你能用任意姿勢獲取源代碼,修改源碼,學習源碼,而且Linux有自己的開源社區,能在上面開拓視野,接觸許多科學前沿的東西。
計算機的組成、虛擬機的原理、操作系統基礎
馮諾依曼體系結構
馮·諾伊曼明確提出了計算機的體系架構,從1951年第一臺電子計算機EDVAC開始,計算機經歷了多次的更新換代,不管是最原始的、還是最先進的計算機,使用的仍然是馮·諾依曼最初設計的計算機體系結構。因此馮·諾依曼被世界公認為“計算機之父”,他設計的計算機系統結構,稱為“馮諾依曼體系結構”。
結構及框架
運算器:用於完成各種算術運算、邏輯運算和數據傳送等數據加工處理。
控制器:用於控制程序的執行,是計算機的大腦。運算器和控制器組成計算機的中央處理器(CPU)。控制器根據存放在存儲器中的指令序列(程序)進行工作,並由一個程序計數器控制指令的執行。控制器控制計算器各部件的協調。
存儲器:用於臨時存放程序和數據,運算器運算結果,保存的位置。例如:內存。程序和數據以二進制代碼形式不加區別地存放在存儲器中,存放位置由地址確定。
輸入設備:用於將數據或程序輸入到計算機中,例如:鼠標、鍵盤。
輸出設備:將數據或程序的處理結果輸出至指定設備,例如:顯示器、打印機。
總線的組成
數據總線
DB 用於數據交換的總線
AB 用來傳送地址的總線,地址總線的位數決定了CPU可直接尋址的內存空間大小,一般說來,若地址總線為n位,則可尋址空間為2^n字節。
CB 傳送控制信號和時序信號。有的是微處理器送往存儲器和I/O接口電路,也有是其它部件反饋給CPU的,控制總線的傳送方向由具體控制信號而定,(信息)一般是雙向的,控制總線的位數要根據系統的實際控制需要而定。實際上控制總線的具體情況主要取決於CPU。
前端總線(FSB)是將CPU連接到北橋芯片的總線,前端總線(FSB)頻率(即總線頻率)是直接影響CPU與內存直接數據交換速度。
緩存
cpu 4GHZ 內存 1600/1800MHZ,(單位換算:1GHZ=1000MHZ)內存大約1.56GHZ,CPU的速度遠遠超過內存的速度,由短板理論終的速度為內存的速度。
緩存以CPU頻率工作,價格高,所以很小。
主要意義:
時間局部性 當某個數據被訪問過一次之後,過不了多久時間就會被再一次訪問。緩存對此數據緩存
空間局部性 CPU在某一時刻需要某個數據,那麽很可能下一步就需要其附近的數據;緩存將對附近的資源緩存
硬盤
固態硬盤
在不同的分區的讀取速度一致
機械硬盤
盤片(disk):硬盤中承載數據存儲的介質。兩面讀寫
磁頭(head):通過磁性原理讀取磁性介質上數據的部件。
磁道(tracle):當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁盤表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道。
扇區(sector):磁盤上的每個磁道被等分為若幹個弧段,這些弧段便是磁盤的扇區。硬盤的讀寫以扇區為基本單位
分區:由外向內按柱面劃分,外道長:固定角速度,單位時間內劃動的距離越長
C在外道,單位時間內,讀取的數據越多
D在較內道,單位時間內,讀取的數據越少
虛擬機的原理
虛擬機的框架:
vmware程序:虛擬出多個虛擬的計算機(CPU+內存+硬盤)
虛擬CPU
切割CPU時間片
cpu將時間片切割,使各個程序從表面上看是同時進行的。在微觀上:每幾個毫秒思考一件事,時間用完如果進程仍在執行,就記錄進程的狀態,連續運行後面的進程。
內存:有限內存切割後,分配給不同程序使用
線性地址空間:假設每個程序有4G內存可用,實際只有自己占據的大小
進程地址空間: 將內存上不連續的內存頁在邏輯上映射為一段連續的空間
I/O設備:模擬器實現:動態分配大小
操作系統的基礎
CPU: 晶體管 10-20nm 45nm工藝 門電路 邏輯運算/算術、邏輯運算,芯片、多個針腳,每個針腳有不同的功能、完成不同的運算。調用針腳即可完成運算,調用CPU針腳完成運算:機器語言
CPU針腳的功能即為CPU的指令,CPU多個指令叫指令集
指令的分類:普通指令、特權指令
普通指令:普通用戶僅能在環3上運行,如果要用到環0的指令,就需要向內核申請,即為發起系統調用
特權指令:僅管理員可運行的指令,用於管理功能。
CPU常見平臺:
IBM(power)
SUN (ultrasparc)--> Oracle
惠普 (alpha)(安騰)dec-康白-惠普
Intel (x86,X86_64) 向下兼容
AMD (amd64)
ARM Intel只設計,不生產。三星,高通生產
Andorid (linux)
IOS (UNIX)
摩托摩拉 (手持 m68k,服務器 m68k nommu)
蘋果,IBM,摩托摩拉 (powerpc,早期的強悍的CPU)
天河二號:大堆CPU拼湊而成
面向硬件寫程序所用的語言:
機器語言過於底層。每個芯片生產完成時,附帶一套略微高級的接口(微碼編程接口,匯編語言),比較底層,寫大型程序困難。高級語言(c,c++)
低級和高級語言所寫的程序的區別:
低級語言:匯編語言,計算機容易理解的語言,運行起來的性能更好
高級語言:c,java,python,...,計算機不易理解的語言,運行起來性能差
由於是面向硬件寫程序,考慮CPU平臺,內存分配,...諸多問題。研發出操作系統:
目的: 消除底層差異,程序員面向硬件寫程序不用考慮各種硬件相關的問題
功能: 抽象計算機的計算能力為統一的接口,將底層硬件功能封裝為系統調用(syscall),協調進程占用內存資源與CPU時間的分配。
作用:
硬件驅動:硬件工作起來
進程管理:CPU時間片切割和CPU的計算能力分配給不同的程序
內存管理:將有限的內存資源分配給多個同時運行的程序
網絡管理:與其他主機通過網絡通信
安全管理
寫程序面向的對象和語言
硬件規格: 機器語言、匯編語言、高級語言,考慮CPU平臺,內存分配,...諸多問題
系統調用: 高級語言,system call 將底層硬件規格抽象為syscall,保證syscall少,庫也比較底層
庫調用: 高級語言,面向 syscall 封裝的庫 ,將底層庫抽象出的庫(c)
用形象化的思維:
面向硬件:給你的是"麥種",要想吃饅頭,經過的步驟: 翻地、播種、澆水、施肥、收割、磨面、做包子、蒸饅頭。
面向系統調用:給你的是面粉,
面向庫調用: 給你你的是饅頭,
越高層,寫程序越容易,選擇更多樣。
越低層,寫程序越難,選擇更少。
註意:寫出的程序為源碼程序
程序運行前的步驟:
源碼程序--> 編譯 --> 匯編 --> 二進制指令(能調用對應CPU平臺的針腳,不同系統有不同的格式)
二進制指令如何運行:
由操作系統分配資源,讓程序占據CPU時間片和內存資源
指令:被操作系統調度至CPU上,二進制指令能調用CPU上的某個指令(針腳),完成某些功能
用戶接口
跟操作系統交互的程序,稱之為"用戶接口":指揮其他程序的運行
windows: 桌面
Linux: UI
GUI:Graphic User Interface,程序:Gnome,XFCE,KDE
CLI: Command Line Interface,程序: sh,csh,ksh,zsh,bash
在不同的系統之上寫的程序(源碼)
ABI Application Binary Interface: 源碼制作成二進制的格式(可執行文件的格式),運行接口,應用二進制格式。終端用戶面向的接口。
API Application Program Interface: 寫程序面向的對象,應用編程接口,程序員面對的接口
ABI不能兼容:
不同操作系統上的程序,制作成二進制後,不能兼容,(轉換為對應平臺調用CPU針腳的指令,不同CPU廠商生產的CPU針腳不同,所以程序調用的針腳不同)
API不能兼容:
寫程序面向的對象不同,不同操作系統提供的systemcall,libcall接口不同。一個系統上寫的程序,不能在另一個系統之上編譯~~~
API兼容:
寫程序面向的對象不同,但是提供的Systemcall,libcall接口能夠兼容(底層針腳不同,但是經過操作系統抽象硬件功能為兼容的接口,所寫的程序在源碼級別兼容,這就是遵循‘POSIX‘規範。一個系統上寫的程序,能在另一個系統之上編譯~~~,編譯後只能在對應平臺運行,不能跨平臺運行,ABI不同。
操作系統的定義:
廣義:windows系統,我們所指的是用戶接口(windows桌面、Linux bash)和內核
狹義:內核
本文出自 “Reading” 博客,請務必保留此出處http://sonlich.blog.51cto.com/12825953/1951699
謝煙客-----Linux入門