歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 低壓集抄系統中Linux共享內存使用分析

低壓集抄系統中Linux共享內存使用分析

日期:2017/2/28 16:14:57   编辑:Linux教程

1. 概述

Linux由於歷史原因,其IPC分為SYSTEM V版本和POSIX版本。本文主要討論在共享內存方面這兩個版本之間的區別。

各共享內存IPC的函數對照表:

IPC

POSIX

SYSTEM V

頭文件

<sys/mman.h>

<sys/shm.h>

IPC創建和刪除

shm_open

shm_unlink

shmget

IPC控制

ftruncate

fstat

shmctl

IPC操作

mmap

munmap

msync

shmat

shmdt

在實現機制方面,POSIX共享內存是采用IO映射的方式來實現的,即通過系統調用mmap()映射一個普通文件實現共享內存。SYSTEM V共享內存則是通過對特殊文件系統shm中的文件來映射實現的,也就是說,每個共���內存區域對應特殊文件系統shm中的一個文件。它們之間的關鍵區別是POSIX共享內存把一個普通文件映射到系統內存中實現,而SYSTEM V共享內存則是直接在shm特殊文件系統上實現。

2. 低壓集抄嵌軟中共享內存使用分析

目前低壓集抄嵌軟采用POSIX共享內存實現進程間通信和系統級數據的內存共享。而POSIX共享內存需要通過一個普通文件來映射實現共享內存,於是系統在啟動時創建ramfs文件系統,再在其上建立共享內存文件。ramfs是內存文件系統,它直接建立在內存上,占用相當多的內存空間。同時由於低壓集抄系統采用的ucLinux不支持虛擬內存,這樣在映射時又占用一大部分內存空間,直接導致了共享內存對雙份內存空間的占用。

那為什麼不能將普通文件建立在flash文件系統上呢?由於NAND FLASH存儲器件的寫操作的特殊性,決定了嵌軟的寫數據操作不能太頻繁,否則有可能影響NAND FLASH器件的壽命。據《Linux內核源代碼情景分析》下載見 http://www.linuxidc.com/Linux/2011-05/36202.htm,POSIX共享內存會由系統不定時將共享內存中的內容刷新到普通文件中。基於此,當初設計時采用ramfs也不是沒有道理的。

3. 低壓集抄嵌軟中共享內存改進建議

由於目前裝置生產中成本控制較嚴,內存容量較小,而低壓集抄系統須共享的數據較多,如在北京集抄嵌軟中系統共享數據達到10M,通過POSIX共享內存映射機制實現進程信息共享後,將內存耗去20M。基於此,建議共享內存采用SYSTEM V版本提供的方法來實現。由於SYSTEM V共享內存不需要通過普通文件映射來實現,所以不需要刷新到普通文件中。在實際使用中可以比POSIX省近一半內存,非常可觀。

要驗證以上設想,還需要做兩點工作:

1、確認目前所用的Linux系統支持SYSTEM V共享內存及shm特殊文件系統。

2、實現一個原型,證明以上設想是實際可行的。

Copyright © Linux教程網 All Rights Reserved