国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內(nèi)不再提示

Linux到底是什么

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

掃碼添加小助手

加入工程師交流群

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

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

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

三、當運行一個進程時系統(tǒng)內(nèi)存不夠會怎么樣?

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

如果這個進程沒有做什么優(yōu)先級設定,那么這個進程會觸發(fā)OOM,然后被系統(tǒng)kill掉。

什么是OOM?

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

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

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

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

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

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

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

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

    關注

    68

    文章

    11279

    瀏覽量

    224991
  • Linux
    +關注

    關注

    88

    文章

    11760

    瀏覽量

    219033
  • 服務器
    +關注

    關注

    14

    文章

    10253

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    請問編譯純rtos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?

    編譯純rtos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?
    發(fā)表于 07-11 07:22

    PLC到底是什么呢?

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

    這是到底是什么元件?

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

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

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

    請問CKFA到底是什么

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

    這個到底是什么電路

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

    QPainter到底是什么?

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

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

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

    RGB屏到底是什么?

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

    什么是嵌入式Linux

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

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

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

    Linux內(nèi)核到底是什么應該如何學習

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

    Linux到底是如何收發(fā)網(wǎng)絡包的

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

    IEC 到底是什么?為什么它能影響全球?

    IEC 到底是什么?為什么它能影響全球?
    的頭像 發(fā)表于 09-04 17:07 ?3559次閱讀

    學習Linux應該從哪里開始?

    、交叉編譯、網(wǎng)絡棧、文件系統(tǒng)……到底從哪里開始學,才能既不繞彎路,又能學得“有感覺”? 今天, 深圳市鋇錸技術有限公司 就來帶你拆解這個問題。 一、先理解:Linux 到底是什么? 很多人學
    的頭像 發(fā)表于 10-16 09:51 ?455次閱讀
    學習<b class='flag-5'>Linux</b>應該從哪里開始?