亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 > linux修改共享內(nèi)存命令

      linux修改共享內(nèi)存命令

      時(shí)間: 佳洲1085 分享

      linux修改共享內(nèi)存命令

        一般的以為修改系統(tǒng)共享內(nèi)存需要修改內(nèi)核程序,然后make,很麻煩。下面由學(xué)習(xí)啦小編為大家整理了簡(jiǎn)單的linux修改共享內(nèi)存的命令的相關(guān)知識(shí),希望大家喜歡!

        linux修改共享內(nèi)存的命令和方法

        其實(shí),只要在rc.local的加入一點(diǎn)東西,就可以免去修改內(nèi)核的麻煩。修改方法如下:修改/etc/rc.d/rc.local文件。

        在文件的前面注釋的后面加入以下行:

        #修改內(nèi)核共享內(nèi)存大小;

        echo 134217728 > /proc/sys/kernel/shmmax;

        #說(shuō)明:這里的值為內(nèi)存的一半;

        #如果系統(tǒng)內(nèi)存是256M,則值為134217728 ;

        #如果系統(tǒng)內(nèi)存是512M,則值為268435456;

        修改完成以后,重起機(jī)器就搞定。

        linxu默認(rèn)情況下的共享內(nèi)存大小好像是32M,我的機(jī)器修改前用ipcs查看,oracle分段是10個(gè),修改以后,只有1個(gè)。oracle在一個(gè)內(nèi)存分段內(nèi),使得數(shù)據(jù)交換的速度有所提高。

        擴(kuò)展:linux如何實(shí)現(xiàn)共享內(nèi)存同步

        linux實(shí)現(xiàn)共享內(nèi)存方法一、利用POSIX有名信號(hào)燈實(shí)現(xiàn)共享內(nèi)存的同步

        有名信號(hào)量既可用于線程間的同步,又可用于進(jìn)程間的同步。

        兩個(gè)進(jìn)程,對(duì)同一個(gè)共享內(nèi)存讀寫,可利用有名信號(hào)量來(lái)進(jìn)行同步。一個(gè)進(jìn)程寫,另一個(gè)進(jìn)程讀,利用兩個(gè)有名信號(hào)量semr, semw。semr信號(hào)量控制能否讀,初始化為0。 semw信號(hào)量控制能否寫,初始為1。

        讀共享內(nèi)存的程序示例代碼如下

        semr = sem_open("mysem_r", O_CREAT | O_RDWR , 0666, 0);

        if (semr == SEM_FAILED)

        {

        printf("errno=%d\n", errno);

        return -1;

        }

        semw = sem_open("mysem_w", O_CREAT | O_RDWR, 0666, 1);

        if (semw == SEM_FAILED)

        {

        printf("errno=%d\n", errno);

        return -1;

        }

        if ((shmid = shmget(key, MAXSIZE, 0666 | IPC_CREAT)) == -1)

        {

        perror("semget");

        exit(-1);

        }

        if ((shmadd = (char *)shmat(shmid, NULL, 0)) == (char *)(-1))

        {

        perror("shmat");

        exit(-1);

        }

        while (1)

        {

        em_wait(semr);

        printf("%s\n", shmadd);

        sem_post(semw);

        }

        寫共享內(nèi)存的程序示例代碼如下

        。。。。。。

        //同讀的程序

        while (1)

        {

        sem_wait(semw);

        printf(">");

        fgets(shmadd, MAXSIZE, stdin);

        sem_post(semr);

        }

        方法二、利用POSIX無(wú)名信號(hào)燈實(shí)現(xiàn)共享內(nèi)存的同步

        POSIX無(wú)名信號(hào)量是基于內(nèi)存的信號(hào)量,可以用于線程間同步也可以用于進(jìn)程間同步。若實(shí)現(xiàn)進(jìn)程間同步,需要在共享內(nèi)存中來(lái)創(chuàng)建無(wú)名信號(hào)量。

        因此,共享內(nèi)存需要定義以下的結(jié)構(gòu)體。

        typedef struct

        {

        sem_t semr;

        sem_t semw;

        char buf[MAXSIZE];

        }SHM;

        讀、寫程序流程如下圖所示。

        方法三、利用System V的信號(hào)燈實(shí)現(xiàn)共享內(nèi)存的同步

        System V的信號(hào)燈是一個(gè)或者多個(gè)信號(hào)燈的一個(gè)集合。其中的每一個(gè)都是單獨(dú)的計(jì)數(shù)信號(hào)燈。而Posix信號(hào)燈指的是單個(gè)計(jì)數(shù)信號(hào)燈

        System V 信號(hào)燈由內(nèi)核維護(hù),主要函數(shù)semget,semop,semctl 。

        一個(gè)進(jìn)程寫,另一個(gè)進(jìn)程讀,信號(hào)燈集中有兩個(gè)信號(hào)燈,下標(biāo)0代表能否讀,初始化為0。 下標(biāo)1代表能否寫,初始為1。

        程序流程如下:

        寫的流程和前邊的類似。

        方法四、利用信號(hào)實(shí)現(xiàn)共享內(nèi)存的同步

        信號(hào)是在軟件層次上對(duì)中斷機(jī)制的一種模擬,是一種異步通信方式。利用信號(hào)也可以實(shí)現(xiàn)共享內(nèi)存的同步。

        思路:

        reader和writer通過(guò)信號(hào)通信必須獲取對(duì)方的進(jìn)程號(hào),可利用共享內(nèi)存保存雙方的進(jìn)程號(hào)。

        reader和writer運(yùn)行的順序不確定,可約定先運(yùn)行的進(jìn)程創(chuàng)建共享內(nèi)存并初始化。

        利用pause, kill, signal等函數(shù)可以實(shí)現(xiàn)該程序(流程和前邊類似)。

      3596787