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