国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

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

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

    時間: 佳洲1085 分享

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

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

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

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

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

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

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

      #說明:這里的值為內(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個,修改以后,只有1個。oracle在一個內(nèi)存分段內(nèi),使得數(shù)據(jù)交換的速度有所提高。

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

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

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

      兩個進(jìn)程,對同一個共享內(nèi)存讀寫,可利用有名信號量來進(jìn)行同步。一個進(jìn)程寫,另一個進(jìn)程讀,利用兩個有名信號量semr, semw。semr信號量控制能否讀,初始化為0。 semw信號量控制能否寫,初始為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無名信號燈實現(xiàn)共享內(nèi)存的同步

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

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

      typedef struct

      {

      sem_t semr;

      sem_t semw;

      char buf[MAXSIZE];

      }SHM;

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

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

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

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

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

      程序流程如下:

      寫的流程和前邊的類似。

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

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

      思路:

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

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

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

    3596787