操作系统相关内容
計算機的五大組成部分:控制器、運算器(arithmetic and logic unit,算術(shù)邏輯單元)、存儲器(包含內(nèi)存和硬盤)、輸入和輸出設(shè)備。三大核心組件:CPU、內(nèi)存和硬盤。
1. 進程和線程
1.1 進程是資源分配的最小單位,而線程是CPU調(diào)度的最小單位;
1.2 一個進程可以有多個線程,而線程只能屬于一個進程;
1.3 進程創(chuàng)建、銷毀以及進程間切換比線程的創(chuàng)建、銷毀和切換有更大的開銷;進程的切換,頁表目錄和虛擬內(nèi)存空間都需要更換,而且緩存的地址轉(zhuǎn)換結(jié)果都會失效。但線程的切換,不需要更換頁表目錄和虛擬內(nèi)存空間,因為它們屬于同一個進程,共享進程的資源。線程的切換僅僅需要保存程序計數(shù)器和寄存器相關(guān)的內(nèi)容。
1.4 因為同一進程的所有線程共享該進程的資源,所以線程間通信較為簡單:常用的方式有鎖機制、volatile修飾的變量、wait/notify的使用;而進程間通信(Inter-Process Communication)較為復雜,常用的方式有:管道、消息隊列、共享內(nèi)存、本地套接字、信號量(互斥同步的一種手段)。
1.4.1 管道:百度百科以及一些博客說管道是半雙工的,但只能在一個方向上傳遞消息。我們都知道,單工是只能在一個方向傳遞消息,半雙工不能同時雙向傳輸,但是可以錯開地在兩個方向傳輸數(shù)據(jù)。所以管道到底是單工還是半雙工的呢?管道只能在一個方向傳遞消息是指某個時刻只能在一個方向傳遞消息嗎?
1.4.2 消息隊列:存放在內(nèi)核中,可以傳遞較大的數(shù)據(jù)量。
1.4.3 共享內(nèi)存:由一個進程創(chuàng)建的一段能被其它進程所訪問的內(nèi)存,是進程間通信最快的一種方式。
1.4.4 本地套接字:類似于網(wǎng)絡(luò)套接字的一種通信方式。
1.4.5 信號量:不以傳輸數(shù)據(jù)為目的,主要是保護共享資源,使進程間互斥。工作原理:主要是進行P、V操作,然后信號量初始值為1。進行P操作時,判斷信號量的值是否大于0,如果大于0,進程可正常操作并將信號量的值減1;如果信號量的值為0,當前進程則掛起。進行V操作時,判斷是否有進程被掛起,如果有,那么喚醒一個進程;如果沒有,將信號量加1。
2. 存儲器
2.1 存儲器包含三部分:寄存器、主存儲器(也就是內(nèi)存)和外存(也就是硬盤這一類)。
2.2 虛擬內(nèi)存:使得不同進程在運行時,它所看到的是自己獨占當前系統(tǒng)的4G內(nèi)存,在進程初始化或者需要分配空間時,僅僅建立虛擬內(nèi)存和磁盤之間的映射,等到運行至對應(yīng)程序、訪問數(shù)據(jù)時,才觸發(fā)缺頁中斷,將數(shù)據(jù)載入內(nèi)存中。優(yōu)點:①擴大了內(nèi)存空間;②程序需要大塊的連續(xù)空間時,只需要在虛擬內(nèi)存中分配空間,不需要物理內(nèi)存具有大塊的連續(xù)空間,可以利用碎片。③避免了多個進程同時對物理內(nèi)存資源的競爭,因為每個進程訪問數(shù)據(jù)時才會將數(shù)據(jù)載入內(nèi)存,占用的內(nèi)存大小遠小于直接在物理內(nèi)存申請內(nèi)存。缺點:虛擬內(nèi)存和物理內(nèi)存的映射所涉及的管理操作較為復雜、耗時。
2.3 虛擬內(nèi)存和物理內(nèi)存的映射:通過頁表(映射表)實現(xiàn)。虛擬內(nèi)存地址是虛擬頁號和物理地址偏移量,虛擬頁號可以根據(jù)頁表得到物理頁號,然后再根據(jù)物理地址偏移量,完成了虛擬地址和物理地址的映射。多級頁表:假如虛擬頁號需要20bit來存儲,通過數(shù)組來映射,比如數(shù)組的第一個元素是虛擬頁號的20bit最小值所對應(yīng)的物理頁號,然后物理頁號需要4個字節(jié)來存儲,那么需要2的20次方大小的、元素為4字節(jié)的數(shù)組,所需空間是4MB,假如運行著幾十上百的程序,那么頁表就占用了幾百兆甚至GB的內(nèi)存。所以通過多級映射,比如20bit分為5段,每段是4bit,前面4段保留的地址都是索引地址,只有最后一段的地址才是真正的物理頁號,那么所需空間大小是5個2的4次方大小、元素為4字節(jié)的數(shù)組,所需空間僅僅是320個字節(jié),空間縮小了上千倍。
2.4 地址變換高速緩沖(Translation-Lookaside Buffer, TLB):?因為多級頁表需要多次內(nèi)存操作,但是內(nèi)存映射是頻繁操作,所以可以通過緩存之前的地址轉(zhuǎn)換結(jié)果來減少內(nèi)存訪問。
3. 中斷的處理過程
3.1 中斷請求:分為內(nèi)部中斷(CPU內(nèi)部直接處理)和外部中斷(通過CPU中斷輸入引腳輸入中斷請求信號,分為可屏蔽中斷請求和不可屏蔽中斷請求)。
3.2 中斷判優(yōu):CPU找出中斷優(yōu)先級最高的中斷源。
3.3 中斷響應(yīng):①保護硬件現(xiàn)場;②關(guān)閉中斷;③保護斷點;④得到中斷服務(wù)程序的入口地址。
3.4 中斷處理:①保護現(xiàn)場:將寄存器數(shù)據(jù)壓入堆棧;②開啟中斷:接收更高優(yōu)先級的中斷;③中斷服務(wù):執(zhí)行具體的操作;④恢復現(xiàn)場:將堆棧信息重新放置寄存器中;⑤中斷返回。
3.5 中斷返回:返回原程序的斷點處,恢復硬件現(xiàn)場,執(zhí)行原程序。
個人理解:中斷響應(yīng)的保護硬件現(xiàn)場是對硬件層面的保護,而中斷處理的保護現(xiàn)場是對數(shù)據(jù)的保護。
4. 同步與異步以及和阻塞、非阻塞的區(qū)別和關(guān)系
4.1 同步是指一次操作所有步驟結(jié)束再繼續(xù)下一步。而異步指一次操作中某些步驟結(jié)束就執(zhí)行另一個操作,不需要等待其它步驟完成。
4.2 阻塞指某些操作等待當前操作的結(jié)束而陷入阻塞狀態(tài);非阻塞就是其它操作雖然也要等待當前操作結(jié)束,但是他們可以執(zhí)行其它任務(wù),過會再來查詢前面那個操作是否結(jié)束。
4.3 同步、異步和阻塞、非阻塞的關(guān)系:同步、異步是一種操作、過程;而阻塞、非阻塞是一種狀態(tài)。
4.4 多路IO復用的三種方式select、poll、epoll:①select:支持的最大連接數(shù)是1024或2048,每次都遍歷由fd(Linux對文件的操作通過文件描述符,file descriptor)組成的fd_set,判斷相應(yīng)的fd是否就緒,如果就緒則通知程序中斷處理;②poll本質(zhì)上和select沒有區(qū)別,都是遍歷fd。在遍歷fd時,如果就緒則加入等待隊列,如果遍歷完沒有發(fā)現(xiàn)就緒的fd,則掛起當前進程,直到主動超時,超時后再次遍歷fd;基于鏈表儲存,沒有最大連接數(shù)的限制;③epoll主要通過回調(diào)機制,當fd就緒時,就會執(zhí)行相應(yīng)的回調(diào)程序。
總結(jié)
- 上一篇: MyISAM和InnoDB执行引擎的区别
- 下一篇: 分布式系统——网络监视系统zabbix3