程式設計師程式設計的本質就是讓計算機去工作,而程式語言就是程式設計師與計算機溝通的介質。
程式猿用程式語言寫程式,最終開發出的就是乙個軟體。軟體必須執行在作業系統之上,而作業系統是執行於硬體之上,來控制硬體的,我們開發時,需要呼叫作業系統為我們提供控制硬體的介面。
應用程式的功能執行需要通過操作硬體之間的相互配合才能得以實現,但是應用程式不能直接操作硬體,只能通過呼叫作業系統,讓應用程式的功能通過作業系統來操作相應的硬體才能得以實現其功能。
1.cpu即**處理器, cpu從記憶體或快取中取出指令,放入指令暫存器,並對指令解碼分解成一系列的微操作,然後發出各種控制命令,執行微操作系列,從而完成一條指令的執行。
2.但是,cpu並不能直接呼叫儲存在硬碟上的系統、程式和資料,必須首先將硬碟的有關內容儲存在記憶體中,這樣才能被cpu讀取執行。因而,記憶體(即物理記憶體,是相對於硬碟這個「外存」而言)作為硬碟和cpu的「中轉站」,對電腦執行速度有較大影響。
3.當執行資料超出物理記憶體容納限度的時候,部分資料就會自行「溢位」,這時系統就會將硬碟上的部分空間模擬成記憶體——虛擬記憶體,並將暫時不執行的程式或不使用的資料存放到這部分空間之中,等待需要的時候方便及時呼叫。
4.由於記憶體是帶電儲存的(一旦斷電資料就會消失),而且容量有限,所以要長時間儲存程式或資料就需要使用硬碟(外儲存器)。硬碟也會影響系統速度,因為系統從硬碟中讀取資料並通過匯流排存入記憶體的速度也會影響系統執行的快慢。
cpu從記憶體中取指令->解碼->執行,然後再取指->解碼->執行下一條指令,周而復始,直至整個程式被執行完成。每個cpu都有一套可執行的專門指令集,任何軟體的執行最終都要轉化成cpu的指令去執行。
訪問記憶體以得到指令或資料的時間比cpu執行指令花費的時間要長得多,所以,所有cpu內部都有一些用來儲存關鍵變數和臨時資料的暫存器,這樣通常在cpu的指令集中專門提供一些指令,用來將乙個字(可以理解為資料)從記憶體調入暫存器,以及將乙個字從暫存器存入記憶體。cpu其他的指令集可以把來自暫存器、記憶體的運算元據組合,或者用兩者產生乙個結果,比如將兩個字相加並把結果存在暫存器或記憶體中。
核心態:當cpu在核心態執行時,cpu可以執行指令集中所有的指令,很明顯,所有的指令中包含了使用硬體的所有功能,(作業系統在核心態下執行,從而可以訪問整個硬體)
使用者態:使用者程式在使用者態下執行,僅僅只能執行cpu整個指令集的乙個子集,該子集中不包含操作硬體功能的部分,因此,一般情況下,在使用者態中有關i/o和記憶體保護(作業系統占用的記憶體是受保護的,不能被別的程式占用),當然,在使用者態下,將psw中的模式設定成核心態也是禁止的。
核心態與使用者態切換
使用者態下工作的軟體不能操作硬體,但是我們的軟體比如暴風影音,一定會有操作硬體的需求,比如從磁碟上讀乙個電影檔案,那就必須經歷從使用者態切換到核心態的過程,為此,使用者程式必須使用系統呼叫(system call),系統呼叫陷入核心並呼叫作業系統,trap指令把使用者態切換成核心態,並啟用作業系統從而獲得服務。
與cpu相同材質製造,與cpu一樣快,因而cpu訪問它無時延,典型容量是:在32位cpu中為32*32,在64位cpu中為64*64,在兩種情況下容量均<1kb。
主要由硬體控制快取記憶體的訪問,記憶體中有快取記憶體行按照0~64位元組為行0,64~127為行1。。。最常用的快取記憶體行放置在cpu內部或者非常接近cpu的快取記憶體中。
l2快取可以看作l1快取的緩衝器,因l1快取製造成本很高因此它的容量有限,l2快取的作用就是儲存那些cpu處理時需要用到、l1快取又無法儲存的資料。
ram-ramdom access memory(易揮發性隨機訪問儲存器)eeprom(electrically erasable prom,電可擦除可程式設計rom)和快閃儲存器(flash memory)也是非易失性的,但是與rom相反,他們可以擦除和重寫。不過重寫時花費的時間比寫入ram要多。在可攜式電子裝置中中,快閃儲存器通常作為儲存媒介。應用於數位相機、***、mp4、固態硬碟等。快閃儲存器在速度上介於ram和磁碟之間,但與磁碟不同的是,快閃儲存器擦除的次數過多,就被磨損了。優點:高速訪問,可讀可寫,讀寫時間相等
缺點:計算機關閉電源後其內的資訊將不儲存
cmos也是易失性的,許多計算機利用cmos儲存器來保持當前時間和日期。cmos儲存器和遞增時間的電路由一小塊電池驅動,所以,即使計算機沒有加電,時間也仍然可以正確地更新,除此之外cmos還可以儲存配置的引數,比如,哪乙個是啟動磁碟等,之所以採用cmos是因為它耗電非常少,一塊工廠原裝電池往往能使用若干年,但是當電池失效時,相關的配置和時間等都將丟失。
磁碟低速的原因是因為它一種機械裝置,在磁碟中有乙個或多個金屬碟片,它們以5400,7200或10800rpm(rpm =revolutions per minute 每分鐘多少轉 )的速度旋轉。磁碟的好壞,取決於它轉速的快慢。轉速越快,磁碟越好,反之不是。
每個磁頭可以讀取一段換新區域,稱為磁軌
把乙個戈丁手臂位置上所以的磁軌合起來,組成乙個柱面(虛線所組成的空心圓柱體)
每個磁軌劃成若干扇區,扇區典型的值是512位元組
機械手臂從乙個柱面隨機移動到相鄰的柱面的時間成為尋到時間,找到了磁軌就以為著招到了資料所在的那個圈圈,但是還不知道資料具體這個圓圈的具體位置
機械臂到達正確的磁軌之後還必須等待旋轉到資料所在的扇區下,這段時間成為延遲時間
許多計算機支援虛擬記憶體機制,該機制使計算機可以執行大於物理記憶體的程式,方法是將正在使用的程式放入記憶體取執行,而暫時不需要執行的程式放到磁碟的某塊地方,這塊地方成為虛擬記憶體,在linux中成為swap,這種機制的核心在於快速地對映記憶體位址,由cpu中的乙個部件負責,成為儲存器管理單元(memory management unit mmu)
ps:從乙個程式切換到另外乙個程式,成為上下文切換(context switch),快取和mmu的出現提公升了系統的效能,尤其是上下文切換
在價錢相同的情況下比硬碟擁有更高的儲存容量,雖然速度低於磁碟,但是因其大容量,在**水災火災時可移動性強等特性,常被用來做備份。(常見於大型資料庫系統中)
控制器:是查詢主機板上的一塊晶元或一組晶元(硬碟,網絡卡,音效卡等都需要插到乙個口上,這個口連的便是控制器),控制器負責控制連線的裝置,它從作業系統接收命令,比如讀硬碟資料,然後就對硬碟裝置發起讀請求來讀出內容。
控制器的功能:通常情況下對裝置的控制是非常複雜和具體的,控制器的任務就是為作業系統遮蔽這些複雜而具體的工作,提供給作業系統乙個簡單而清晰的介面
裝置本身:有相對簡單的介面且標準的,這樣大家都可以為其編寫驅動程式了。要想呼叫裝置,必須根據該介面編寫複雜而具體的程式,於是有了控制器提供裝置驅動介面給作業系統。必須把裝置驅動程式安裝到作業系統中。
北橋即pci橋:連線高速裝置
南橋即isa橋:連線慢速裝置
在計算機的主機板上有乙個基本的輸入輸出程式(basic input output system)
bios就相當於乙個小的作業系統,它有底層的i/o軟體,包括讀鍵盤,寫螢幕,進行磁碟i/o,該程式存放於一非易失性快閃儲存器ram中。
1.計算機加電
2.bios開始執行,檢測硬體:cpu、記憶體、硬碟等
3.bios讀取cmos儲存器中的引數,選擇啟動裝置
4.從啟動裝置上讀取第乙個扇區的內容(mbr主引導記錄512位元組,前446為引導資訊,後64為分割槽資訊,最後兩個為標誌位)
5.根據分割槽資訊讀入bootloader啟動裝載模組,啟動作業系統
6.然後作業系統詢問bios,以獲得配置資訊。對於每種裝置,系統會檢查其裝置驅動程式是否存在,如果沒有,系統則會要求使用者按照裝置驅動程式。一旦有了全部的裝置驅動程式,作業系統就將它們調入核心。然後初始有關的**(如程序表),穿件需要的程序,並在每個終端上啟動登入程式或gui應用程式的啟動流程。
應用軟體及程式猿編寫的n行**。
前提:作業系統執行中。
1.雙擊桌面軟體快捷方式
2.作業系統通過快捷方式定位軟體儲存位置
3.將軟體寫入記憶體,cpu通過判斷,利用作業系統去呼叫相應硬體
4.當軟體需呼叫本地檔案時,cpu會由核心態切換為使用者態
計算機硬體基礎
今天學習了計算機硬體基礎知識,總結一下。正數的原碼和反碼和補碼都一樣。負數的原碼的符號位是1,原碼變反碼符號位不變,數值位按位取反,原碼變補碼,符號位不變,數值位按位取反,再加1.補碼轉換為原碼 符號位不變,數值位按位取反,再加1。已知補碼,求原碼的負數的補碼 符號位和數值位都取反,末位再加1。各類...
計算機硬體基礎
1 python是什麼?python是一門程式語言 2 什麼是程式語言?只要是語言,那語言的本質都一樣 語言是一種事物與另外一種事物溝通的介質 程式語言是程式設計師與計算機溝通的介質 3 什麼是程式設計?程式設計指的是 程式設計師基於某種程式語言的語法格式將自己腦子中的想要讓計算機做的事寫到檔案中 ...
計算機基礎 硬體組成
計算機有硬體和軟體組成,硬體包括cpu 記憶體條 主機板 外部裝置組成 軟體 作業系統 window lunix等 和應用軟體組成 1 1 硬體簡介 cpu 計算機的核心部件,相對於人的大腦,用於邏輯處理 資料計算等 主機板 計算機的核心電路板,整合了各種插槽以及各種元器件 是計算機的框架 記憶體條...