內(nèi)存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內(nèi)存中進行的,因此內(nèi)存的性能對計算機的影響非常大。內(nèi)存作用是用于暫時存放CPU中的運算數(shù)據(jù),以及與硬盤等外部存儲器交換的數(shù)據(jù)。只要計算機在運行中,CPU就會把需要運算的數(shù)據(jù)調(diào)到內(nèi)存中進行運算,當運算完成后CPU再將結果傳送出來,內(nèi)存的運行也決定了計算機的穩(wěn)定運行。對于整個操作系統(tǒng)來說,內(nèi)存可能是最麻煩的的設備。而其性能的好壞直接影響著整個操作系統(tǒng)。
在鄂溫克等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站建設、成都網(wǎng)站設計 網(wǎng)站設計制作定制制作,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,成都營銷網(wǎng)站建設,外貿(mào)營銷網(wǎng)站建設,鄂溫克網(wǎng)站建設費用合理。
我們知道CPU是不能與硬盤打交道的,只有數(shù)據(jù)被載入到內(nèi)存中才可以被CPU調(diào)用。cpu在訪問內(nèi)存的時候需要先像內(nèi)存監(jiān)控程序請求,由監(jiān)控程序控制和分配內(nèi)存的讀寫請求,這個監(jiān)控程序叫做MMU(內(nèi)存管理單元)。下面以32位系統(tǒng)來說明內(nèi)存的訪問過程:
32位的系統(tǒng)上每一個進程在訪問內(nèi)存的時候,每一個進程都當做自己有4個G的內(nèi)存空間可用,這叫虛擬內(nèi)存(地址),虛擬內(nèi)存轉(zhuǎn)化成物理內(nèi)存是通過MMU來完成的。為了能夠從線性地址轉(zhuǎn)換成物理地址,需要page table(頁表)的內(nèi)存空間,page table要載入到MMU上。為了完成線性地址到物理地址的映射,如果按照1個字節(jié)1個字節(jié)映射的話,需要一張非常大的表,這種轉(zhuǎn)換關系會非常的復雜。因此把內(nèi)存空間又劃分成了另外一種存儲單元格式,通常為4K。在不同的硬件平臺上,它們的大小一般是不一樣的,像x86 32位的有4k的頁;而64位的有4k頁,2M頁,4M頁,8M頁等等,默認都是4k的。每一個進程一般而言都有自己的頁路徑和頁表映射機制,不管那一個頁表都是由內(nèi)核加載的。每一個進程只能看到自己的線性地址空間,想要增加新的內(nèi)存的時候,只能在自己的線性地址空間中申請,并且申請后一定是通過操作系統(tǒng)的內(nèi)核映射到物理地址空間中去找那么一段空間,并且告訴線性地址空間準備好了,可以訪問,并且在page table中增加一條映射關系,于是就可以訪問物理內(nèi)存了,這種叫做內(nèi)存分配。但是新的申請一定是通過操作的內(nèi)核到物理內(nèi)存中去找那么一段空間,并且告訴線性地址空間好了,可以建設映射關系,最終page table建立映射關系。
這反映了上述描述過程的大體情況。可以看到每一個用戶程序都會有自己的頁表,并且映射到對應的主存儲器上去。
根據(jù)上述文字和圖表的描述可以發(fā)現(xiàn)2個問題:
1.每個進程如果需要訪問內(nèi)存的時候都需要去查找page table的話,勢必會造成服務器的性能底下
2.如果主存儲器的內(nèi)存滿了以后,應用程序還需要調(diào)用內(nèi)存的時候怎么辦
對于第一個問題,我們就需要借助TLB(Translation Lookaside Buffer)翻譯后備緩沖器。TLB是一個內(nèi)存管理單元,它可以用于改進虛擬地址到物理地址轉(zhuǎn)換速度的緩存。這樣每次在查找page table的時候就可以先去TLB中查找相應的頁表數(shù)據(jù),如果有就直接返回,沒有再去查找page table,并把查找到的結果緩存中TLB中。TLB雖然解決了緩存的功能,但是在那么page table中查找映射關系仍然很慢,所以又有了page table的分級目錄。page table可以分為1級目錄,2級目錄和偏移量
但是一個進程在運行的時候要頻繁的打開文件,關閉文件。這就意味著要頻繁的申請內(nèi)存和釋放內(nèi)存。有些能夠在內(nèi)存中緩存數(shù)據(jù)的那些進程,他們對內(nèi)存的分配和回收更多,那么每一次分配都會在頁表中建立一個對應項。所以,就算內(nèi)存的速度很快,大量頻繁的同一時間分配和釋放內(nèi)存,依然會降低服務器的整體性能。當然內(nèi)存空間不夠用的時候,我們稱為oom(out of memory,內(nèi)存耗盡)。當內(nèi)存耗盡的時候,,整個操作系統(tǒng)掛了。這種情況下我們可以考慮交換分區(qū),交換分區(qū)畢竟是由硬盤虛擬出來的內(nèi)存,所以其性能與真正的內(nèi)存相比,差了很多,所以要盡力避免使用交換分區(qū)。有物理內(nèi)存空間的時候盡量保證全部使用物理內(nèi)存。cpu無論如何是不能給交換內(nèi)存打交道的,它也只能給物理內(nèi)存打交道,能尋址的空間也只能是物理內(nèi)存。所以當真正物理內(nèi)存空間不夠用的時候,會通過LRU算法把其中最近最少使用的內(nèi)存放到交換內(nèi)存中去,這樣物理內(nèi)存中的那段空間就可以供新的程序使用了。但是這樣會引發(fā)另外的一個問題,即原來的進程通過page table尋找的時候,那一段空間的數(shù)據(jù)已經(jīng)不屬于它了。所以此刻cpu發(fā)送通知或者異常告訴這個程序,這個地址空間已不屬于它,這個時候可能會出現(xiàn)2種情況:
1.物理內(nèi)存有可用的空間可用:這個時候cpu會根據(jù)以前的轉(zhuǎn)換策略會把交換分區(qū)中的那段內(nèi)存重新送到物理內(nèi)存中去,但是轉(zhuǎn)換過來的空間地址不一定會是以前的那一段空間地址,因為以前的那一段空間地址可能已經(jīng)被別人使用了。
2.物理內(nèi)存沒有可用的空間可用:這個時候依然會使用LRU算發(fā)把當前物理地址空間上最近最少使用的空間地址轉(zhuǎn)換到交換內(nèi)存中去,并把當前進程需要的這斷在交換空間中的內(nèi)存送到物理內(nèi)存空間中去,并且重新建立映射關系。
上述通知或者異常出現(xiàn)的情況,通常叫做缺頁異常。缺頁異常也分為大異常和小異常兩種。大異常就是訪問的數(shù)據(jù)內(nèi)存中沒有,不的不去硬盤上加載,無論是從交換內(nèi)存中還是直接從磁盤的某個文件系統(tǒng)上,反正需要從硬盤上去加載,這種異常加載需要很長時間。小異常就是進程之間通過共享內(nèi)存,第二個進程訪問的時候,查看本地的內(nèi)存映射表沒有,但是其它進程已經(jīng)擁有了這個內(nèi)存頁,所以可以直接映射,這種異常加載需要的時間一般很短。
在操作系統(tǒng)開機的時候,每一個io設備都會像cpu申請一些列的隨機端口,這種端口叫做io端口。在IBM PC體系結構中,I/O地址空間一共提供了65,536個8位的I/O端口。正是這些io端口的存在,cpu可以與io設備進行讀寫交互的過程。在執(zhí)行讀寫操作時,CPU使用地址總線選擇所請求的I/O端口,使用數(shù)據(jù)總線在CPU寄存器和端口之間傳送數(shù)據(jù)。I/O端口還可以被映射到物理地址空間:因此,處理器和I/O設備之間的通信就可以直接使用對內(nèi)存進行操作的匯編語言指令(例如,mov、and、or等等)?,F(xiàn)代的硬件設備更傾向于映射I/O,因為這樣處理的速度較快,并可以和DMA結合起來使用。這樣io在和內(nèi)存?zhèn)鲾?shù)據(jù)的時候就不需要通過cpu,cpu把總線的控制權交給DMA,每次io傳數(shù)據(jù)的時候就調(diào)用DMA一次,就把cpu給解放了出來。當數(shù)據(jù)傳輸完了以后,DMA通知給cpu中斷一次。DMA在運行的時候?qū)φ麄€總線有控制權限,當cpu發(fā)現(xiàn)有其它進程需要使用總線的時候,二者就會產(chǎn)生爭用。這個時候,在總線控制權的使用上,CPU和DMA具有相等的權限。只要CPU委托給了DMA,就不能隨意的收回這個委托,就要等待DMA的用完。
如果沒有其它進程可以運行,或者其它進程運行的時間非常短,這個時候CPU發(fā)現(xiàn)我們的IO仍然沒有完成,那就意味著,CPU只能等待IO了。CPU在時間分配里面有個iowait的值,就是CPU在等待IO花費的時間。有些是在同步調(diào)用過程中,CPU必須要等待IO的完成;否者CPU可以釋放IO的傳輸在背后自動完成,CPU自己去處理其它的事情。等硬盤數(shù)據(jù)傳輸完成以后,硬盤只需要像CPU發(fā)起一個通知即可。CPU外圍有一種設備,這個設備叫做可編程中斷控制器。每一個硬件設備為了給CPU通信,在剛開機的時候,在BIOS實現(xiàn)檢測的時候,這個設備就要到可編程中斷控制器上去注冊一個所謂的中斷號。那么這個號碼就歸這個硬件使用了。當前主機上可能有多個硬件,每一個硬件都有自己的號碼,CPU在收到中斷號以后,就能夠通過中斷相量表查找到那個硬件設備進行中斷。并且就由對應的IO端口過來處理了。
CPU正在運行其它進程,當一個中斷請求發(fā)過來的時候,CPU會立即終止當前正在處理的進程,而去處理中斷。當前CPU掛起當前正在處理的進程,轉(zhuǎn)而去執(zhí)行中斷的過程,也叫做中斷切換。只不過,這種切換在量級別上比進程切換要低一些,而且任何中斷的優(yōu)先級通常比任何進程也要高,因為我們指的是硬件中斷。中斷還分為上半部和下半部,一般而言,上半部就是CPU在處理的時候,把它接進來,放到內(nèi)存中,如果這個事情不是特別緊急(CPU或者內(nèi)核會自己判斷),因此在這種情況下,CPU回到現(xiàn)場繼續(xù)執(zhí)行剛才掛起的進程,當這個進程處理完了,再回過頭來執(zhí)行中斷的下半部分。
在32位系統(tǒng)中,我們的內(nèi)存(線性地址)地址空間中,一般而言,低地址空間有一個G是給內(nèi)核使用的,上面3個G是給進程使用的。但是應該明白,其實在內(nèi)核內(nèi)存當中,再往下,不是直接這樣劃分的。32位系統(tǒng)和64位系統(tǒng)可能不一樣(物理地址),在32位系統(tǒng)中,最低端有那么10多M的空間是給DMA使用的。DNA的總線寬度是很小的,可能只有幾位,所以尋址能力很有限,訪問的內(nèi)存空間也就很有限。如果DMA需要復制數(shù)據(jù),而且自己能夠?qū)ぶ肺锢韮?nèi)存,還可以把數(shù)據(jù)直接壯哉進內(nèi)存中去,那么就必須保證DMA能夠?qū)ぶ纺嵌蝺?nèi)存才行。尋址的前提就是把最低地址斷M,DA的尋址范圍內(nèi)的那一段給了DMA。所以站在這個角度來說,我們的內(nèi)存管理是分區(qū)域的。
在32位系統(tǒng)上,16M的內(nèi)存空間給了ZONE_DMA(DMA使用的物理地址空間);從16M到896M給了ZONE_NORMAL(正常物理地址空間),對于Linux操作系統(tǒng)來說,是內(nèi)核可以直接訪問的地址空間;從896M到1G這斷空間叫做"Reserved"(預留的物理地址空間);從1G到4G的這段物理地址空間中,我們的內(nèi)核是不能直接訪問的,要想訪問必須把其中的一段內(nèi)容映射到Reserved來,在Reserved中保留出那一段內(nèi)存的地址編碼,我們內(nèi)核才能上去訪問,所以內(nèi)核不直接訪問大于1G的物理地址空間。所以在32位系統(tǒng)上,它訪問內(nèi)存當中的數(shù)據(jù),中間是需要一個額外步驟的。
在64位系統(tǒng)上,ZONE_DAM給了低端的1G地址空間,這個時候DMA的尋址能力被大大加強了;ZONE_DAM32可以使用4G的空間;而大于1G以上給劃分了ZONE_NORMAL,這段空間都可以被內(nèi)核直接訪問。所以在64位上,內(nèi)核訪問大于1G的內(nèi)存地址,就不需要額外的步驟了,效率和性能上也大大增加,這也就是為什么要使用64位系統(tǒng)的原因。
在現(xiàn)在的PC架構上,AMD,INTER都支持一種機制,叫做PEA(物理地址擴展)。所謂PAE。指的是在32位系統(tǒng)的地址總線上,又擴展了4位,使得32位系統(tǒng)上的地址空間可以達到64G。當然在32為系統(tǒng)上,不管你的物理內(nèi)存有多大,單個進程所使用的空間是無法擴展的。因為在32位的系統(tǒng)上,線性地址空間只有4個G,而單個進程能夠識別的訪問也只有3個G。
linux的虛擬內(nèi)存子系統(tǒng)包含了以下幾個功能模塊:
slab allocator,zoned buddy allocator,MMU,kswapd,bdflush
slab allocator叫做slab分配器
buddy allocator又叫做buddy system,叫做伙伴系統(tǒng),也是一種內(nèi)存分配器
buddy system是工作在MMU之上的,而slab allocator又是工作在buddy system之上的。
設置為小于等于1G,在數(shù)據(jù)庫服務器應該勁量避免使用交換內(nèi)存
3.在應用服務器上,可以設置為RAM*0.5,當然這個是理論值
如果不的不使用交換內(nèi)存,應該把交換內(nèi)存放到最靠外的磁道分區(qū)上,因為最外邊的磁盤的訪問速度最快。所以如果有多塊硬盤,可以把每塊硬盤的最外層的磁道拿一小部分出來作為交換分區(qū)。交換分區(qū)可以定義優(yōu)先級,因此把這些硬盤的交換內(nèi)存的優(yōu)先級設置為一樣,可以實現(xiàn)負載均衡的效果。定義交換分區(qū)優(yōu)先級的方法為編輯/etc/fstab:
/dev/sda1 swap swap pri=5 0 0
/dev/sdb1 swap swap pri=5 0 0
/dev/sdc1 swap swap pri=5 0 0
/dev/sdd1 swap swap pri=5 0 0
四.內(nèi)存耗盡時候的相關調(diào)優(yōu)參數(shù)
當Linux內(nèi)存耗盡的時候,它會殺死那些占用內(nèi)存最多的進程,以下三種情況會殺死進程:
1.所有的進程都是活動進程,這個時候想交換出去都沒有空閑的進程
2.沒有可用的page頁在ZONE_NORMAL中
3.有其它新進程啟動,申請內(nèi)存空間的時候,要找一個空閑內(nèi)存給做映射,但是這個時候找不到了
一旦內(nèi)存耗盡的時候,操作系統(tǒng)就會啟用oom-kill機制。
在/proc/PID/目錄下有一個文件叫做oom_score,就是用來指定oom的評分的,就是壞蛋指數(shù)。
如果要手動啟用oom-kill機制的話,只需要執(zhí)行echo f/proc/sysrq-trigger即可,它會自動殺掉我們指定的壞蛋指數(shù)評分最高的那個進程
可以通過echo n /proc/PID/oom_adj來調(diào)整一個進程的壞蛋評分指數(shù)。最終的評分指數(shù)就是2的oom_adj的值的N次方。假如我們的一個進程的oom_adj的值是5,那么它的壞蛋評分指數(shù)就是2的5次方。
如果想禁止oom-kill功能的使用可以使用vm.panic_on_oom=1即可。
五.與容量有關的內(nèi)存調(diào)優(yōu)參數(shù):
overcommit_memory,可用參數(shù)有3個,規(guī)定是否能夠過量使用內(nèi)存:
0:默認設置,內(nèi)核執(zhí)行啟發(fā)式的過量使用處理
1:內(nèi)核執(zhí)行無內(nèi)存的過量使用處理。使用這個值會增大內(nèi)存超載的可能性
2:內(nèi)存的使用量等于swap的大小+RAM*overcommit_ratio的值。如果希望減小內(nèi)存的過度使用,這個值是最安全的
overcommit_ratio:將overcommit_memory指定為2時候,提供的物理RAM比例,默認為50
六.與通信相關的調(diào)優(yōu)參數(shù)
常見在同一個主機中進行進程間通信的方式:
1.通過消息message;2.通過signal信號量進行通信;3.通過共享內(nèi)存進行通信,跨主機常見的通信方式是rpc
以消息的方式實現(xiàn)進程通信的調(diào)優(yōu)方案:
msgmax:以字節(jié)為單位規(guī)定消息隊列中任意消息的最大允許大小。這個值一定不能超過該隊列的大小(msgmnb),默認值為65536
msgmnb:以字節(jié)為單位規(guī)定單一消息隊列的最大值(最大長度)。默認為65536字節(jié)
msgmni:規(guī)定消息隊列識別符的最大數(shù)量(及隊列的最大數(shù)量)。64位架構機器的默認值為1985;32位架構機器的默認值為1736
以共享內(nèi)存方式實現(xiàn)進程通信的調(diào)優(yōu)方案:
shmall:以字節(jié)為單位規(guī)定一次在該系統(tǒng)中可以使用的共享內(nèi)存總量(單次申請的上限)
shmmax:以字節(jié)為單位規(guī)定每一個共享內(nèi)存片段的最大大小
shmmni:規(guī)定系統(tǒng)范圍內(nèi)最大共享內(nèi)存片段。在64和32位的系統(tǒng)上默認值都是4096
七.與容量相關的文件系統(tǒng)可調(diào)優(yōu)參數(shù):
file-max:列出內(nèi)核分配的文件句柄的最大值
dirty_ratio:規(guī)定百分比值,當臟數(shù)據(jù)達到系統(tǒng)內(nèi)存總數(shù)的這個百分比值后開始執(zhí)行pdflush,默認為20
dirty_background_ratio:規(guī)定百分比值,當某一個進程自己所占用的臟頁比例達到系統(tǒng)內(nèi)存總數(shù)的這個百分比值后開始在后臺執(zhí)行pdflush,默認為10
dirty_expire_centisecs:pdlush每隔百分之一秒的時間開啟起來刷新臟頁,默認值為3000,所以每隔30秒起來開始刷新臟頁
dirty_writeback_centisecs:每隔百分之一秒開始刷新單個臟頁。默認值為500,所以一個臟頁的存在時間達到了5秒,就開始刷新臟
八.linux內(nèi)存常用的觀察指標命令:
Memory activity
vmstat [interval] [count]
sar -r [interval] [count]
Rate of change in memory
sar -R [interval] [count]
frmpg/s:每秒釋放或者分配的內(nèi)存頁,如果為正數(shù),則為釋放的內(nèi)存頁;如果為負數(shù),則為分配的內(nèi)存頁
bufpg/s:每秒buffer中獲得或者釋放的內(nèi)存頁。如果為正數(shù)則為獲得的內(nèi)存頁,為負數(shù)。則為釋放的內(nèi)存頁
campg/s:每秒cache中獲得或者釋放的內(nèi)存頁。如果為正數(shù)則為獲得的內(nèi)存頁,為負數(shù)。則為釋放的內(nèi)存頁
Swap activity
sar -W [interval] [count]
ALL IO
sar -B [interval] [count]
pgpgin/s:每秒從磁盤寫入到內(nèi)核的塊數(shù)量
pgpgout/s:每秒從內(nèi)核寫入到磁盤的塊數(shù)量
fault/s:每秒鐘出現(xiàn)的缺頁異常的個數(shù)
majflt/s:每秒鐘出現(xiàn)的大頁異常的個數(shù)
pgfree/s:每秒回收回來的頁面?zhèn)€數(shù)
cp:復制文件或目錄
語 法:cp [-abdfilpPrRsuvx][-S 備份字尾字符串][-V 備份方式][--help][--spares=使用時機][--version][源文件或目錄][目標文件或目錄] [目的目錄]
補充說明:cp指令用在復制文件或目錄,如同時指定兩個以上的文件或目錄,且最后的目的地是一個已經(jīng)存在的目錄,則它會把前面指定的所有文件或目錄復制到該目錄中。若同時指定多個文件或目錄,而最后的目的地并非是一個已存在的目錄,則會出現(xiàn)錯誤信息。
參 數(shù):
-a或--archive 此參數(shù)的效果和同時指定"-dpR"參數(shù)相同。
-b或--backup 刪除,覆蓋目標文件之前的備份,備份文件會在字尾加上一個備份字符串。
-d或--no-dereference 當復制符號連接時,把目標文件或目錄也建立為符號連接,并指向與源文件或目錄連接的原始文件或目錄。
-f或--force 強行復制文件或目錄,不論目標文件或目錄是否已存在。
-i或--interactive 覆蓋既有文件之前先詢問用戶。
-l或--link 對源文件建立硬連接,而非復制文件。
-p或--preserve 保留源文件或目錄的屬性。
-P或--parents 保留源文件或目錄的路徑。
-r 遞歸處理,將指定目錄下的文件與子目錄一并處理。
-R或--recursive 遞歸處理,將指定目錄下的所有文件與子目錄一并處理。
-s或--symbolic-link 對源文件建立符號連接,而非復制文件。
-S備份字尾字符串或--suffix=備份字尾字符串 用"-b"參數(shù)備份目標文件后,備份文件的字尾會被加上一個備份字符串,預設的備份字尾字符串是符號"~"。
-u或--update 使用這項參數(shù)后只會在源文件的更改時間較目標文件更新時或是 名稱相互對應的目標文件并不存在,才復制文件。
-v或--verbose 顯示指令執(zhí)行過程。
-V備份方式或--version-control=備份方式 用"-b"參數(shù)備份目標文件后,備份文件的字尾會被加上一個備份字符串,這字符串不僅可用"-S"參數(shù)變更,當使用"-V"參數(shù)指定不同備份方式時,也會產(chǎn)生不同字尾的備份字串。
-x或--one-file-system 復制的文件或目錄存放的文件系統(tǒng),必須與cp指令執(zhí)行時所處的文件系統(tǒng)相同,否則不予復制。
--help 在線幫助。
--sparse=使用時機 設置保存稀疏文件的時機。
--version 顯示版本信息。
mov:列出目錄內(nèi)容
功能說明:列出目錄內(nèi)容。
語 法:ls [-1aAbBcCdDfFgGhHiklLmnNopqQrRsStuUvxX][-I 范本樣式][-T 跳格字數(shù)][-w 每列字符數(shù)][--block-size=區(qū)塊大小][--color=使用時機][--format=列表格式][--full-time][--help][--indicator-style=標注樣式][--quoting-style=引號樣式][--show-control-chars][--sort=排序方式][--time=時間戳記][--version][文件或目錄...]
補充說明:執(zhí)行l(wèi)s指令可列出目錄的內(nèi)容,包括文件和子目錄的名稱。
參 數(shù):
-1 每列僅顯示一個文件或目錄名稱。
-a或--all 下所有文件和目錄。
-A或--almost-all 顯示所有文件和目錄,但不顯示現(xiàn)行目錄和上層目錄。
-b或--escape 顯示脫離字符。
-B或--ignore-backups 忽略備份文件和目錄。
-c 以更改時間排序,顯示文件和目錄。
-C 以又上至下,從左到右的直行方式顯示文件和目錄名稱。
-d或--directory 顯示目錄名稱而非其內(nèi)容。
-D或--dired 用Emacs的模式產(chǎn)生文件和目錄列表。
-f 此參數(shù)的效果和同時指定"aU"參數(shù)相同,并關閉"lst"參數(shù)的效果。
-F或--classify 在執(zhí)行文件,目錄,Socket,符號連接,管道名稱后面,各自加上"*","/","=","@","|"號。
-g 次參數(shù)將忽略不予處理。
-G或--no-group 不顯示群組名稱。
-h或--human-readable 用"K","M","G"來顯示文件和目錄的大小。
-H或--si 此參數(shù)的效果和指定"-h"參數(shù)類似,但計算單位是1000Bytes而非1024Bytes。
-i或--inode 顯示文件和目錄的inode編號。
-I范本樣式或--ignore=范本樣式 不顯示符合范本樣式的文件或目錄名稱。
-k或--kilobytes 此參數(shù)的效果和指定"block-size=1024"參數(shù)相同。
-l 使用詳細格式列表。
-L或--dereference 如遇到性質(zhì)為符號連接的文件或目錄,直接列出該連接所指向的原始文件或目錄。
-m 用","號區(qū)隔每個文件和目錄的名稱。
-n或--numeric-uid-gid 以用戶識別碼和群組識別碼替代其名稱。
-N或--literal 直接列出文件和目錄名稱,包括控制字符。
-o 此參數(shù)的效果和指定"-l" 參數(shù)類似,但不列出群組名稱或識別碼。
-p或--file-type 此參數(shù)的效果和指定"-F"參數(shù)類似,但不會在執(zhí)行文件名稱后面加上"*"號。
-q或--hide-control-chars 用"?"號取代控制字符,列出文件和目錄名稱。
-Q或--quote-name 把文件和目錄名稱以""號標示起來。
-r或--reverse 反向排序。
-R或--recursive 遞歸處理,將指定目錄下的所有文件及子目錄一并處理。
-s或--size 顯示文件和目錄的大小,以區(qū)塊為單位。
-S 用文件和目錄的大小排序。
-t 用文件和目錄的更改時間排序。
-T跳格字符或--tabsize=跳格字數(shù) 設置跳格字符所對應的空白字符數(shù)。
-u 以最后存取時間排序,顯示文件和目錄。
-U 列出文件和目錄名稱時不予排序。
-v 文件和目錄的名稱列表以版本進行排序。
-w每列字符數(shù)或--width=每列字符數(shù) 設置每列的最大字符數(shù)。
-x 以從左到右,由上至下的橫列方式顯示文件和目錄名稱。
-X 以文件和目錄的最后一個擴展名排序。
--block-size=區(qū)塊大小 指定存放文件的區(qū)塊大小。
--color=列表格式 培植文件和目錄的列表格式。
--full-time 列出完整的日期與時間。
--help 在線幫助。
--indicator-style=標注樣式 在文件和目錄等名稱后面加上標注,易于辨識該名稱所屬的類型。
--quoting-syte=引號樣式 把文件和目錄名稱以指定的引號樣式標示起來。
--show-control-chars 在文件和目錄列表時,使用控制字符。
--sort=排序方式 配置文件和目錄列表的排序方式。
--time=時間戳記 用指定的時間戳記取代更改時間。
--version 顯示版本信息。
mov沒見過。
formost 是一個基于文件頭和尾部信息以及文件的內(nèi)建數(shù)據(jù)結構恢復文件的命令行工具。這個過程通常叫做數(shù)據(jù)挖掘(data carvubg)。formost 可以分析由 dd、Safeback、Encase 等生成的鏡像文件,也可以直接分析驅(qū)動器。文件頭和尾可以通過配置文件設置,也可以通過命令行開關使用 formost 內(nèi)建的文件類型。formost 最初是由美國空軍特別調(diào)查室(Air Force Office of Special Investigations)和信息系統(tǒng)安全研究中心(The Center for Information Systems Security Studies and Research)開發(fā)的,現(xiàn)在使用 GPL 許可。Foremost 支持恢復如下格式:avi, bmp, dll, doc, exe, gif, htm, jar, jpg, mbd, mov, mpg, pdf, png, ppt, rar, rif, sdw, sx, sxc, sxi, sxw, vis, wav, wmv, xls, zip。 針對 Linux 下的 ext 文件系統(tǒng)來說,常用的 Linux 文件刪除恢復工具有 debugfs、ext3grep、extundelete 等。extundelete 是一個開源的數(shù)據(jù)恢復工具,支持 ext3、ext4 文件系統(tǒng)
1、linux和windows的代碼編寫是不一樣的,linux上的匯編風格是att風格,而windows上的匯編風格是intel風格。 其中的一個區(qū)別是intel 風格是關于源操作數(shù)和目的操作數(shù)的。以第一個為例
//windows上的寫法
mov eax, data4
//linux上的寫法
movl data4, eax
所以,你使用的哪個平臺你得鬧明白。
2、如果是匯編代碼,直接用標識符就好,還是不同的風格問題,如果按你寫的立即數(shù)模式。
//windows上的寫法
mov eax, -1000
//linux上的寫法
movl $-1000, eax
在linux的att匯編風格中,它這個立即數(shù)是必須要加上$ 表示一個常量。 這個也是為什么你在C語言中一般不能使用$來做為標識符的一個原因哦。
建議:查一下intel風格和att風格的匯編區(qū)別點。問題都很簡單,為了更好的幫助你,我上傳了一份,詳細介紹intel匯編語言程序設計的電子書,中文版的,希望能幫到你!
GCC 用的匯編語法叫 ATA語法
微軟的masm和開源的nasm用的是intel語法
ATA語法 mov 源,目的
INTEL語法 mov 目的,源
網(wǎng)頁題目:mov命令linux mov命令是如何傳遞數(shù)據(jù)的
本文地址:http://www.rwnh.cn/article42/hiihhc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、手機網(wǎng)站建設、Google、外貿(mào)網(wǎng)站建設、品牌網(wǎng)站設計、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)