學習啦 > 學習電腦 > 操作系統(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