I.GPGGA訊號:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<11>,<12>,<13>
1) 定位標準時間(UTC time)格式:時時分分秒秒.秒秒秒(hhmmss.sss)。
2) 緯度,格式:度度分分.分分分分(ddmm.mmmm)。
3) 緯度區分,北半球(N)或南半球(S)。
4) 經度,格式:度度分分.分分分分。
5) 經度區分,東(E)半球或西(W)半球。
6) 定位代號。
0 = 未定位或無效的定位。
1 = GPS SPS 格式(SPS為商業用途格式),已定位。
7) 使用中的衛星顆數,OO 至 12。
8) 水平稀釋精度, 0.5 至 99.9米。
9) MSL 海拔, -9999.9 至 99999.9 米。
10) Geoidal高度, -999.9 至 9999.9 米。
11) 偏差修正DGPS (RTCM SC-104)資料年限,上次有效的RTCM傳輸至今的秒數(若非DGPS,則數字為0)。
12) 偏差修正(DGPS)參考基地台代號,OOOO 至 1023。(0表非DGPS)。
13) Checksum.(檢查位元)。
II.GPRMC訊號
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>
1) 標準定位時間(UTC time)格式:時時分分秒秒.秒秒秒(hhmmss.sss)。
2) 定位狀態,A = 資料可用,V = 資料不可用。
3) 緯度,格式:度度分分.分分分分(ddmm.mmmm)。
4) 緯度區分,北半球(N)或南半球(S)。
5) 經度,格式:度度分分.分分分分。
6) 經度區分,東(E)半球或西(W)半球。
7) 相對位移速度, 0.0 至 1851.8 knots。
8) 相對位移方向,000.0 至 359.9度。實際值。
9) 日期,格式:日日月月年年(ddmmyy)。
10) 磁極變量,000.0 至180.0。
11) 度數。
12) Checksum.(檢查位元) 。
III.GPGSA訊號
$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7>。
1) 模式 1:定位型式 1 = 未定位, 2 = 二維定位, 3 = 三維定位。
2) 模式 2:M = 手動, A = 自動。
3) PRN 數字:01 至 32 表天空使用中的衛星編號,最多可接收12顆衛星資訊。
4) PDOP-位置精度稀釋 0.5 至 99.9. 。
5) HDOP-水平精度稀釋 0.5 to 99.9. 。
6) VDOP-垂直精度稀釋 0.5 to 99.9. 。
7) Checksum.(檢查位元). 。
IV.GPGSV訊號
$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,…<4>,<5>,<6>,<7>,<8>。
1) 天空中收到訊號的衛星總數。
2) 定位的衛星總數。
3) 天空中的衛星總數,00 至 12。
4) 衛星編號, 01 至 32。
5) 衛星仰角, OO 至 90 度。
6) 衛星方位角, OOO 至 359 度。實際值。
7) 訊號雜訊比(C/No), 00 至 99 dB;無表未接收到訊號。
第<4>,<5>,<6>,<7>項個別衛星會重複出現,每行最多有四顆衛星。其餘衛星資訊會於次一行出現,若未使用,這些欄位會空白。
8) Checksum.(檢查位元)。
出處www.itpilot.org.tw/email/itis/59/59-j.htm
2010年6月3日 星期四
2010年5月11日 星期二
嵌入式網頁伺服器 - BOA
BOA是一種精簡的WEB SERVICE在嵌入式系統中有很高的應用價值~
如何移植BOA Web Server 到嵌入式開發板呢?請參照下列步驟~在BOA伺服器中
支援用C語言寫的 CGI程式~所以我們可以透過一些CGI程式來達到控制硬體目標~!
Step 1 下載BOA 原始碼
下載 boa-0.94.13.tar.gz
Step 2 產生一個Makefile
Step 3 修改Makefile檔案內的編譯器路徑
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
Step 4 設定BOA
修改BOA原始檔src的boa.conf 這個設定檔 並放到根目錄系統/etc/boa
Port 80
User root
Group root
ErrorLog /dev/console
AccessLog /dev/null
ServerName test
DocumentRoot /www
DirectoryIndex index.html
Step 5 把編譯好的boa執行檔 複製到/bin 並啟動boa
如何移植BOA Web Server 到嵌入式開發板呢?請參照下列步驟~在BOA伺服器中
支援用C語言寫的 CGI程式~所以我們可以透過一些CGI程式來達到控制硬體目標~!
Step 1 下載BOA 原始碼
下載 boa-0.94.13.tar.gz
#tar zxvf boa-0.94.13.tar.gz Step 2 產生一個Makefile
#./src/configure -host=arm-linux Step 3 修改Makefile檔案內的編譯器路徑
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
#make #arm-linux-strip boa Step 4 設定BOA
修改BOA原始檔src的boa.conf 這個設定檔 並放到根目錄系統/etc/boa
Port 80
User root
Group root
ErrorLog /dev/console
AccessLog /dev/null
ServerName test
DocumentRoot /www
DirectoryIndex index.html
Step 5 把編譯好的boa執行檔 複製到/bin 並啟動boa
#./boa&
2010年5月9日 星期日
cs8900在2.6.14上的移植
添加驅動程序源代碼,這涉及到以下幾個方面。
1、把cs8900.c和cs8900.h兩個針對2.6.14的內核的驅動程序源代碼,將其放在drivers/net/arm/目錄下面。
#cp cs8900.c ./drivers/net/arm/
#cp cs8900.h ./drivers/net/arm/
並在cs8900_probe()函數中,memset (&priv,0,sizeof (cs8900_t));函數之後添加如下兩條語句:
__raw_writel(0x2211d110,S3C2410_BWSCON);
__raw_writel(0x1f7c,S3C2410_BANKCON3);
2、修改drivers/net/arm/目錄下的Kconfig文件,在最後添加如下內容:
Config ARM_CS8900
tristate "CS8900 support"
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
help
Support for CS8900A chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from as well as . To compile this driver as a module, choose M here and read. The module will be called cs8900.o.
內核系統配置文件由2.4版本的config.in變成了2.6版本Kconfig文件,在這個文件裡面添加如上內容,則在運行make menuconfig或者make xconfig命令的時候就會出現:
[ ] CS8900 support
這一選項。
3、修改drivers/net/arm/目錄下的Makefile文件,在最後添加如下內容:
obj-$(CONFIG_ARM_CS8900) += cs8900.o
2.6版本內核的Makefile文件也與2.4版本的有所不同。添加以上語句,就會使內核在編譯的時候根據配置將cs8900A的驅動程序以模塊或靜態的方式編譯到內核當中。
4、在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到smdk2410_iodesc[]結構數組,添加如下如下內容:{vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE}
修改之後變成了:
static struct map_desc smdk2410_iodesc[] __initdata = {
/* nothing here yet */
/* Map the ethernet controller CS8900A */ {vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE}
};
添加#include <asm-arm/arch-s3c2410/smdk2410.h>
由於在驅動程序的開發的時候,在驅動程序當中所用到的跟設備有關的地址都是虛擬地址,也就是說驅動程序操作的都是虛擬地址,那麼要使驅動程序對設備的操作反映到設備上去,就得將設備的物理地址映射到正確的虛擬地址上去,從而保證驅動程序對虛擬地址的操作也就是對相應的物理地址操作。以上添加的語句就是為了將網卡的物理地址(0x19000000)映射到vSMDK2410_ETH_IO所指向的虛擬地址上去,上面的結構還定義了網卡虛擬地址所佔用的區間,也就是從vSMDK2410_ETH_IO開始的SZ_1M大小的去間,並指定了該區間所指向的域(的屬性)。
5、在include/asm-arm/arch-s3c2410/目錄下創建smdk2410.h文件,其內容為:
#ifndef _INCLUDE_SMDK2410_H_
#define _INCLUDE_SMDK2410_H_
#include <linux/config.h>
#define pSMDK2410_ETH_IO 0x19000000
#define vSMDK2410_ETH_IO 0xE0000000
#define SMDK2410_ETH_IRQ IRQ_EINT9
#endif // _INCLUDE_SMDK2410_H_
因為在網卡驅動程序當中,用到了一些常量,所以特意在此添加這個頭文件。這個頭文件定義了網卡的物理地址、虛擬地址以及網卡佔用的中斷線。
6、配置、編譯內核。在內核頂層目錄當中鍵入:
#make smdk2410_defconfig
由於2.6的內核默認就支持了S3C2410,所以就有一個默認的內核配置文件。裡面只是包括了一個簡單的配置,要使網卡編譯進內核,還要進行手工配置。
#make menuconfig
Networking support --->
Ethernet (10 or 100Mbit) --->
[*] CS8900 support
將剛才添加的網卡驅動程序靜態添加到內核當中。
最後進行內核編譯。
#make
然後將鏡像下載到開發板中去,這樣就搞定了。通過nfs可以進入終端命令行了。
1、把cs8900.c和cs8900.h兩個針對2.6.14的內核的驅動程序源代碼,將其放在drivers/net/arm/目錄下面。
#cp cs8900.c ./drivers/net/arm/
#cp cs8900.h ./drivers/net/arm/
並在cs8900_probe()函數中,memset (&priv,0,sizeof (cs8900_t));函數之後添加如下兩條語句:
__raw_writel(0x2211d110,S3C2410_BWSCON);
__raw_writel(0x1f7c,S3C2410_BANKCON3);
2、修改drivers/net/arm/目錄下的Kconfig文件,在最後添加如下內容:
Config ARM_CS8900
tristate "CS8900 support"
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
help
Support for CS8900A chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from as well as . To compile this driver as a module, choose M here and read. The module will be called cs8900.o.
內核系統配置文件由2.4版本的config.in變成了2.6版本Kconfig文件,在這個文件裡面添加如上內容,則在運行make menuconfig或者make xconfig命令的時候就會出現:
[ ] CS8900 support
這一選項。
3、修改drivers/net/arm/目錄下的Makefile文件,在最後添加如下內容:
obj-$(CONFIG_ARM_CS8900) += cs8900.o
2.6版本內核的Makefile文件也與2.4版本的有所不同。添加以上語句,就會使內核在編譯的時候根據配置將cs8900A的驅動程序以模塊或靜態的方式編譯到內核當中。
4、在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到smdk2410_iodesc[]結構數組,添加如下如下內容:{vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE}
修改之後變成了:
static struct map_desc smdk2410_iodesc[] __initdata = {
/* nothing here yet */
/* Map the ethernet controller CS8900A */ {vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE}
};
添加#include <asm-arm/arch-s3c2410/smdk2410.h>
由於在驅動程序的開發的時候,在驅動程序當中所用到的跟設備有關的地址都是虛擬地址,也就是說驅動程序操作的都是虛擬地址,那麼要使驅動程序對設備的操作反映到設備上去,就得將設備的物理地址映射到正確的虛擬地址上去,從而保證驅動程序對虛擬地址的操作也就是對相應的物理地址操作。以上添加的語句就是為了將網卡的物理地址(0x19000000)映射到vSMDK2410_ETH_IO所指向的虛擬地址上去,上面的結構還定義了網卡虛擬地址所佔用的區間,也就是從vSMDK2410_ETH_IO開始的SZ_1M大小的去間,並指定了該區間所指向的域(的屬性)。
5、在include/asm-arm/arch-s3c2410/目錄下創建smdk2410.h文件,其內容為:
#ifndef _INCLUDE_SMDK2410_H_
#define _INCLUDE_SMDK2410_H_
#include <linux/config.h>
#define pSMDK2410_ETH_IO 0x19000000
#define vSMDK2410_ETH_IO 0xE0000000
#define SMDK2410_ETH_IRQ IRQ_EINT9
#endif // _INCLUDE_SMDK2410_H_
因為在網卡驅動程序當中,用到了一些常量,所以特意在此添加這個頭文件。這個頭文件定義了網卡的物理地址、虛擬地址以及網卡佔用的中斷線。
6、配置、編譯內核。在內核頂層目錄當中鍵入:
#make smdk2410_defconfig
由於2.6的內核默認就支持了S3C2410,所以就有一個默認的內核配置文件。裡面只是包括了一個簡單的配置,要使網卡編譯進內核,還要進行手工配置。
#make menuconfig
Networking support --->
Ethernet (10 or 100Mbit) --->
[*] CS8900 support
將剛才添加的網卡驅動程序靜態添加到內核當中。
最後進行內核編譯。
#make
然後將鏡像下載到開發板中去,這樣就搞定了。通過nfs可以進入終端命令行了。
2010年5月6日 星期四
TeraTerm Pro - 取代超級終端機
<p>
Windows 內建的超級終端機(HyperTerminal),有使用過的應該都知道問題很多,
</p>
<p>
[@more@]經常跑出亂碼、甚至程式當掉,可以說是年久失修的工具阿,連 Vista 都將它拿掉了,
</p>
<p>
不過有許多 router、硬體設備仍是要透過 Serial Port 去做 debug、設定等等,<a href="http://ttssh2.sourceforge.jp/" target="_blank">TeraTerm Pro</a> ,
</p>
<p>
擁有比超級終端機簡潔的畫面,原有的功能都沒少,還增加了 UTF8/SSH/telnet/Macro…,
</p>
<p>
在 Vista 上跑也沒問題,所以,換掉超級終端機吧!
</p>
<p>
‧<a href="http://ttssh2.sourceforge.jp/" target="_blank">TeraTerm Pro 專案網頁</a><br />
.<a href="http://sourceforge.jp/projects/ttssh2/files/" target="_blank">下載頁面</a>
</p>
Windows 內建的超級終端機(HyperTerminal),有使用過的應該都知道問題很多,
</p>
<p>
[@more@]經常跑出亂碼、甚至程式當掉,可以說是年久失修的工具阿,連 Vista 都將它拿掉了,
</p>
<p>
不過有許多 router、硬體設備仍是要透過 Serial Port 去做 debug、設定等等,<a href="http://ttssh2.sourceforge.jp/" target="_blank">TeraTerm Pro</a> ,
</p>
<p>
擁有比超級終端機簡潔的畫面,原有的功能都沒少,還增加了 UTF8/SSH/telnet/Macro…,
</p>
<p>
在 Vista 上跑也沒問題,所以,換掉超級終端機吧!
</p>
<p>
‧<a href="http://ttssh2.sourceforge.jp/" target="_blank">TeraTerm Pro 專案網頁</a><br />
.<a href="http://sourceforge.jp/projects/ttssh2/files/" target="_blank">下載頁面</a>
</p>
2010年3月9日 星期二
VirtualBox 2.2.4 for fedora code 10 x86_64
this paper say how to install virtualbox for fedora code 10 x86_64fast ~ we can go to this link download virtualbox
http://www.virtualbox.org/wiki/Linux_Downloads
then you will to run the machine,you will got a message that the VirtualBox Kernel had not been setup.
I ran:
It failed, saying that kernel files were not found.
The logfile printed out the following:
so you mast run some commands if you already have the packages installed.
Now to make old config and modules because vboxdrv complains about it
vboxdrv failed during module compilation, so I decided to build the entire kernel just to make sure. Do not run 'make install' since we don't need it.
http://www.virtualbox.org/wiki/Linux_Downloads
then you will to run the machine,you will got a message that the VirtualBox Kernel had not been setup.
I ran:
Code:
/etc/init.d/vboxdrv setup
Code:
Stopping VirtualBox kernel module [ OK ] Recompiling VirtualBox kernel module [FAILED] (Look at /var/log/vbox-install.log to find out what went wrong)
Code:
which: no dkms in (/sbin:/usr/sbin:/bin:/usr/bin) Makefile:127: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again. Stop.
so you mast run some commands if you already have the packages installed.
Code:
# yum groupinstall "Development Tools" # yum groupinstall "Development Libraries" # yum install unifdef rpm-build
Code:
$ cd ~/usr/src/kernels/2.6.27.25-170.2.72.fc10.x86_64/ $ make oldconfig $ make prepare $ make
Code:
# export KERN_DIR=/usr/src/kernels/2.6.27.25-170.2.72.fc10.x86_64/ # /etc/init.d/vboxdrv setup Stopping VirtualBox kernel module [ OK ] Recompiling VirtualBox kernel module [ OK ] Starting VirtualBox kernel module [ OK ]
2010年2月9日 星期二
linux 文字模式啟動無線網路
如果您有一張無線 (802.11)網路卡,您將需要在繼續前先設定好您的無線網路。如要查看目前的設定,您可以使用 iwconfig。執行 iwconfig 將會列出類似以下的訊息:
# iwconfig wlan0
wlan0 IEEE 802.11bg ESSID:"Defaule"
Mode:Managed Frequency:2.462GHz Access Point:00:0D:5B:DD:CC:FC
Bit Rate:11Mb/s Tx-Power=20 dBm
Sensitivity=0/65535
Retry limit:16 RTS thr:off
Fragment thr:off
Power Management:off
Link Quality:71/100 Signal level:-50 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
對於大部份的使用者,只需要更改兩個重要的設定,ESSID(無線網路名稱)或是 WEP 金錀。如果 ESSID 和無限網路連接點已經顯示出您沒有使用 WEP,那您的網路已經好了。如果您需要更改您的 ESSID,或是加入一個 WEP 金錀,您可以執行以下指令:
(這將會把網路名稱設定為 "Defaule")
# iwconfig eth0 essid Defaule
(這將設定一個 hex WEP 金錀)
# iwconfig eth0 key 0123456789
(這將設定一個 ASCII 金錀 - 起始為 "s:")
# iwconfig eth0 key s:密碼
您將可以再次使用 iwconfig 來確認您的設定。當您的無線網路已經可以使用,您將可以從下一個部份繼續設定
設定您的網路需要三個步驟。第一,我們將使用 ifconfig 設定我們的 IP 位置。然後我們將需要 route(路由)到我們的 gateway 上。然後在將名稱伺服器放到 /etc/resolv.conf。
要設定 IP 位置,您將需要您的 IP 位置,廣播位置和 netmask。然後執行以下指令,將 ${IP_ADDR} 更改成您的 IP 位置, ${BROADCAST} 為您的廣播位置和 ${NETMASK} 為您的 netmask:
# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up 現在使用 route 設定您的路由。將 ${GATEWAY} 更改為您的 gateway IP 位置:
# route add default gw ${GATEWAY}
接著編輯resolv.conf
# vi /etc/resolv.conf
現在將您的 nameserv (名稱服務器)按照以下的版面填入。請確定將 ${NAMESERVER1} 和 ${NAMESERVER2} 更改為相關的名稱服務器的位置:
nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}
這樣就可以開始使用你的無線網路了..!!!
# iwconfig wlan0
wlan0 IEEE 802.11bg ESSID:"Defaule"
Mode:Managed Frequency:2.462GHz Access Point:00:0D:5B:DD:CC:FC
Bit Rate:11Mb/s Tx-Power=20 dBm
Sensitivity=0/65535
Retry limit:16 RTS thr:off
Fragment thr:off
Power Management:off
Link Quality:71/100 Signal level:-50 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
注意: 有些網路卡的裝置名稱或許是 wlan0 或 ra0 而不是 eth0。不要加任何參數執行 iwconfig 確認裝置的名稱。
對於大部份的使用者,只需要更改兩個重要的設定,ESSID(無線網路名稱)或是 WEP 金錀。如果 ESSID 和無限網路連接點已經顯示出您沒有使用 WEP,那您的網路已經好了。如果您需要更改您的 ESSID,或是加入一個 WEP 金錀,您可以執行以下指令:
(這將會把網路名稱設定為 "Defaule")
# iwconfig eth0 essid Defaule
(這將設定一個 hex WEP 金錀)
# iwconfig eth0 key 0123456789
(這將設定一個 ASCII 金錀 - 起始為 "s:")
# iwconfig eth0 key s:密碼
您將可以再次使用 iwconfig 來確認您的設定。當您的無線網路已經可以使用,您將可以從下一個部份繼續設定
設定您的網路需要三個步驟。第一,我們將使用 ifconfig 設定我們的 IP 位置。然後我們將需要 route(路由)到我們的 gateway 上。然後在將名稱伺服器放到 /etc/resolv.conf。
要設定 IP 位置,您將需要您的 IP 位置,廣播位置和 netmask。然後執行以下指令,將 ${IP_ADDR} 更改成您的 IP 位置, ${BROADCAST} 為您的廣播位置和 ${NETMASK} 為您的 netmask:
# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up 現在使用 route 設定您的路由。將 ${GATEWAY} 更改為您的 gateway IP 位置:
# route add default gw ${GATEWAY}
接著編輯resolv.conf
# vi /etc/resolv.conf
現在將您的 nameserv (名稱服務器)按照以下的版面填入。請確定將 ${NAMESERVER1} 和 ${NAMESERVER2} 更改為相關的名稱服務器的位置:
nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}
這樣就可以開始使用你的無線網路了..!!!
2009年12月19日 星期六
Linux作業系統中記憶體buffer和cache的區別
Free
free 命令相對於top 提供了更簡潔的查看系統記憶體使用情況:$ free
total used free shared buffers cachedMem: 255268 238332 16936 0 85540 126384-/+ buffers/cache: 26408 228860Swap: 265000 0 265000
Mem:表示物理記憶體統計
-/+ buffers/cached:表示物理記憶體的緩存統計
Swap:表示硬盤上交換分區的使用情況。
系統的總物理記憶體:255268Kb(256M),但系統當前真正可用的記憶體b並不是第一行free 標記的 16936Kb,它僅代表未被分配的記憶體。
我們使用total1、used1、free1、used2、free2 等名稱來代表上面統計數據的各值,1、2 分別代表第一行和第二行的數據。
total1:表示物理記憶體總量。
used1:表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存並未實際使用。
free1:未被分配的記憶體。
shared1:共用記憶體,一般系統不會用到。
buffers1:系統分配但未被使用的buffers 數量。
cached1:系統分配但未被使用的cache 數量。buffer 與cache 的區別見後面。
used2:實際使用的buffers 與cache 總量,也是實際使用的記憶體總量。
free2:未被使用的buffers 與cache 和未被分配的記憶體之和,這就是系統當前實際可用記憶體。
可以整理出如下等式:
total1 = used1 + free1total1 = used2 + free2used1 = buffers1 + cached1 + used 2f ree2 = buffers1 + cached1 + free1
buffer 與cache 的區別
A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use.
更詳細的解釋參考:Difference Between Buffer and Cache
對於共用記憶體(Shared memory),主要用於在UNIX 環境下不同進程之間共用數據,是進程間通信的一種方法,一般的應用程式不會申請使用共用記憶體,筆者也沒有去驗證共用記憶體對上面等式的影響。如果你有興趣,請參考:What is Shared Memory?
cache 和 buffer的區別:
Cache:高速緩存,是位於CPU與主記憶體間的一種容量較小但速度很高的記憶體。由於CPU的速度遠高於主記憶體,CPU直接從記憶體中存取數據要等待一定時間週期,Cache中保存著CPU剛用過或迴圈使用的一部分數據,當CPU再次使用該部分數據時可從Cache中直接調用,這樣就減少了CPU的等待時間,提高了系統的效率。Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L 1 C ache集成在CPU內部,L 2 C ache早期一般是焊在主板上,現在也都集成在CPU內部,常見的容量有256KB或512KB L2 Cache。
Buffer:緩衝區,一個用於存儲速度不同步的設備或優先級不同的設備之間傳輸數據的區域。通過緩衝區,可以使進程之間的相互等待變少,從而使從速度慢的設備讀入數據時,速度快的設備的操作進程不發生間斷。
Free中的buffer和cache:(它們都是佔用記憶體):
buffer : 作為buffer cache的記憶體,是塊設備的讀寫緩衝區
cache: 作為page cache的記憶體, 文件系統的cache
如果 cache 的值很大,說明cache住的文件數很多。如果頻繁訪問到的文件都能被cache住,那麼磁片的讀IO bi會非常小。
訂閱:
文章 (Atom)