1. 程式人生 > >     謝煙客-----Linux入門

     謝煙客-----Linux入門

www.mykernel.cn --------心中歷程之導師

為什麽要學習 Linux

2050年人工智能或將超越人類智商,機器人產生了自主意識,,完全取代人腦思維甚至統治人類,或許....

有人說:windows是漂亮的,Linux是智慧的、透明的。

全球TOP500超級計算機排行榜中99%都是linux內核。

任何手持智能終端設備就連電子表的底層都是Linux

你或許會認為Windows更為易用,Linux操作起來很慢,Linux入門曲線陡峭,其實當我們學會一些命令之後,一個命令所完成的事,Windows中需要幾次步驟才能完成。

基於命令行,執行速度快,工作效率高

Linux系統遵循GPL協議,屬於開源軟件,你能用任意姿勢獲取源代碼,修改源碼,學習源碼,而且Linux有自己的開源社區,能在上面開拓視野,接觸許多科學前沿的東西。

計算機的組成、虛擬機的原理、操作系統基礎


馮諾依曼體系結構


馮·諾伊曼明確提出了計算機的體系架構,1951年第一臺電子計算機EDVAC開始,計算機經歷了多次的更新換代,不管是最原始的、還是最先進的計算機,使用的仍然是馮·諾依曼最初設計的計算機體系結構。因此馮·諾依曼被世界公認為“計算機之父”,他設計的計算機系統結構,稱為“馮諾依曼體系結構”。


結構及框架

技術分享

運算器:用於完成各種算術運算、邏輯運算和數據傳送等數據加工處理。

控制器:用於控制程序的執行,是計算機的大腦。運算器和控制器組成計算機的中央處理器(CPU)。控制器根據存放在存儲器中的指令序列(程序)進行工作,並由一個程序計數器控制指令的執行。控制器控制計算器各部件的協調

存儲器:用於臨時存放程序和數據,運算器運算結果,保存的位置。例如:內存。程序和數據以二進制代碼形式不加區別地存放在存儲器中,存放位置由地址確定。

輸入設備:用於將數據或程序輸入到計算機中,例如:鼠標、鍵盤。

輸出設備:將數據或程序的處理結果輸出至指定設備,例如:顯示器、打印機。

總線的組成

數據總線

DB(Data Bus)、地址總線AB(Address Bus)和控制總線CB(Control Bus),也統稱為系統總線。

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入門