女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

Linux到底是什么

Wildesbeast ? 來源:今日頭條 ? 作者:半畝良田v5 ? 2020-02-18 16:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通過日常使用電腦,我們大概都知道一個機器大概的結構由CPU、內存、硬盤以及外設構成,那么Linux服務器也一樣,從上一章內容知道,我們平常關注的系統性能差不多就是這些地方,那么,我們的進程是如何在Linux上運行的呢?一、進程運行過程首先,我們的數據是存放于磁盤/NAS等存儲目錄當中,當需要使用這些數據的時候,則要將數據從磁盤中讀取出來,經過內存再到三級緩存,然后進入到CPU中。如下圖,數據從底部的存儲設備一步一步的被送進入到CPU中。其用于傳輸數據的方式:遠程存儲到本地二級存儲走的是網絡通信的方式,而本地存儲的數據進入到內存、CPU走的是BUS總線的方式。

進程啟動以后,其數據被從磁盤中讀取到內存里緩存,當CPU使用到它的時候,再被通過三級高速緩存送入到CPU中執行。那么當這個進程被送入到CPU中運行,是不是就可以一個人獨占CPU資源,直到跑完為止呢?不是的,現代系統設計出了上下文切換的模式,每個進程運行的時候都會分配到了一個時間片,當這個時間片用完,那么當前正在運行的進程就會保留當前的狀態進入到緩存當中,當再次輪到該進程使用CPU的時候,才會從緩存當中被讀取出來。通過這樣反復的切換,直到進程運行結束。但是我們在使用進程時,為什么沒有進程切換的感覺呢?那是因為CPU的時間片以非常小的時間單位工作著,人們根本感受不到他的切換頻率。在Linux系統中存在著兩個空間,一個是用戶空間,另外一個就是內核空間。用戶空間指的是用戶可以操作和訪問的空間,這個空間通常存放我們用戶自己寫的數據等,比如磁盤NAS就是屬于用戶空間。內核空間就是系統內核來操作的一塊空間,這塊空間里面存放系統內核的函數、接口等,用戶是不能直接操作的。當程序在用戶空間下運行,我們把此時運行的程序的這種狀態稱為用戶態,而當進程執行在內核空間時,這種狀態稱為內核態。要想讓程序從用戶態切換到內核態,有3種方法:1.系統調用 (軟中斷)2.異常(硬中斷) 3.外圍設備的中斷(硬中斷)。二、進程異常會遇到什么?進程在運行過程中不是一開始就知道使用多少內存的,在持續的運行過程中,會不斷的向系統申請內存。當有應用需要讀寫磁盤數據時,由系統把相關數據從磁盤讀取到內存,如果物理內存不夠,則把內存中的部分數據導入到磁盤,從而把磁盤的部分空間當做虛擬內存使用,這部分被稱為swap。如果給所有應用分配足夠內存后,物理內存還有剩余,Linux會盡量再利用這些空閑內存,以提高整體I/O效率,方法是把這部分剩余內存再劃分為cache和buffer加以利用。如果某個時刻,系統需要更多的內存,則會把cache部分擦除,并把buffer中的內容寫入到磁盤中,然后把這兩部分的空間釋放給系統使用,但是再次讀取cache的內容時,就需要重新從磁盤讀取數據。下圖是系統中存在的緩存,當系統需要內存時,就會被釋放空間,然后充當內存使用。

1) Page cache主要用來作為文件系統上的文件數據緩存來用,尤其是對當進程對文件有read/write操作的時候。2) Buffer cache主要是用來在系統對塊設備進行讀寫的時候,對塊設備進行數據緩存來使用。3) directory cacha的作用是作為目錄緩存,避免經常訪問目錄慢。4) iNode cache則能夠加速訪問文件速度。同一系統內的文件具有唯一識別碼,這個就是iNode號。查找文件的時候會先查詢該文件的iNode號,再根據iNode號定位到文件位置。一般可以理解為buffer是為了作為數據寫入磁盤時的一個緩沖地帶。把分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統性能。而cache經常被用于磁盤的I/O請求上,如果多個進程都有訪問某個文件,于是該文件便被作為cache以方便下次被訪問,這樣可以提高系統性能。

三、當運行一個進程時系統內存不夠會怎么樣?

在工作中會遇到這樣的場景:假設我的服務器就只有32G內存,當前以及使用了28G,而現在需要再運行一個需要10G內存的進程,那么會發生什么呢?

如果這個進程沒有做什么優先級設定,那么這個進程會觸發OOM,然后被系統kill掉。

什么是OOM?

OOM的全稱是Out of memory Killer,叫內存終結者。在內存過低的情況下,OS(系統)會殺掉你的進程。當探測到內存使用不足的時候,OOM會被激活,然后挑選一個進程去終結掉。選擇的目標進程使用的是一套算法,后面會說。

進程在運行過程中是怎么使用內存的呢?Linux允許程序申請比系統可用內存更多的內存,這個機制叫做Overcommit。這樣做是處于優化系統考慮,因為不是所有的程序申請了內存就立刻使用的,當開始使用的時候,可能系統已經回收了一些資源,但是當使用overcommit給的內存時,系統還沒有資源的話,這個時候就會觸發OOM,然后干掉進程。

有的時候在系統內存不是很充足的情況下需要運行一個重要的程序,那么該如何避免此程序被OOM干掉呢?

調整進程的oom_adj值:Linux下每個進程都有個OOM權重,在/proc/$pid/oom_adj里面,取值-17~+15,取值越高,越容易被干掉。

OOM Killer最終是通過/proc/$pid/oom_score這個值來決定哪個進程被干掉。這個值是系統綜合進程的內存消耗量、CPU時間、存活時間和oom_adj計算出來的。消耗內存越多分越高,存活時間越長分越低。總之。總的策略就是:損失最少的工作,釋放最大的內存同時不傷及無辜的用來很大內存的進程,并且殺掉的進程數盡量少。另外,Linux在計算進程的內存消耗的時候,會將子進程所耗內存的一半同時計算到父進程中,這樣子進程較多的進程就越容易被殺掉。

在Linux中如何查看是否有進程被OOM干掉了呢?

運行dmesg即可查詢到,或者到/var/log/messages中查看。從網上找了個OOM的圖:

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

    關注

    68

    文章

    11066

    瀏覽量

    216620
  • Linux
    +關注

    關注

    87

    文章

    11499

    瀏覽量

    213348
  • 服務器
    +關注

    關注

    13

    文章

    9759

    瀏覽量

    87652
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    PLC到底是什么呢?

    PLC到底是什么呢?
    發表于 10-10 09:30

    這是到底是什么元件?

    開關電源一個小貼片,在k2717前端。絲印MY還有133字樣。這到底是什么元件?什么原理?
    發表于 05-26 15:06

    如何評價《Linux就該這么學》這本書?

    的第一篇就是搭建環境,但是小白真的可能會問虛擬機是個啥?Linux到底是個啥?甚至有些小白同學還不會裝Windows系統,或者還沒搞明白計算機這塊“鐵疙瘩”到底是怎么運行起來的,如果你也是連這些問題都沒
    發表于 10-21 13:01

    請問CKFA到底是什么

    在其他網站看到CKFA,這個到底是什么啊?具體怎么用啊?希望能有比較詳細的解釋,謝謝!
    發表于 08-20 07:18

    這個到底是什么電路

    這個到底是積分電路還是濾波電路還是RC延時電路,我已經頭暈了
    發表于 01-20 21:56

    DSP到底是什么?DSP的要素是什么?

    DSP設計人員還是要知道到底DSP到底是什么?DSP的三要素是:性能、價格與功耗嗎?
    發表于 03-05 06:23

    QPainter到底是什么?

    QPainter到底是什么?
    發表于 09-28 06:30

    STM32固件庫到底是什么?

    STM32固件庫到底是什么?
    發表于 11-30 07:34

    3516 L1 Linux版本成功啟動!可以愉快地玩耍了~

    set 編譯的是L0 和 L1, ipcamera_hispark_taurus 是L1 liteOS-A內核的,那這個是 ipcamera_hispark_taurus_linux 到底是干嘛用
    發表于 01-06 10:39

    到底是學STM32還是學嵌入式linux

    01話 題經常有大學生同學糾結:我到底是學STM32還是學嵌入式linux。這個問題很多人都會有自己的看法,今天我試著從多個角度,把我了解到的事實講一下,希望對大家有所啟發。STM3202STM32
    發表于 02-07 07:06

    RGB屏到底是什么?

    RGB屏到底是什么?
    發表于 02-14 07:18

    什么是嵌入式Linux

    Linux到底是什么呢? 嵌入式linux 是將日益流行的Linux操作系統進行裁剪修改,使之能在嵌入式計算機系統上運行的一種操作系統。簡單來說,是除了電腦之外可以運行程序的設備,將C
    發表于 10-11 13:47

    Linux到底是怎么樣來的?發展過程是如何的

    Linux 內核非常龐大,我說的非常大并不是為了嚇唬大家,確實是非常多的代碼,超過 600 萬行的代碼,所以我寫文章介紹 Linux 內核,也不可能每一行代碼去分析,但是我會提煉其中的重點出來,告訴
    的頭像 發表于 08-11 11:00 ?4073次閱讀

    Linux內核到底是什么應該如何學習

    Linux可以說是近期非常火的了,有的人想學習linux內核,那他到底是什么呢?
    發表于 10-06 18:02 ?2083次閱讀

    Linux到底是如何收發網絡包的

    為了使得多種設備能通過網絡相互通信,和為了解決各種不同設備在網絡互聯中的兼容性問題,國際標標準化組織制定了開放式系統互聯通信參考模型(pen System Interconnection Reference Model),也就是 OSI 網絡模型,該模型主要有 7 層,分別是應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層以及物理層。
    發表于 01-03 17:49 ?856次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>到底是</b>如何收發網絡包的