不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(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)存讀寫(xiě),可利用有名信號(hào)量來(lái)進(jìn)行同步。一個(gè)進(jìn)程寫(xiě),另一個(gè)進(jìn)程讀,利用兩個(gè)有名信號(hào)量semr, semw。semr信號(hào)量控制能否讀,初始化為0。 semw信號(hào)量控制能否寫(xiě),初始為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);

  }

  寫(xiě)共享內(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;

  讀、寫(xiě)程序流程如下圖所示。

  方法三、利用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)程寫(xiě),另一個(gè)進(jìn)程讀,信號(hào)燈集中有兩個(gè)信號(hào)燈,下標(biāo)0代表能否讀,初始化為0。 下標(biāo)1代表能否寫(xiě),初始為1。

  程序流程如下:

  寫(xiě)的流程和前邊的類(lèi)似。

  方法四、利用信號(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)該程序(流程和前邊類(lèi)似)。

3596787