在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

操作系統不同的緩沖區概念

科技綠洲 ? 來源:Linux開發架構之路 ? 作者:Linux開發架構之路 ? 2023-11-10 10:38 ? 次閱讀

常常聽到有程序員會跟你討論:“我們在讀寫文件的時候,系統是有緩存的”。但實際上有一部分人把用戶進程緩存區和系統空間緩存區的概念混淆了,包括這兩種緩沖區的用法和所要解決的問題,還有其它類似的概念。本文就來區分一下不同的緩沖區概念(主要針對類unix平臺)。

用戶進程和操作系統的關系,首先我用一張圖來解釋“用戶進程和操作系統的關系:

圖片

這是一個計算機系統運行時的簡化模型,我們把所有運行在操作系統上的進程成為用戶進程,它們都運行在用戶空間(可以看到用戶空間有很多進程)。把操作系統運行的空間成為系統空間。

為什么將進程分為用戶進程和系統進程,首先你一定聽說過內核態和用戶態(kernel mode和user mode),在內核態可以訪問系統資源,比如:

處理器cpu:cpu控制著一個程序的執行。輸入輸出IO:linux有句話叫“一切都是流”,也就是所有輸入輸出設備的數據,包括硬盤,內存,終端都可以像流一樣操作。進程管理:類似對進程的創建,休眠,喚醒,釋放之類的調度。比如linux下的fork和windows下的CreateProcess()函數。內存:包括內存的申請,釋放等管理操作。設備:這個就是常常說的外設了,比如鼠標,鍵盤。計時器:計算機能計時是因為晶體振蕩器產生的電磁脈沖。那么所有的定時任務都是以它為基礎的。進程間通信IPC:進程之間是不能夠互相訪問內存的,所以進程與進程之間的交互需要通信,而通信也是一種資源。網絡通信網絡通信可以看做是進程見通信的特殊形式。

注釋:fflush把進程緩沖區的數據刷新到內核緩沖區,fsync把內核緩沖區的數據刷新到物理媒介上。

而上面所說的這些系統資源,在用戶進程中是無法被直接訪問的,只能通過操作系統來訪問,所以也把操作系統提供的這些功能成為:“系統調用”。

比如下圖,展示一個用戶通過shell控制計算機所經過的數據流向:文件讀寫和終端控制,都是通過內核進行的。

圖片

提供這些限制的基礎就是cpu提供的內核態和用戶態。比如intel x86 CPU有四種不同的執行級別0-3,linux只使用了其中的0級和3級分別來表示內核態和用戶態。

在用戶態,不僅僅是系統資源了,就是別的進程的內存對于你來說,都是“透明的”(并不是沒辦法訪問,否則游戲作弊器怎么實現?)

圖片

用戶進程緩存區

前面提到,用戶進程通過系統調用訪問系統資源的時候,需要切換到內核態,而這對應一些特殊的堆棧和內存環境,必須在系統調用前建立好。而在系統調用結束后,cpu會從核心模式切回到用戶模式,而堆棧又必須恢復成用戶進程的上下文。而這種切換就會有大量的耗時。

你看一些程序在讀取文件時,會先申請一塊內存數組,稱為buffer,然后每次調用read,讀取設定字節長度的數據,寫入buffer。(用較小的次數填滿buffer)。之后的程序都是從buffer中獲取數據,當buffer使用完后,在進行下一次調用,填充buffer。所以說:用戶緩沖區的目的是為了減少系統調用次數,從而降低操作系統在用戶態與核心態切換所耗費的時間。除了在進程中設計緩沖區,內核也有自己的緩沖區。

內核緩存區

當一個用戶進程要從磁盤讀取數據時,內核一般不直接讀磁盤,而是將內核緩沖區中的數據復制到進程緩沖區中。

但若是內核緩沖區中沒有數據,內核會把對數據塊的請求,加入到請求隊列,然后把進程掛起,為其它進程提供服務。

等到數據已經讀取到內核緩沖區時,把內核緩沖區中的數據讀取到用戶進程中,才會通知進程,當然不同的io模型,在調度和使用內核緩沖區的方式上有所不同,下一小結介紹。

你可以認為,read是把數據從內核緩沖區復制到進程緩沖區。write是把進程緩沖區復制到內核緩沖區。當然,write并不一定導致內核的寫動作,比如os可能會把內核緩沖區的數據積累到一定量后,再一次寫入。這也就是為什么斷電有時會導致數據丟失。所以說內核緩沖區,是為了在OS級別,提高磁盤IO效率,優化磁盤寫操作。

流程

在《Unix網絡編程》中的五種io模型,也提到過進程緩沖區和內核緩沖區。因為這個并不是此篇文章的重點,所以這里只對比阻塞模型和非阻塞。

圖片

圖片

對比阻塞和非阻塞,在阻塞io中,直到數據從內核緩沖區拷貝到用戶緩沖區才通知用戶進程調用完成并喚醒,而非阻塞,在輪訓得知數據準備好后,數據還是在內核緩沖區中,等你去讀取,這也就是說數據準備好,并不代表已經讀好可以使用。當然也不代表一定能讀。

緩存區和緩存

還有一部分人把緩沖區和緩存混淆,后來我明白這也是因為翻譯導致的把兩種東西進行混淆。緩沖區的英文是buffer,而緩存的應為是cache。

圖片

CPU緩存(Cache Memory)是位于CPU與內存之間的臨時存儲器,因為cpu的計算速度要比內存的讀寫速度快很多,而把這些可能會被重復訪問到的數據存儲于cpu緩存中,就會提高讀取速度。可以說緩存是cpu和內存之間的臨時存儲器。

也就是說,buffer是因為減少調用次數,集中調用,提高系統性能。而cache是將讀取過的數據保存起來,重新讀取時若命中(找到需要的數據)就不要去讀硬盤了,若沒有命中就讀硬盤。而緩沖可以理解為內存和硬盤之間的臨時存儲器,重點是寫的過程。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 振蕩器
    +關注

    關注

    28

    文章

    3847

    瀏覽量

    139339
  • 緩沖
    +關注

    關注

    0

    文章

    53

    瀏覽量

    17849
  • 操作系統
    +關注

    關注

    37

    文章

    6889

    瀏覽量

    123692
  • 終端
    +關注

    關注

    1

    文章

    1152

    瀏覽量

    29994
收藏 人收藏

    評論

    相關推薦

    請問串口的DMA接收緩沖區是不是環形緩沖區

    系統在創建DMA緩沖區的時候,建立了put_index和get_index,會隨著數據的寫入和讀取修改它們的值;3、以上兩個相互配合,客觀上將DMA的緩沖區維護成了一個環形緩沖區不知
    發表于 08-30 14:27

    基于狀態圖的緩沖區溢出攻擊分析

    結合緩沖區溢出攻擊產生的原理,分析緩沖區溢出攻擊代碼的結構,論述Snort規則對緩沖區溢出攻擊的檢測,在此基礎上構建一個基于狀態圖的緩沖區溢出攻擊的分析模型。該模型對
    發表于 04-10 08:46 ?32次下載

    環形緩沖區讀寫操作的分析與實現

    環形緩沖區是嵌入式系統中一種重要的常用數據結構。在多任務環境下實現時,如果有多個讀寫任務,一般需要用信號量來保護多個任務共享的環形緩沖區。但是如果只存在1 個讀
    發表于 04-15 11:35 ?40次下載

    Windows緩沖區溢出攻擊的實例研究

    本文首先詳細分析了Windows 緩沖區溢出的基本原理和具體流程。在此基礎上,通過對一個Windows 網絡緩沖區溢出攻擊實例的詳細調試分析,研究了Windows 緩沖區溢出攻擊的整個過程,
    發表于 08-28 09:44 ?17次下載

    清除鍵盤緩沖區原理

    清除鍵盤緩沖區原理 有時用戶的按鍵響應可能導致數據丟失或破壞了數據而不能挽回。在這種情況下,消除緩
    發表于 06-12 23:07 ?2111次閱讀

    環形緩沖區的實現原理

    在通信程序中,經常使用環形緩沖區作為數據結構來存放通信中發送和接收的數據。環形緩沖區是一個先進先出的循環緩沖區,可以向通信程序提供對緩沖區的互斥訪問。
    的頭像 發表于 03-22 10:03 ?7592次閱讀
    環形<b class='flag-5'>緩沖區</b>的實現原理

    緩沖區是啥意思 STM32串口數據接收之環形緩沖區

    緩沖區顧名思義是緩沖數據用的。實現緩沖區最簡單的辦法時,定義多個數組,接收一包數據到數組A,就把接收數據的地址換成數組B,每個數據有個標記字節用于表示這個數組是否收到數據,收到數據是否處理
    的頭像 發表于 07-22 15:33 ?1.1w次閱讀

    STM32串口數據接收 --環形緩沖區

    STM32串口數據接收 --環形緩沖區環形緩沖區簡介??在單片機中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數據接收與發送,環形緩沖區方式接收數據可以更好的保證數據丟幀率第。??在通信
    發表于 12-28 19:24 ?31次下載
    STM32串口數據接收 --環形<b class='flag-5'>緩沖區</b>

    什么是緩沖區?有什么作用

    緩沖區其實就是一個存儲區域,它是由專門的硬件寄存器所組成的。
    的頭像 發表于 02-02 09:57 ?2.6w次閱讀

    消除IoT上的緩沖區溢出漏洞

    黑客可以使用堆棧緩沖區溢出將可執行文件替換為惡意代碼,從而允許他們利用堆內存或調用堆棧本身等系統資源。例如,控制流劫持利用堆棧緩沖區溢出將代碼執行重定向到正常操作中使用的位置以外的位置
    的頭像 發表于 10-12 15:25 ?961次閱讀
    消除IoT上的<b class='flag-5'>緩沖區</b>溢出漏洞

    消除物聯網上的緩沖區溢出漏洞

      黑客可以使用堆棧緩沖區溢出將可執行文件替換為惡意代碼,從而使他們能夠利用堆內存或調用堆棧本身等系統資源。例如,控制流劫持利用堆棧緩沖區溢出將代碼執行重定向到正常操作中使用的位置以外
    的頭像 發表于 12-02 11:57 ?1042次閱讀

    環形緩沖區的實現思路

    單片機程序開發一般都會用到UART串口通信,通過通信來實現上位機和單片機程序的數據交互。通信中為了實現正常的收發,一般都會有對應的發送和接收緩存來暫存通信數據。這里使用環形緩沖區的方式來設計數據收發的緩存,即緩沖區溢出后,從緩沖區
    的頭像 發表于 01-17 15:07 ?1697次閱讀

    C++環形緩沖區設計與實現

    一、環形緩沖區基礎理論解析(Basic Theory of Circular Buffer) 1.1 環形緩沖區的定義與作用(Definition and Function of Circular
    的頭像 發表于 11-09 11:21 ?2244次閱讀
    C++環形<b class='flag-5'>緩沖區</b>設計與實現

    西門子博診斷緩沖區的使用方法

    可從在線和診斷視圖中“診斷”文件夾的“診斷緩沖區”組中讀出 CPU 的診斷緩沖區
    的頭像 發表于 12-11 10:24 ?4560次閱讀
    西門子博診斷<b class='flag-5'>緩沖區</b>的使用方法

    交換芯片緩沖區大小是什么

    交換芯片緩沖區大小并不一定是固定的。緩沖區的設計和實現會根據芯片的具體型號、規格以及應用場景的不同而有所差異。一些交換芯片可能具有固定大小的緩沖區,以滿足特定的性能需求或成本限制。然而,隨著技術
    的頭像 發表于 03-18 14:42 ?680次閱讀
    主站蜘蛛池模板: 一本大道加勒比久久综合 | 狠狠干精品 | www五月| 天堂亚洲网 | 午夜黄网站 | 卡2卡三卡四卡精品公司 | 色久优优 | 免费性bbbb台湾 | 女女综合网 | 李老汉的性生生活2 | 午夜免费福利影院 | 亚洲 欧洲 另类 综合 自拍 | 欧美图片小说视频 | 九九热在线免费 | 女人被狂躁视频免费网站 | 四虎影院免费视频 | 综合色天天 | 国产片翁熄系列乱在线视频 | 97se亚洲综合 | 免费一看一级毛片全播放 | 色偷偷亚洲综合网亚洲 | 色婷婷777 | 三级黄色在线视频中文 | 亚洲精品成人在线 | 夜夜狠狠| 另类毛片| 中文字幕第二区 | 日韩一级片在线观看 | 国产精品欧美精品国产主播 | 欧美肥胖女人bbwbbw视频 | 色激情小说| 狠狠色丁香婷婷综合 | 成年网站在线在免费播放 | 亚洲高清免费视频 | 国产人成午夜免费看 | 久久久久久免费播放一级毛片 | 午夜欧美在线 | 在线播放亚洲视频 | 国模在线视频 | 一个人看aaaa免费中文 | 日本一区二区三区免费看 |