linux操作系統基礎知識
1.操作系統總體介紹
?CPU: 就像人的大腦,主要負責相關事情的判斷以及實際處理的機制。
查詢指令: cat /proc/cpuinfo
?內存: 大腦中的記憶區塊,將皮膚、眼睛等所收集到的信息記錄起來的地方,以供CPU進行判斷。查詢指令: cat /proc/meminfo
物理內存
物理內存,就是我們將內存條插在主板內存槽上的內存條的容量的大小。看計算機配置的時候,主要看的就是這個物理內存
虛擬內存
Windows中運用了虛擬內存技術,即拿出一部分硬盤空間來充當內存使用,當內存占用完時,電腦就會自動調用硬盤來充當內存,以緩解內存的緊張。
關系:windows中虛擬內存和物理內存可能都會被使用,linux中,只有物理內存使用完了,才會使用虛擬內存
?硬盤: 大腦中的記憶區塊,將重要的數據記錄起來,以便未來再次使用這些數據。
查詢指令: fdisk -l (需要root權限)
2.內存和硬盤的關系
具體命令后面會介紹
3.操作系統監控命令》單獨寫一份
?vmstat
?sar
?iostat
?top
?free
?uptime
?netstat
?ps
?strace
?lsof
4.如何分析操作系統
實際流程: 讀數據》數據》硬盤》虛擬內存(swaP)》內存》cpu緩存》執行隊列
分析方向,正好相反
4.各個部分常出現的漏洞
?CPU: 容易出現該類瓶頸的郵件服務器、動態web服務器
?內存: 容易出現該類瓶頸的打印服務器、數據庫服務器、靜態web服務器
?磁盤I/O: 頻繁讀寫操作的項目
5.Linux本身的一些優化
1. 系統安裝優化
當安裝linux系統時,磁盤劃分、 SWAP內存的分配都直接影響系統性能。對于虛擬內存SWAP的設定,現在已經沒有了所謂虛擬內存是物理內存兩倍的要求,但是根據經驗,如果內存較小(物理內存小于4GB),一般設置SWAP交換分區大小為內存的2倍;如果物理內存大約4GB小于16GB,可以設置SWAP大小等于或者略小于物理內存即可;如果內存在16GB以上,原則上可以設置SWAP為0,但最好設置一定大小的SWAP
? 2. 內核參數優化
例如,如果系統部署的oracle數據庫應用,那么就需要對系統共享內存段( kernel.shmmax, kenerl.shmmni, kernel.shmall)、
系統信號量( kernel.sem)、文件句柄( fs.file0max)等參數進行優化設置;如果部署的WEB應用,那么就需要根據web應用特性進行網絡參數的優化,例如修改net.ipv4.ip_local_port_range、net.ipv4.tc_tw_reuse、 net.core.somaxconn等網絡
內核參數
? 3. 文件系統優化
在linux下可選的文件系統有ext2,、 ext3、 xfs、 ReiserFS
linux標準文件系統是從VFS開始,然后ext、 ext2, ext2是linux上的標準文件系統, ext3是在ext2基礎上增加日志形成的。從VFS到ext3,設計思想沒有太大變化,都是早期UNIX家族基于超級塊和inode的設計理念設計而成。XFS文件系統是SGI開發的一個高級日志文件系統,通過分布處理磁盤請求、定位數據、保持cache的一致性來提供對文件系統數據的低延遲、高帶寬的訪問,因此XFS極具伸縮性,非常健壯,具有優秀的日志記錄功能、可擴展性強、快速寫入等優點。ReiserFS在Hans Reiser領導下開發出來的一款高性能的日志文件系統,通過完全平衡樹來管理數據,包括文件數據、文件名及日志支持等。與ext2、 ext3相比,最大的優點是訪問性能和安全性大幅提升。具有高效、合理利用磁盤空間,先將的日志管理機制,特意的搜尋方式,海量磁盤存儲等優點
5.重點知識
物理內存和虛擬內存
1.如何查看物理內存和虛擬內存?
Top 命令可以查看物理內存和虛擬內存的數值
2.Buffer
是硬盤控制器上的一塊內存芯片,具有極快的存取速度,它是硬盤內部存儲和外界接口之間的緩沖器。由于硬盤的內部數據傳輸速度和外界介面傳輸速度不同,緩存在其中起到一個緩沖的作用。緩存的大小與速度是直接關系到硬盤的傳輸速度的重要因素,能夠大幅度地提高硬盤整體性能。
3.Cache
CPU緩存(Cache Memory)是位于CPU與內存之間的臨時存儲器,它的容量比內存小的多但是交換速度卻比內存要快得多。緩存的出現主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,因為CPU運算速度要比內存讀寫速度快很多,這樣會使CPU花費很長時間等待數據到來或把數據寫入內存。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度
4.CPU中斷
當CPU執行完一條現行指令時,如果外設向CPU發出中斷請求,那么CPU在滿足響應的情況下,將發出中斷響應信號,與此同時關閉中斷,表示CPU不在受理另外一個設備的中斷。這時,CPU將尋找中斷請求源是哪一個設備,并保存CPU自己的程序計數器(PC)的內容。然后,他將轉移到處理該中斷源的中斷服務程序。CPU在保存現場信息,設備服務(如交換數據)以后,將恢復現場信息。在這些動作完成以后,開放中斷,并返回到原來被中斷的主程序的下一條指令。
5.上下文切換
上下文切換(Context Switch) 或者環境切換
多任務系統中,上下文切換是指CPU的控制權由運行任務轉移到另外一個就緒任務時所發生的事件。
在操作系統中,CPU切換到另一個進程需要保存當前進程的狀態并恢復另一個進程的狀態:當前運行任務轉為就緒(或者掛起、刪除)狀態,另一個被選定的就緒任務成為當前任務。上下文切換包括保存當前任務的運行環境,恢復將要運行任務的運行環境。
進程上下文用進程的PCB(進程控制塊,也稱為PCB,即任務控制塊)表示,它包括進程狀態,CPU寄存器的值等。
通常通過執行一個狀態保存來保存CPU當前狀態,然后執行一個狀態恢復重新開始運行。
上下文切換會對性能造成負面影響。然而,一些上下文切換相對其他切換而言更加昂貴;其中一個更昂貴的上下文切換是跨核上下文切換(Cross-Core Context Switch)。一個線程可以運行在一個專用處理器上,也可以跨處理器。由單個處理器服務的線程都有處理器關聯(Processor Affinity),這樣會更加有效。在另一個處理器內核搶占和調度線程會引起緩存丟失,作為緩存丟失和過度上下文切換的結果要訪問本地內存。總之,這稱為“跨核上下文切換”。
6.進程和線程
進程概念
進程是表示資源分配的基本單位,又是調度運行的基本單位。例如,用戶運行自己的程序,系統就創建一個進程,并為它分配資源,包括各種表格、內存空間、磁盤空間、I/O設備等。然后,把該進程放人進程的就緒隊列。進程調度程序選中它,為它分配CPU以及其它有關資源,該進程才真正運行。所以,進程是系統中的并發執行的單位。
線程概念
線程是進程中執行運算的最小單位,亦即執行處理機調度的基本單位。如果把進程理解為在邏輯上操作系統所完成的任務,那么線程表示完成該任務的許多可能的子任務之一
進程和線程的關系
(1)一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。 (2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。
(3)處理機分給線程,即真正在處理機上運行的是線程。
(4)線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
注意:
1.Linux是大小寫敏感的系統,舉個例子,Mozilla, MOZILLA, mOzilla和 mozilla是四個不同的命令(但是只有第四個mozilla是真正有效的命令)。還有,my_filE, my_file,和 my_FILE是三個不同的文件。用戶的登錄名和秘密也是大小寫敏感的(這是因為UNIX系統和C語言的傳統一向是大小寫敏感所致)。
2.文件名最多可以有256個字符,可以包含數字,點號”。”,下劃線”_”,橫桿”-”,加上其他一些不被建議使用的字符。
3.文件名前面帶”。”的文件在輸入”ls”或者”dir” 命令時一般不顯示。可以把這些文件看作是隱含文件,當然你也可以使用命令”ls –a”來顯示這些文件。
4.“/”對等于DOS下的”\”(根目錄,意味著所有其他目錄的父目錄,或者是在目錄之間和目錄和文件之間的一個間隔符號)。舉個例子,cd /usr/doc。
5.在Linux系統下,所有的目錄顯示在單一目錄樹下(有別于DOS系統的驅動器標識)。這意味著所有的物理設備上的所有文件和目錄都合并在單一的目錄樹下。
6.在配置文件里,以#打頭的行是注釋行。在修改配置文件的時候盡量不要刪除舊的設置――可以把原來的設置加上”#”變成注釋行,總是在修改地方對應地加入一些關于修改的注釋,你會發覺在以后的管理中獲益多多。
7.Linux是繼承性的多用戶操作系統。你的個人設定(和其他用戶的個人設定)放在你的主目錄下(一般是/home/your_user_login_name)。許多的配置文件的文件名都以”。”開頭,這樣用戶一般看不到這些文件。
8.整個系統范圍的設定一般放在目錄/etc下。
9.和其他的多用戶操作系統類似,在Linux下,文件和目錄有自己的擁有者和訪問權限。一般來說,你只被允許文件到你的主目錄下(/home/your_user_login_name)。學習一些關于文件權限管理的相關知識,否則你肯定會覺得Linux實在很麻煩。
10.命令參數選項一般由”-”引導,后面跟一個字符(或者”--“,當選項超過一個字符時)。這樣,”-”有點象DOS下的”/”。舉個例子,輸入命令 rm --help。
.Linux系統由哪幾部分組成?Linux內核處于什么位置?
A:
1)Linux系統由四個部分組成:用戶進程,系統調用接口、Linux內核子系統和硬件;
2)Linux內核處于用戶進程和硬件之間,包括系統調用接口和Linux內核子系統。
Q3.Linux內核由哪幾部分組成?各個子系統的主要功能是什么?
A:
(1)Linux內核除系統調用外,由五個主要的子系統組成:進程調度、內存管理、虛擬文件系統、網絡和進程間通信(IPC);
(2)各個子系統的主要功能為:
1)進程調度:它控制著進程對CPU的訪問,當需要選擇一個進程開始運行時,由調度程序選擇最應該運行的進程;
2)內存管理:它允許多個進程安全地共享主內存區域,支持虛擬內存;從邏輯上可以分為硬件無關的部分和硬件相關的部分;
3)虛擬文件系統(VFS):它隱藏了各種不同硬件的具體細節,為所有設備提供統一的接口,支持多達數十種不同的文件系統,分為邏輯文件系統和設備驅動程序;
4)網絡:它提供了對各種網絡標準協議的存取和各種網絡硬件的支持,分為網絡協議和網絡驅動程序兩部分;
5)進程間通信:支持進程間各種通信機制,包括共享內存、消息隊列和管道等。
內存尋址
Q1.什么是物理地址?什么是虛地址?什么是線性地址?
A:
1)將主板上的物理內存條所提供的內存空間定義為物理內存空間,其中每個內存單元的實際地址就是物理地址;
2)將應用程序員看到的內存空間定義為虛擬地址空間(或地址空間),其中的地址就叫做虛擬地址(或虛地址),一般用“段:偏移量”的形式來描述,如A815:CF2D;
3)線性地址空間是指一段連續的、不分段的、范圍為0~4GB的地址空間,一個線性地址就是線性地址空間的一個絕對地址。
Q2.在保護模式下,MMU如何把一個虛地址轉換為物理地址?
A:
在保護模式下,內存管理單元(MMU)由一個或一組芯片組成,其功能是指虛擬地址映射為物理地址,即進行地址轉換;MMU是一種硬件電路,它包含分段部件和分頁部件兩個部件,分別叫做分段機制和分頁機制,分段機制是把一個虛擬地址轉換為線性地址,分頁機制是把一個線性地址轉換為物理地址。
.Linux內核的狀態有哪些?
A:
1)Linux最基本的進程狀態有三種:運行態、就緒態和阻塞態(或等待態);這三種狀態之間有四種可能的轉換關系:運行態-》阻塞態、運行態-》就緒態、就緒態-》運行態和阻塞態-》就緒態;
2)為了管理上的方便,將就緒態和運行態合并為一個狀態—可運行態,再包括其它方面的一些改變,將進程狀態劃分為:可運行態、睡眠(或等待)態(分為深度睡眠態和淺度睡眠態)、暫停狀態和僵死狀態。
1.Linux目錄樹結構是怎樣的?它與Windows的目錄樹結構有什么區別?為什么Linux的文件系統采用固定的目錄形式?
A:
文件是一個抽象的概念,它是存放一切數據或信息的倉庫;
1)Linux的目錄樹結構為:根目錄(/)在上,其它的平行在下;
2)Windows操作系統也是采用樹型結構,但其樹型結構的根是磁盤分區的盤符,有幾個分區就有幾個樹型結構,它們之間的關系式并列的;而在Linux中,無論操作系統管理幾個磁盤分區,這樣的目錄樹只有一個;
3)這樣做的原因是:Linux是一個多用戶系統,制定這樣一個固定的目錄規劃有助于對系統文件和不同的用戶文件進行統一管理;
4)Linux中的文件類型包括:常規文件、目錄文件、設備文件、管道文件和鏈接文件。
linux操作系統的優勢
1、免費開源。Linux是一款完全免費的操作系統,任何人都可以從網絡上下載到它的源代碼,并可以根據自己的需求進行定制化的開發,而且沒有版權限制。
2、模塊化程度高。Linux的內核設計分成進程管理、內存管理、進程間通信、虛擬文件系統、網絡5部分,其采用的模塊機制使得用戶可以根據實際需要,在內核中插入或移走模塊,這使得內核可以被高度的剪裁定制,以方便在不同的場景下使用。
3、Linux系統廣泛的硬件支持。得益于其免費開源的特點,有大批程序員不斷地向Linux社區提供代碼,使得Linux有著異常豐富的設備驅動資源,對主流硬件的支持極好,而且幾乎能運行在所有流行的處理器上。
4、安全穩定。Linux采取了很多安全技術措施,包括讀寫權限控制、帶保護的子系統、審計跟蹤、核心授權等,這為網絡環境中的用戶提供了安全保障。實際上有很多運行Linux的服務器可以持續運行長達數年而無須重啟,依然可以性能良好地提供服務,其安全穩定性已經在各個領域得到了廣泛的證實。
5、多用戶,多任務。多用戶是指系統資源可以同時被不同的用戶使用,每個用戶對自己的資源有特定的權限,互不影響。多任務是現代化計算機的主要特點,指的是計算機能同時運行多個程序,且程序之間彼此獨立,Linux內核負責調度每個進程,使之平等地訪問處理器。由于CPU處理速度極快,從用戶的角度來看所有的進程好像在并行運行。
6、良好的可移植性。Linux中95%以上的代碼都是用C語言編寫的,由于C語言是一種機器無關的高級語言,是可移植的,因此Linux系統也是可移植的。
責任編輯:YYX
評論