精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學習啦 > 學習電腦 > 操作系統(tǒng) > Linux教程 > linux修改共享內存命令

      linux修改共享內存命令

      時間: 佳洲1085 分享

      linux修改共享內存命令

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

        linux修改共享內存的命令和方法

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

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

        #修改內核共享內存大小;

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

        #說明:這里的值為內存的一半;

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

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

        修改完成以后,重起機器就搞定。

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

        擴展:linux如何實現(xiàn)共享內存同步

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

        有名信號量既可用于線程間的同步,又可用于進程間的同步。

        兩個進程,對同一個共享內存讀寫,可利用有名信號量來進行同步。一個進程寫,另一個進程讀,利用兩個有名信號量semr, semw。semr信號量控制能否讀,初始化為0。 semw信號量控制能否寫,初始為1。

        讀共享內存的程序示例代碼如下

        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);

        }

        寫共享內存的程序示例代碼如下

        。。。。。。

        //同讀的程序

        while (1)

        {

        sem_wait(semw);

        printf(">");

        fgets(shmadd, MAXSIZE, stdin);

        sem_post(semr);

        }

        方法二、利用POSIX無名信號燈實現(xiàn)共享內存的同步

        POSIX無名信號量是基于內存的信號量,可以用于線程間同步也可以用于進程間同步。若實現(xiàn)進程間同步,需要在共享內存中來創(chuàng)建無名信號量。

        因此,共享內存需要定義以下的結構體。

        typedef struct

        {

        sem_t semr;

        sem_t semw;

        char buf[MAXSIZE];

        }SHM;

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

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

        System V的信號燈是一個或者多個信號燈的一個集合。其中的每一個都是單獨的計數(shù)信號燈。而Posix信號燈指的是單個計數(shù)信號燈

        System V 信號燈由內核維護,主要函數(shù)semget,semop,semctl 。

        一個進程寫,另一個進程讀,信號燈集中有兩個信號燈,下標0代表能否讀,初始化為0。 下標1代表能否寫,初始為1。

        程序流程如下:

        寫的流程和前邊的類似。

        方法四、利用信號實現(xiàn)共享內存的同步

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

        思路:

        reader和writer通過信號通信必須獲取對方的進程號,可利用共享內存保存雙方的進程號。

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

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

      3596787