中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Inside Cisco IOS Software Architecture(第一章,系統基礎知識)

發布時間:2020-07-14 23:11:24 來源:網絡 閱讀:536 作者:83227476 欄目:移動開發

由于本書寫于1990年代,CEF還是cisco最新的黑科技. 所以其中很多關于操作系統的內容已經不太正確.Cisco的操作系統也從最開始的IOS一種形式到后來的Linux做control plane的IOS,IOS-XR,IOS-XE,NX-OS 等等等. 我相信書中提到的很多玩意已經不再使用,或者起碼有所變化,但是由于沒有更新的版本的書講新的操作系統的內部,所以還是只能從這本書上了解.從學習的角度來看,從一個比較原始的形態學習也有助于一步步理解更復雜的系統. 所以不要過分糾結書的年代和細節內容.

操作系統

首先書中復習了下大學操作系統的基本概念,操作系統本質是用來抽象硬件和做資源分配的.

由于要講CPU的資源分配,繼續復習了大學操作系統中的線程,進程,內核的概念.根據CPU分配資源的情況排隊策略不同,分類為FIFO,有優先級的FIFO,可搶占的多任務系統.各種不同排隊策略的優劣勢大概大家可以想出來,比如實時性無法滿足,霸占CPU資源,切換的多了又會出現因為CPU要不停的切換現場帶來的資源浪費等等一堆廢話,有興趣的可以復習下大學課本.

除了CPU資源,另外一個很重要的資源就是內存了. 再次幫你復習一下什么是操作系統分配的內存和虛擬內存.然后畫風一轉,說了一句大廢話.IOS系統由于為了保證性能,所以沒有完全實現虛擬內存.

IOS操作系統

IOS系統歷史久遠,那個時代大家為了省系統資源基本什么事情都做的出來. 更何況IOS這種系統開始只是為了轉發,后來功能是越加越多.所以缺失了一些其他操作系統最基本的功能,比如進程之間連內存的保護都沒有.

Inside Cisco IOS Software Architecture(第一章,系統基礎知識)

從圖上你可以看到系統中的幾部分,很有意思的是他不像日常我們現在接觸的linux,區分用戶態和內核態.看上去更像是一堆功能堆在一起的,我一直以為路由的計算等等功能應該是在用戶態實現之后然后通過類似于system call的東西傳送給內核態,但是從這個圖來看早起的IOS來看應該是根本沒有的.

名字就代表了基本功能,還算明顯,process應該對應到設備上面應該就是所謂的主控卡所執行的大多數任務.packet buffer就是接口收到所有要轉發的包的集合,需要注意的是一些網工(其實就是我)會思考硬件上面的具體某個東西(比如queue)來和這個對應.但是從操作系統的角度來看,永遠是CPU和內存在交換數據,所謂的硬件queue之類的東西在這個圖里面其實是在device driver層面的東西. 內核就是更多操作系統的基本功能了,CPU和內存資源的調度. 快速轉發這一塊,下一章再說.

內存

內存這一塊,IOS基本沒有用虛擬內存來擴充內存空間.所以他對內存的使用上面也是直接使用,沒有抽象成傳統操作的內存頁再提供給應用程序.這樣目的應該還是為了省出來一些內存資源.

IOS把內存區分不同的區域,稱為regions. 這個regions基本就和物理內存是一一對應的關系.其中的DRAM基本就是用來做日常我們接觸到的功能,比如用來跑IOS,留給進程存取變量之類的.SRAM是用來做packet buffer做快速轉發. (由于大學操作系統也沒有學的很好,還是搜了下DRAM和SRAM的區別,簡單可以理解為DRAM便宜,SRAM貴,SRAM比較塊.)

現在在IOS的路由器上面還是可以用show region命令看到具體IOS的內存分配情況.

這個圖就是內存region的劃分.

Inside Cisco IOS Software Architecture(第一章,系統基礎知識)

你真的特別想搞明白具體是干嘛的.我推薦你復習下大學操作系統的課本.簡單的可以理解是main里面跑了IOS和IOS運行起來需要的動態的內存空間.PCI和IO就是PCI總線上面和IO設備要用的內存空間.從整個內存的角度大概是這么個情況.

但是一般我們會用到一個show memory的命令,看IOS內存空間使用情況.這個命令就是具體更具體的顯示了每一部分內存的使用情況,不過這個命令的輸出真的很長.

進程

IOS其實是用了一個非搶占的調度CPU的模式.看上去有點蠢,因為網絡設備本質是要快速處理來的包,如果不能搶占,包來了你的CPU不能及時轉發.這是個非常傻X的事情.我們會在第二章講包交換架構的時候提到這個事情是怎么解決的. 非搶占的優勢還是有的,CPU不用來回保存現場切換來去,效率高了一點,其次對程序員來說編程容易.(這段基本純翻譯,看到最后一句的時候我都驚呆了….)

進程的一生

其實在IOS里面有一個paser進程,基本負責了大多數創建.paser進程就是在你敲完命令之后分析配置文件,然后根據配置文件做相關的事情.比如你剛敲了router eigrp.他就起了個eigrp進程.你no掉這個eigrp進程的時候,這個parser就會干掉這個進程.

Inside Cisco IOS Software Architecture(第一章,系統基礎知識)

圖其實已經比較清楚簡單的解釋了一個進程的一生,其中modification這個狀態應該指的是說這個進程創建的時候需要的一些參數,我可以想象到的就是比如你在配置OSPF的時候router id這些參數是這在這個狀態被添加到進程當中的,當然這是我的理解,可能完全是錯的.

show process這個命令可以看到具體進程的具體信息. IOS當中進程的優先級分4個,Critical,High,Medium,Low.

  • Ciritical: 主要是系統必須要用的基礎服務

  • High: 重要的必須要快速響應的.比如端口收到了一個包

  • Medium: 大多數系統進程都在這.比如我們用的路由協議

  • Low: 最不重要的,比如log

對于show process更細致的解釋,請自行搜索.或者參見inside Cisco IOS software architecture的相關內容.

CPU資源管理

在內核當中用來分配CPU資源的就是scheduler, 所有的進程被分配到6個queue當中.6個queue分為三個大類.

- idle queue: 空閑的queue,等待別的事件讓他active

- dead queue: 進程結束了,但是內存相關資源還沒有被操作系統回收

- ready queue: 就是可以執行的進程。他們又將進程分為不同的優先級

  • Critical

  • High

  • medium

  • low

分配資源算法簡單說起來就是在每執行一個進程之后,都要去看有沒有優先級更高的進程應該被執行用來. 如果有,一定保證優先級更好的進程被執行.

通過show process cpu可以看到CPU的使用情況

Inside Cisco IOS Software Architecture(第一章,系統基礎知識)

其中圖中的百分之90和百分之82表示了前五秒CPU的被進程的總消耗和其中具體處理中斷的消耗,這里百分之8的差值主要指的是相互進程之間切換導致的損耗.最后剩下的百分之10,就是scheduler本身所消耗掉的CPU資源.

我們之前提到過IOS是通過一個非搶占的方式分配CPU資源,這樣就有一個很常見的問題.一個資源如果霸占著CPU不放手,那要怎么辦. 在IOS當中有個玩意叫watchdog timer來解決這個問題. 工作原理就是一個進程啟動之后,開始對這個進程計時,當過了2秒之后,這個進程還是占著CPU資源.他就把CPU的控制權還給scheduler,如果scheduler還是把CPU給這個程序,而且這個資源繼續霸占CPU2秒.這個進程就會被干掉.

內存資源管理

這里就是之前提到過的region manager把物理內存劃分成不同的region. pool manager就是分配動態是內存資源.系統最開始啟動的時候是一塊大的內存資源,當不同進程申請釋放之后.內存塊就會變得多個小塊,pool manager就是盡量保證釋放后的內存能有盡量大單塊資源. show memory和show memory free可以看到具體進程使用內存的情況.

pool manager有一個缺點就是每個管理的block都有一個32byte的overhead,當內存block很大的時候,這點overhead無所謂.當有多個小block的時候,這個overhead就很要命了.這里IOS就有一個chunk manager來解決這個問題. chunk manager其實就是把一個大的block分成N個大小固定的chunk,當進程申請內存的時候,chunk manager就會把幾個chunk給這個進程.這個chunk manager整個block才有一個32byte的overhead.所以比pool manager每個block多一個32byte的overhead省了不少內存空間.

內存分配問題

之前都提到的都是分配成功的.內存也有分配不成功的時候,主要有兩個原因.一個就是內存空間不夠了.還有一種可能就是內存空間雖然夠,但是最大的block不滿足進程的需求. show memory可以看到當前最大的內存block是多少.如果有進程需求比這個block要大,就會導致進程無法創建.

Packet Buffer 管理

IOS系統會在內存創建一塊區域專門存放要轉發的數據包.在IOS系統內部管理packet buffer的是buffer pool manager.

IOS系統當中通過packet buffer manager會創建不同種類的packet buffer pool,其實這個pool也就是一塊內存區域.它根據不同的類型可能是靜態的,動態的.所有進程都可以訪問的,或者是某個進程才能訪問的.

系統Buffer

IOS操作系統有一個公共的buffer叫系統buffer.這個buffer就是用來處理收到的數據包,也存放設備自己產生的數據包.通過show buffer命令可以看到具體的信息.

系統buffer會根據MTU的不同,又分為不同的隊列(具體這樣處理是不是比較快,我也不能確定,可能是因為CPU處理固定長度的會有很大的優勢,起碼直接根據長度直接提取出相應的字節). 具體show出來的內容解釋就需要參考書了.

一個簡單的例子說明下buffer的工作原理.

Inside Cisco IOS Software Architecture(第一章,系統基礎知識)

這是一個初始狀態的用來放104byte包大小的buffer.

在前8個包進入buffer的時候只會簡單的占用8個,剩下8個.此時請注意,剩下的buffer數量已經等于min buffer的大小.此時,如果還有包進入buffer.系統會嘗試保持最小buffer,換句話說,如果這個時候進來了4個包,也就是一共12個包進入buffer.這時buffer會從16漲到20.請注意,這里并非無限增長的.如果繼續有包進入buffer,buffer就會停止漲下去.多余的包就會被丟棄.(這里為什么是從16漲到20,書上也并非說的特別清楚,只是舉例說show出來buffer不同的狀態.根據我的猜測,應該是在一個時間間隔內嘗試滿足buffer的需求,即使這樣,應該會也有個上限.書中完全沒有提到,在次我們只能做大概了解)

最終狀態的buffer樣子:

Inside Cisco IOS Software Architecture(第一章,系統基礎知識)

其中可以看到此時buffer大小其實是20,永久buffer是16,最后會釋放多余的內存空間.20 hits指的就是最后buffer能接受數據包的數量.13 miss這個計數器是當buffer小于min buffer的時候他就會增長.4 created就是動態新建了4個buffer.最后有一個包被丟棄標示為1 failure. 如果覺得此處解釋的不清楚.請參考書上例子,有圖解.

設備驅動

毋庸置疑,所有硬件設備都需要驅動.IOS也不例外,不過值得一提的就是IOS網卡驅動分為兩大塊.一個是控制部分,比如shut down端口.另外一部分是流量轉發.第二章會講到網卡驅動會和包轉發緊密聯系在一起.

IOS的驅動通過非常特殊的方式(interface descriptor block)和其他部分溝通(我也不知道一般操作系統通過什么方式). IDB里面存儲了接口的IP地址,接口狀態,接口相關統計等等等.

總結

IOS操作系統其實和其他操作系統區別不大,只有兩個是需要很注意的,內存資源有限,對于轉發的要求.(我相信現在對于內存的要求變化差距應該很大了,曾經是很缺內存,現在情況并非這樣了).

其中IOS比較奇葩的就是把內存平鋪起來,所有進程隨便用.此處注意,IOS進程相當于別的系統的線程(可能是由于內存可以隨便訪問所以才這么說?當年也沒有多核CPU啊).

IOS不像其他操作系統的一點還有就是根本沒有user mode或者說是kernel就跑在user mode下面和其他進程共享內存資源.

下一章,我們講述IOS系統的轉發.


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元朗区| 浦县| 容城县| 开原市| 青神县| 西乡县| 桓仁| 兴城市| 宁都县| 枞阳县| 绥棱县| 突泉县| 南郑县| 沿河| 蒙阴县| 连山| 沙河市| 安图县| 合阳县| 米泉市| 陵川县| 岱山县| 宁国市| 龙海市| 汉寿县| 金寨县| 大石桥市| 西城区| 武乡县| 洛浦县| 伊吾县| 陆川县| 确山县| 凉城县| 沙湾县| 郴州市| 乌拉特中旗| 高唐县| 顺义区| 闽侯县| 呈贡县|