Linux操作系統包含以下各子系統:
系統調用子系統:操作系統的功能調用同一入口;
進程管理子系統:對執行程序進行生命周期和資源管理;
內存管理子系統:對系統的內存進行管理、分配、回收、隔離;
文件子系統 :系統內部一切皆文件,對文件進行管理;
設備子系統 :對輸入、輸出設備進行管理;
網絡子系統 :負責對外交流,網絡協議棧和收發網絡包。
內核結構圖如下:
1.虛擬文件系統VFS
位於用戶空間和內核具體文件系統之間,是各種具體的文件系統提取出來的抽象層,為用戶提供標准的文件系統調用接口。對具體的文件系統的數據結構進行抽象,以統一的接口進行處理調用(read、open)。
1. 系統IO操作(接口)
包括:a.基本文件操作:open、read、write等; b.文件鎖(避免多個用戶進程對同一文件競爭操作,fcntl()對文件進行上鎖),解決文件共享問題; c.多路復用:解決I/O復用問題(系統接口重復使用)
2.1.linux IO模型(5種)
應該是:同步阻塞IO、同步非阻塞IO、多路復用IO、信號驅動IO、異步IO
阻塞IO模型:系統調用的IO(接口)函數未完成,會一直阻塞掛起,直到數據拷貝完成;
非阻塞IO模型:無論應用程序在系統調用時是否完成,都立即返回!
多路復用IO模型:系統調用未完成,函數等待,系統IO還可以操作其他的函數調用;(多功能)
異步IO:進程先讓內核完成IO操作,內核在通知進程操作完成;(分道)
前四種都是同步IO,只有最后一種才是異步IO。
2.2多路復用IO(epoll、poll、select函數)
select和poll基本是差不多的,除了select有監聽事件個數限制(1024個),其他和poll沒有太大區別。用戶程序每次監聽,都要將其監聽事件集從用戶態拷貝到內核態執行,然后再返回用戶態,一旦有事件觸發,只能通過遍歷的方式才能找到觸發事件,開銷很大。
Epoll最優秀的多路復用機制!監測無上限,在注冊新事件時只需一次拷貝所有監聽事件到內核即可,epoll是只關心活躍的fd,通過回調機制無序遍歷,提高效率。
3標准IO操作
基本的IO操作(read、write、open都沒有緩沖空間,用戶程序必須要從用戶態切換至內核態,執行相應的命令操作,再返回用戶態繼續執行代碼。 -> 為提高用戶程序執行效率,Linux還提供了標准IO操作(fopen()、fread()、fwrite()、gets()、puts()等,r,rb+,w.wb+)。帶緩沖區的,基於流緩沖,將數據盡量多的寫入緩存區再一次性讀取,減少用戶態-內核態-用戶態的切換,提高程序執行效率。