清華大學《操作系統》(二十三):I/O子系統

常見設備接口類型:

1、字符設備:鍵盤鼠標、串口

??????a.以字節為單位順序訪問

??????b.I/O命令通常使用文件訪問接口和語義

2、塊設備:磁盤、磁帶、光驅

??????a.均勻的數據塊訪問

??????b.I/O命令通常使用文件系統接口,也可以使用內存映射訪問

3、網絡設備:以太網、無線、藍牙

??????a.格式化的報文交換

??????b.I/O網絡報文,通過網絡接口支持多種網絡協議。

同步與異步I/O:

1、阻塞I/O:發出請求后等待數據讀出或寫入完畢

2、非阻塞I/O:發出請求后不等待立即返回,返回值為成功傳輸的字節數

3、異步I/O:讀數據時,使用指針標記好用戶緩沖區,立即返回,稍后內核將填充緩沖區并通知用戶;寫數據內核寫入完畢后通知用戶

I/O結構

北橋連高速設備,南橋連IO設備。

I/O數據傳輸

CPU與設備控制器的數據傳輸:

1、程序控制I/O:

??????a. 通過CPU的in/out或者load/store傳輸所有數據

??????b. 特點是硬件簡答,編程容易,但是小伙CPU時間,適用于簡單的小型的設備I/O

2、直接內存訪問(DMA)

??????a. 設備控制器可直接訪問系統總線

??????b. 控制器直接與內存湘湖傳輸數據

??????c. 特點是設備傳輸數據不影響CPU,只需要CPU參與設置,適用于高吞吐量的I/O。

I/O設備通知操作系統的機制:

1、CPU主動輪詢:

?????a. I/O設備在特定狀態寄存器中放置狀態和錯誤信息

?????b. 操作系統定期檢測狀態寄存器

?????c. 特點是簡單,I/O操作頻繁或不可預測時開銷較大,并且延時較大

2、設備中斷

?????a. CPU在I/O之前設置任務參數

?????b. CPU在發出I/O請求之后繼續執行其他任務

?????c. I/O設備處理I/O請求

?????d. I/O設備處理完成時,觸發CPU中斷請求

?????e. CPU接收中斷,分發到相應中斷處理例程

?????f. 特點是處理不可預測事件事件效果好,但是中斷較多時開銷較高

? ? ?g. 實際操作系統中一些高帶寬設備可能結合了輪詢和設備中斷,第一次傳入數據包之前采用中斷,輪詢后面的數據包知道硬件緩存為空。

磁盤調度

???????????通過優化磁盤訪問請求順序來提高磁盤訪問性能。

1、尋道時間是磁盤訪問最耗時的部分

2、同時會有多個在同一磁盤上的I/O請求

3、隨機處理磁盤訪問請求的性能表現很差

調度算法:

1、FIFO:按順序處理請求,公平對待所有進程,在有很多進程的情況下,接近隨機調度的性能

2、SSTF(最短服務時間優先):選擇離磁臂當前位置最近的請求執行

3、掃描算法:磁臂在一個方向上移動,訪問所有未完成的請求,直到磁臂到達該方向上最后的磁道,也稱電梯算法

4、循環掃描算法:限制為僅在一個方向上掃描,當最后一個磁道也被訪問過了后,磁臂返回到磁盤的另外一端再次進行

5、C-LOOK算法:磁臂先到達該方向上最后一個請求的位置,然后立即反轉

6、N步掃描算法:一側請求過多時,磁頭會有粘著現象,后面磁道無法響應,將磁盤請求隊列分成長度為N的子隊列,按FIFO算法依次處理所有隊列,掃描算法處理每個隊列

7、雙隊列掃描算法:只有兩個隊列,交替使用掃描算法處理兩個隊列,新生成的I/O請求放入另一個隊列中。

磁盤緩存

概念:

緩存是數據傳輸雙方訪問速度差異較大時引入的速度匹配中間層。

磁盤緩存是磁盤扇區在內存中的緩存區。類似于虛擬內存管理,只是方向相反。但是磁盤的訪問頻率是遠低于虛擬存儲中的內存訪問頻率,因此次磁盤緩存調度算法會比虛擬存儲復雜。

單緩存與雙緩存:

單緩存只有一個緩存區,任意時刻只有一端可以對緩存區進行操作,速度受到限制;雙緩存包含兩個緩存區,設備與用戶進程可以分別操作一個緩沖區,當一個緩沖區1寫完并且緩沖區2讀完了,可以將兩個緩沖區交換,繼續操作。

訪問頻率置換算法:

在一段密集磁盤訪問之后, LFU算法的引用計數會增加到很大,之后的變化無法反應當前的引用情況。因此該算法考慮磁盤訪問的密集特征,對密集引用不計數,在短周期內使用LRU算法,在長周期中使用LFU算法。

????????具體實現過程為,維護一個特殊棧(LRU的要求),棧中緩存塊被訪問時移到棧頂。與LRU不同是棧被分為三個區域:新區域、中間區域和舊區域。如果該塊在新區域中,引用計數不變,否則,引用計數加1,在舊區域中找計數最小的塊置換出去。這樣就將LRU與LFU結合在一起,并且避免了密集訪問的影響。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百度地圖 Android SDK - 個性化地圖

什么是百度個性化地圖Android SDK? 百度個性化地圖Android SDK是一套基于Android 2.2及以上版本號設備的應用程序接口,您能夠通過該套接口實現主要的地圖功能,而且能夠定制地圖樣式,實現個性化地圖。 該接口提供下面功能&#xff…

mysql讀寫分離_MySQL基于amoeba讀寫分離實驗

主從復制只是一個同步數據的方式讀寫分離:只在主的上面寫,只在從的上面讀讀寫分離方案:【1】基于程序代碼內部 (生產環境中應用最廣泛,性能最好,需要開發人員來實現)【2】基于中間代理層的實現amoeda 是阿里巴巴使用的…

Django models模型

Django models模型 一. 所謂Django models模型,是指的對數據庫的抽象模型,models在英文中的意思是模型,模板的意思,在這里的意思是通過models,將數據庫的借口抽象成python自己的一個類。然后在python Django框架其他代…

Page.FindControl方法找不到指定控件的原因

在ASP.NET 2.0中,引入了MasterPage的機制,在當前頁使用MasterPage的情況下,放在 ContentPlaceholder1這樣的內容頁的控件無法用Page.FindControl來查找,原因何在?MSDN對FindControl的解釋:在當前的命名容器…

ATT匯編語言與GCC內嵌匯編簡介

AT&T匯編語言與GCC內嵌匯編簡介 1 AT&T 與INTEL的匯編語言語法的區別 1.1大小寫 1.2操作數賦值方向 1.3前綴 1.4間接尋址語法 1.5后綴 1.6指令 2 GCC內嵌匯編 2.1簡介 2.2內嵌匯編舉例 2.3語法 2.3.1匯編語句模板 2.3.2輸出部分 2.3.3輸入部分 2.3.4限制字符 2.3.5破…

Python內存管理以及垃圾回收機制

垃圾回收:用通俗點的語言解釋就是內存管理和垃圾回收的過程. 大管家refchain 在Python的C源碼中有一個名為refchain的環狀雙向鏈表,這個鏈表就比較厲害了,因為Python程序中一旦創建對象都會把這個對象添加到refchain這個鏈表中。也就是說他…

pythonfillcolor_openpyxl 填充顏色(單元格)

如果需要填充某個單元格的顏色需要3步:# 1-加載庫文件from openpyxl import Workbookfrom openpyxl.styles import PatternFill#2-新建一個工作簿wb Workbook()ws wb.active#隨便賦個值d4 ws[D4]d4 43d4.value#3-設置樣式,并且加載到對應單元格fill …

Mint-ui中loadmore(上拉加載下拉刷新)組件在ios中滑動會觸發點擊事件的解決方法...

bug說明: Mint-ui中loadmore(上拉加載下拉刷新)組件 在 使用fastclick的情況下 ,在ios設備中滑動會觸發點擊事件; 解決方法: 我是按需引入,去項目中找到loadmore下的index.js,全部引入的要找mint下面mint-u…

【Ext.Net學習筆記】01:在ASP.NET WebForm中使用Ext.Net

Ext.NET是基于跨瀏覽器的ExtJS庫和.NET Framework的一套支持ASP.NET AJAX的開源Web控件,包含有豐富的Ajax運用,其前身是Coolite。 下載地址:http://www.ext.net/download/ 示例地址:http://examples.ext.net/ 1.首先下載Ext.Net,地…

面試之操作系統

基本特征 1. 并發 并發是指宏觀上在一段時間內能同時運行多個程序,而并行則指同一時刻能運行多個指令。并行需要硬件支持,如多流水線、多核處理器或者分布式計算系統。操作系統通過引入進程和線程,使得程序能夠并發運行。 2. 共享 共享是指…

mysql新增列并同時增加數據_圖解MySQL | [原理解析] MySQL 為表添加列 是怎么quot;立刻quot;完成的...

在上一期圖解 圖解MySQL | MySQL DDL為什么成本高?中,我們介紹了:傳統情況下,為表添加列需要對表進行重建騰訊團隊為 MySQL 引入了 Instant Add Column 的方案(以下稱為 "立刻加列" 功能)可以快速完成 為表添加列 的任務…

GCC for Win32開發環境介紹

GCC for Win32開發環境介紹(1) 第一章 在視窗操作系統下的GCC 第一節GCC家族概覽 GCC是一個原本用于Unix-like系統下編程的編譯器。不過,現在GCC也有了許多Win32下的移植版本。所以,也許對于許多Windows開發者來說,GCC還是一個比較陌生的東西…

包裝函數

function wrap(object,method,wrapper){ //object:包裝方法所屬對象 method:方法名 wrapper:替換函數var fn object[method];return object[method] function(){return wrapper.apply(this,[fn.bind(this)].concat(Array.prototype.slice.call(arguments)));}; } 轉載于…

JAR——pinyin4j-2.5.0

簡介:將中文轉為拼音; 使用: 123//返回的是字符串String pinyin[] PinyinHelper.toHanyuPinyinStringArray(chinese);//eg:你----ni3本文轉自wauoen51CTO博客,原文鏈接:http://blog.51cto.com/7183397/1605894&#…

Android高效加載大圖、多圖解決方案,有效避免程序OOM

http://blog.csdn.net/guolin_blog/article/details/9316683轉載于:https://www.cnblogs.com/jianglijs/p/7827524.html

Flask 上下文源碼解析

簡單來說,上下文包括request_ctx(封裝了request和session),app_request(封裝了app和g),兩個ctx都儲存在一個叫做Local的數據結構中,這個結構的作用就是會自動根據不同的線程id返回對應的數據,然后通過一個叫做 LocalStark 的結構把…

reg型變量怎么賦值_UiPath變量介紹和使用

1 變量變量主要用于存儲數據,它在RPA中扮演重要的數據傳遞角色,是RPA編程不可或缺的一部分。它包括變量名稱和變量的值,變量的值支持多種數據類型,包括從通用值,文本,數字,數據表,時…

gcc 使用教程

gcc 使用教程 目 錄 gcc makefile寫法 gcc_egcs使用 gdb使用 gcc常用選項對代碼的影響 一般情況 -O 編譯選項 -O2 編譯選項 -fomit-frame-pointer 編譯選項-fomit-frame-pointer && -O2-fPIC 編譯選項 -static 編譯選項 AT&T的匯編格式 x86內聯匯編 簡述 內聯匯編…

Struts2教程9:實現自已的攔截器

在上一篇中介紹了Struts2攔截器的原理,在這一篇中我們將學習一下如何編寫自己的攔截器。一、攔截器的實現實現一個攔截器非常簡單。實際上,一個攔截器就是一個普通的類,只是這個類必須實現com.opensymphony.xwork2.interceptor.Interceptor接…

標準C程序設計七---66

Linux應用 編程深入 語言編程標準C程序設計七---經典C11程序設計 以下內容為閱讀: 《標準C程序設計》(第7版) 作者:E. Balagurusamy(印), 李周芳譯 清華大學出版社…