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