最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳談Linux寫時拷貝技術(shù)(copy-on-write)必看篇

 更新時間:2017年07月03日 15:19:00   投稿:jingxian  
下面小編就為大家?guī)硪黄斦凩inux寫時拷貝技術(shù)(copy-on-write)必看篇。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

COW技術(shù)初窺

在linux程序中,fork()會產(chǎn)生一個和父進(jìn)程完全相同的子進(jìn)程,但子進(jìn)程在此后多會exec系統(tǒng)調(diào)用,出于效率考慮,linux中引入了“寫時復(fù)制”技術(shù),也就是只有進(jìn)程空間的各段的內(nèi)容要發(fā)生變化時,才將父進(jìn)程的內(nèi)容復(fù)制一份給子進(jìn)程。

那么子進(jìn)程的物理空間沒有代碼,怎么去取指令執(zhí)行exec系統(tǒng)調(diào)用呢??

在fork之后exec之前兩個進(jìn)程用的是相同的物理空間(內(nèi)存區(qū)),子進(jìn)程的代碼段、數(shù)據(jù)段、堆棧都是指向父進(jìn)程的物理空間,也就是說,兩者的虛擬空間不同,其對應(yīng)的物理空間是一個。當(dāng)父子進(jìn)程中有更改相應(yīng)段的行為發(fā)生時,再為子進(jìn)程相應(yīng)的段分配物理空間。如果不是因?yàn)閑xec,內(nèi)核會給子進(jìn)程的數(shù)據(jù)段、堆棧段分配相應(yīng)的物理空間(至此兩者都有各自的進(jìn)程空間,互不影響),而代碼段繼續(xù)共享父進(jìn)程的物理空間(兩者的代碼完全相同)。而如果是因?yàn)閑xec,由于兩者執(zhí)行的代碼不同,子進(jìn)程的代碼段也會分配單獨(dú)的物理空間。

在網(wǎng)上看到的還有個細(xì)節(jié)問題是:fork之后內(nèi)核會將子進(jìn)程排在隊(duì)列的前面,以讓子進(jìn)程先執(zhí)行,以免父進(jìn)程執(zhí)行導(dǎo)致寫時復(fù)制,而后子進(jìn)程執(zhí)行exec系統(tǒng)調(diào)用,因無意義的復(fù)制而造成效率的下降。

COW詳述

現(xiàn)在有一個父進(jìn)程P1,這是一個主體,那么它是有靈魂也是有身體的?,F(xiàn)在在其虛擬地址空間(有相應(yīng)的數(shù)據(jù)結(jié)構(gòu)表示)上有:正文段,數(shù)據(jù)段,堆,棧這四個部分,相應(yīng)地,內(nèi)核要為這四個部分分配給自的物理塊。即正文段塊、數(shù)據(jù)段塊、堆塊、棧塊。至于如何分配,這是內(nèi)核去做的事,在此不詳述。

1. 現(xiàn)在P1用fork()函數(shù)為進(jìn)程創(chuàng)建一個子進(jìn)程P2

內(nèi)核:

(1) 復(fù)制P1的正文段,數(shù)據(jù)段,堆,棧這四個部分,注意是其內(nèi)容相同。

(2) 為這四個部分分配物理塊,P2的:正文段(為P1的正文段的物理塊,其實(shí)就是不為P2分配正文段塊,讓P2的正文段指向P1的正文段塊),數(shù)據(jù)段(P2自己的數(shù)據(jù)段塊,為其分配對應(yīng)的塊),堆(P2自己的堆塊),棧(P2自己的棧塊)。如下圖所示,同左到右大的方向箭頭表示復(fù)制內(nèi)容:

 2. 寫時復(fù)制技術(shù)

寫時復(fù)制技術(shù):內(nèi)核只為新生成的子進(jìn)程創(chuàng)建虛擬空間結(jié)構(gòu),它們復(fù)制于父進(jìn)程的虛擬空間結(jié)構(gòu),但是不為這些段分配物理內(nèi)存,它們共享父進(jìn)程的物理空間,當(dāng)父子進(jìn)程中有更改相應(yīng)的段的行為發(fā)生時,再為子進(jìn)程相應(yīng)的段分配物理空間。

3. vfork

vfork的做法更加簡單粗暴,內(nèi)核連子進(jìn)程的虛擬地址空間也不創(chuàng)建了,直接共享了父進(jìn)程的虛擬空間,當(dāng)然了,這種做法就順?biāo)浦鄣墓蚕砹烁高M(jìn)程的物理空間

總結(jié)

傳統(tǒng)的fork()系統(tǒng)調(diào)用直接把所有的資源復(fù)制給新創(chuàng)建的進(jìn)程。這種實(shí)現(xiàn)過于簡單并且效率低下,因?yàn)樗截惖臄?shù)據(jù)也許并不共享,更糟的情況是,如果新進(jìn)程打算立即執(zhí)行一個新的映像,那么所有的拷貝將是無用功。

Linux的fork()使用寫時拷貝(copy-on-write)頁實(shí)現(xiàn)。寫時拷貝是一種可以推遲甚至免除拷貝數(shù)據(jù)的技術(shù)。內(nèi)核此時并不復(fù)制整個地址空間,而是讓父進(jìn)程和子進(jìn)程共享一個拷貝。只有在需要寫入的時候,數(shù)據(jù)才會復(fù)制,從而使各個進(jìn)程擁有各自的拷貝。也就是說,資源的復(fù)制只有在需要寫入的時候才進(jìn)行,在此之前,只是以只讀方式共享。這種技術(shù)使地址空間的頁的拷貝被推遲到實(shí)際發(fā)生寫入的時候。

在頁根本不會被寫入的情況下,舉例來說,fork()之后立即調(diào)用exec(),它們就無需復(fù)制了,fork()的實(shí)際開銷就是復(fù)制父進(jìn)程的頁表以及給子進(jìn)程創(chuàng)建唯一的進(jìn)程描述符。在一般情況下,進(jìn)程創(chuàng)建后都會馬上運(yùn)行一個可執(zhí)行的文件,這種優(yōu)化可以避免拷貝大量根本不會使用的數(shù)據(jù)(地址空間常常包含數(shù)十兆的數(shù)據(jù))。由于Unix強(qiáng)調(diào)進(jìn)程快速執(zhí)行的能力,所以這個優(yōu)化是很重要的,注:Linux COW和exec沒有必然聯(lián)系

以上這篇詳談Linux寫時拷貝技術(shù)(copy-on-write)必看篇就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何調(diào)試Linux shell腳本

    如何調(diào)試Linux shell腳本

    最簡單的調(diào)試命令當(dāng)然是使用echo命令。您可以使用echo在任何懷疑出錯的地方打印任何變量值。這也是絕大多數(shù)的shell程序員要花費(fèi)80%的時間來調(diào)試程序的原因。Shell程序的好處在于不需要重新編譯,插入一個echo命令也不需要多少時間
    2013-06-06
  • shell腳本監(jiān)控mysql主從狀態(tài)

    shell腳本監(jiān)控mysql主從狀態(tài)

    這篇文章主要介紹了shell腳本監(jiān)控mysql主從狀態(tài),如果異常則郵件警告,需要的朋友可以參考下
    2014-05-05
  • Bash?中?nohup?與?&?的區(qū)別及用法詳解

    Bash?中?nohup?與?&?的區(qū)別及用法詳解

    在Bash中,`&`、`nohup`和`disown`各有用途:`&`用于后臺運(yùn)行命令,選擇合適的工具可以實(shí)現(xiàn)后臺任務(wù)的穩(wěn)定運(yùn)行,本文介紹Bash?中?nohup?與?&?的區(qū)別及用法,感興趣的朋友一起看看吧
    2025-01-01
  • Linux Netcat(nc)命令的使用方法詳解

    Linux Netcat(nc)命令的使用方法詳解

    在網(wǎng)絡(luò)編程和網(wǎng)絡(luò)安全領(lǐng)域,Netcat(簡稱 nc)是一個功能強(qiáng)大的工具,它可以用來監(jiān)聽網(wǎng)絡(luò)端口、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)等,Netcat 因其靈活性和強(qiáng)大的功能,被廣泛用于網(wǎng)絡(luò)調(diào)試和安全測試,本文介紹了Linux Netcat(nc)命令的使用方法,需要的朋友可以參考下
    2024-12-12
  • 高級開發(fā)運(yùn)維測試必須掌握的envsubst命令使用詳解

    高級開發(fā)運(yùn)維測試必須掌握的envsubst命令使用詳解

    這篇文章主要為大家介紹了高級開發(fā)運(yùn)維測試必須掌握的envsubst命令使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • scp 將數(shù)據(jù)從一臺linux服務(wù)器復(fù)制到另一臺linux服務(wù)器

    scp 將數(shù)據(jù)從一臺linux服務(wù)器復(fù)制到另一臺linux服務(wù)器

    這篇文章主要介紹了scp 將數(shù)據(jù)從一臺linux服務(wù)器復(fù)制到另一臺linux服務(wù)器,需要的朋友可以參考下
    2017-09-09
  • Shell常用操作符總結(jié)

    Shell常用操作符總結(jié)

    這篇文章主要介紹了Shell常用操作符總結(jié),本文講解了算術(shù)操作 符、關(guān)系操作符、測試操作符等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Shell腳本之Expect免交互的實(shí)現(xiàn)

    Shell腳本之Expect免交互的實(shí)現(xiàn)

    這篇文章主要介紹了Shell腳本之Expect免交互的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Linux中nmcli命令使用詳解

    Linux中nmcli命令使用詳解

    nmcli是Linux系統(tǒng)中的一個命令行工具,用于管理網(wǎng)絡(luò)連接,它可以幫助用戶配置和管理網(wǎng)絡(luò)連接、網(wǎng)絡(luò)設(shè)備以及網(wǎng)絡(luò)連接的屬性,本文給大家詳細(xì)介紹了Linux nmcli命令使用方法,需要的朋友可以參考下
    2024-03-03
  • linux dev 常見特殊設(shè)備介紹與應(yīng)用(loop,null,zero,full,random)

    linux dev 常見特殊設(shè)備介紹與應(yīng)用(loop,null,zero,full,random)

    這篇文章主要介紹了linux dev 常見特殊設(shè)備介紹與應(yīng)用(loop,null,zero,full,random),需要的朋友可以參考下
    2015-10-10

最新評論

峨山| 红桥区| 卢龙县| 龙川县| 财经| 高雄县| 抚松县| 大城县| 南通市| 青阳县| 东乡县| 佛山市| 溧阳市| 米脂县| 湖南省| 花莲县| 平原县| 长子县| 万盛区| 神池县| 怀集县| 林州市| 伊通| 文登市| 博乐市| 德安县| 喀喇沁旗| 聂拉木县| 广宁县| 长丰县| 周口市| 峨山| 平原县| 驻马店市| 宁城县| 剑川县| 赣州市| 崇阳县| 济宁市| 榆林市| 黔江区|