锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 琛ㄧず鏂瑰紡 section:disp(base,index,scale) 鍙樺潃瀵誨潃 AT&T: _variable(%eax) Intel: [eax + _variable]
銆銆銆銆 AT&T: _array(%ebx,%eax,8) Intel: [ebx + eax*8 + _array]
]]>
鍏抽敭瀛楋細(xì)鏃墮棿涓柇銆佷換鍔″垏鎹€佸爢鏍堛丩INUX0.01
寮曡█錛?
浠誨姟鍒囨崲涓庡爢鏍堢殑鍏崇郴鎬庢牱錛熷緢澶氭湅鍙嬪彲鑳戒笉鐭ラ亾濂逛滑涔嬮棿鏈変粈涔堝叧緋伙紝榪樻湁涓浜涙湅鍙嬪彲鑳借涓轟粬浠箣闂翠笉浼?xì)鏈夊お澶х殑鍏尘p伙紙鏂囩尞4錛夈傝屾垜璁や負(fù)錛氫換鍔″垏鎹㈣窡鍫嗘爤鏈夌潃瀵嗗垏鐨勫叧緋伙紒涓嬮潰鏄垜瀵瑰畠浠箣闂村叧緋昏繘琛岀殑鎺㈣錛岃繖閲岀殑浠誨姟鍒囨崲鎴戞寚鐨勬槸鍙戠敓鏃墮棿涓柇鏃惰繘琛屽己鍒惰皟搴﹀彂鐢熺殑浠誨姟鍒囨崲錛屾墍浠ヤ笅闈㈣冭檻鍫嗘爤鏃舵垜鏄粠涓柇寮濮嬫帰璁ㄧ殑銆傚綋鐒?dòng)灱屾垜鍦q涜榪欐柟闈㈠垎鏋愮殑鏃跺欙紝涔熸剤鎰熷畠浠殑澶嶆潅鎬э紝閿欒涔嬪鍦ㄦ墍闅懼厤錛屾湜鍚勪綅鏈嬪弸澶氬鎸囨銆傚緩璁鑰呮按騫籌細(xì)* * *
涓銆佹椂闂翠腑鏂?
鍋囪涓涓繘紼嬪湪鐢ㄦ埛絀洪棿鎵ц鏃訛紙榪欐椂CPL=3錛夛紝鍙戠敓浜嗘椂闂翠腑鏂傝繖鏃剁殑涓柇澶勭悊榪囩▼涓猴紙鏂囩尞1錛歅438錛夛細(xì)
1銆佹牴鎹腑鏂悜閲忓彿鎵懼埌涓柇闂ㄦ弿榪扮錛?
2銆佷粠鎻忚堪絎︿腑鍒嗚В鍑洪夋嫨瀛愩佸亸縐婚噺銆佸睘鎬у瓧孌靛茍榪涜鐩稿簲鐨勭壒鏉冩鏌ワ紱
3銆佹牴鎹弿榪扮綾誨瀷杞叆鐩稿簲涓柇澶勭悊紼嬪簭涓幓鎵ц銆?
濂借薄澶偆嫻呬簡涓浜涳紵鍐嶇湅鐪嬶紙鏂囩尞1錛歅439鍥?0.20錛夛細(xì)
1銆侀夋嫨瀛愪負(fù)絀猴紵no緇х畫錛?
2銆佸彇寰楀搴旀弿榪扮錛涳紙鎻忚堪絎︿腑DPL灞炴у簲璇ヤ負(fù)0錛屾枃鐚?涓柇鍚戦噺鍒濆鍖栭儴鍒嗭級(jí)
3銆佸瓨鍌ㄦ鎻忚堪絎︼紵yes緇х畫錛?
4銆侀潪涓鑷翠唬鐮佹涓擠PL<CPL涓旀瀛樺湪錛焬es緇х畫錛涙牴鎹亣璁綜PL=3錛孌PL=0錛屾墍浠ュ埌5錛?
5銆佸垏鎹㈡垚鍐呭眰鍫嗘爤錛?
濡備綍鍒囨崲錛燂紵鍥犱負(fù)涓涓繘紼嬫湁鐢ㄦ埛絀洪棿鍫嗘爤鍜岀郴緇熺┖闂達(dá)紙涔熷彨鍐呮牳絀洪棿錛夊爢鏍堬紝鐢ㄦ埛絀洪棿鍫嗘爤鍦ㄥ摢鍎挎垜涓嶇錛屽畠搴旇鏄敱璇ヨ繘紼嬬殑浠誨姟鐘舵佹TSS涓璖S2鎸囧畾錛孲S0鎸囧畾緋葷粺絀洪棿鍫嗘爤錛屽畠鍜岃榪涚▼浠誨姟緇撴瀯task_struct鍏卞崰涓欏電┖闂達(dá)紙瑙佹枃鐚?:sched.c錛夈傛墍浠ヨ繖閲岀殑鍒囨崲鎴愬唴灞傚爢鏍堝簲璇ユ槸灝嗚榪涚▼鐨凾SS涓璖S0鐨勫艱祴緇橲S瀵勫瓨鍣ㄣ?
6銆佷嬌RPL=0錛?
7銆佹妸鎻忚堪絎﹁鍏S錛?
8銆佸叆鍙e亸縐昏秺鐣岋紵no緇х畫錛?
9銆丒FLAG銆丆S銆丒IP鍏ユ爤錛涘懙錛屽紑濮嬫爤鐨勬敼鍙樹簡鍝燂紒
10銆乀F=0銆丯T=0銆両F=0錛涜繖閲岃冭檻鐨勬槸涓柇闂ㄣ?
11銆佽漿鍏ュ鐞嗙▼搴忋?
鍒ワ紝鍏堢湅鐪嬬幇鍦ㄧ殑鍫嗘爤鎯呭喌錛?
| 澶栧眰EIP |
| 澶栧眰CS |
| EFLAG |
| 澶栧眰ESP |
| 澶栧眰SS |
-----------
榪欎釜鏍堝湪浠涔堝湴鏂瑰憿錛熻繖鐩稿綋閲嶈錛佽繖鏄湪褰撳垵鍒囨崲鑷沖唴灞傚爢鏍堟椂榪涜鐨勶紝鍗沖凡緇忓埌浜嗗綋鍓嶈繘紼嬬殑緋葷粺絀洪棿鍫嗘爤錛屼篃灝辨槸璺焧ask_struct鍏卞崰涓欏電殑閭d釜鍫嗘爤銆傝岃繖閲屼繚瀛樼殑灝辨槸璇ヨ繘紼嬪湪鐢ㄦ埛絀洪棿鐨勫爢鏍堝拰浠g爜淇℃伅錛屼互渚夸腑鏂畬鎴愬悗鎭㈠榪涚▼鎵ц銆?
浜屻佷腑鏂鐞嗙▼搴忋?
榪欓噷鎸囩殑鏄椂闂翠腑鏂傦紙鏂囩尞3錛歴ystem_call.c: timer_interrupt:錛?
timer_interrupt:
1. push %ds
2. push %es
3. push %fs
4. pushl %edx
5. pushl %ecx
6. pushl %ebx
7. pushl %eax
8. movl $0x10,%eax
9. mov %ax,%ds
10. mov %ax,%es
11. movl $0x17,%eax
12. mov %ax,%fs
13. incl jiffies
14. movb $0x20,%al
15. outb %al,$0x20
16. movl CS(%esp),%eax
17. andl $3,%eax
18. pushl %eax
19. call do_timer
20. andl $4,%esp
21. jmp ret_from_sys_call
1-7琛屼負(fù)鍘嬫爤鎿嶄綔錛岃繖鏄垜浠墍鍏沖績鐨勶紒16-18鍗蟲槸灝咰PL錛圕PL=CS&3錛夊帇鏍堬紝鐩殑鏄敤浜巇o_tiemr(long cpl)鍑芥暟銆傞偅涔堝湪鎵ц鍒癲o_timer閲岄潰鏃剁殑鍫嗘爤鎬庝箞鏍峰憿錛熺湅鐪嬶細(xì)
|榪斿洖鍦板潃 |
-----------
| CPL |
| eax |
| ebx |
| ecx |
| edx |
| fs |
| es |
| ds |
-----------
| 澶栧眰EIP |
| 澶栧眰CS |
| EFLAG |
| 澶栧眰ESP |
| 澶栧眰SS |
-----------
涓婇潰鐨勮繑鍥炲湴鍧褰撶劧灝辨槸璋冪敤do_timer鍚庣殑閭f潯璇彞錛屽嵆20琛岀殑andl $4,%esp璇彞銆傞偅涔堟槸涓嶆槸do_timer鍑芥暟鎵ц瀹屽氨榪斿洖鍒拌繖鍎垮憿錛屼篃鏄紝褰撶劧瑕佸鏉傚緱澶氾紝鍥犱負(fù)鍦╠o_timer()鍑芥暟涓皟鐢ㄤ簡schedule()騫朵笖鍙戠敓浜嗕換鍔″垏鎹紒鍝庯紝濂介夯鐑?chǔ)锛屼篃涓嶇煡閬撲粈涔堟椂鍊欐墠鑳借繑鍥炲埌榪欏効鏉ュ憿錛岃繕鏄竴姝ヤ竴姝ユ潵鐪嬪惂銆?
涓夈乨o_timer()錛堟枃鐚?錛歴ched.c: do_timer()錛?
void do_timer(long cpl)
{
...
if ((--current->counter)>0) return;
current->counter=0;
if(!cpl)return;
schedule();
}
鐪佺暐鍙蜂負(fù)鏃犲叧绱ц鐨勪袱鏉¤鍙ワ紝榪涜榪涚▼鐨勮鏃躲傚鏋滄椂闂寸墖娌℃湁鐢ㄥ畬(counter>0)鎴朇PL涓?錛屼笉鍙戠敓璋冨害鐩存帴榪斿洖錛屽綋鐒惰繖閲屼篃涓嶆槸灝辯洿鎺ヨ繑鍥炲埌浠ュ墠鎵ц鐨勮繘紼嬬┖闂達(dá)紝鑰屾槸榪斿洖鍒癲o_timer()涓紝娉ㄦ剰寮濮嬬殑榪斿洖鍦板潃錛岀劧鍚庡啀閫氳繃iret鎸囦護(hù)浠庝腑鏂鐞嗚繑鍥炲埌榪涚▼涓幓銆傚綋鐒?dòng)灱屾犚?guī)嵁鎴戜滑鐨勫亣璁撅紝榪欏効CPL搴旇涓?錛屽洜涓烘槸鍦ㄧ敤鎴風(fēng)┖闂村彂鐢熶腑鏂殑銆傛垜浠浠庢渶澶嶆潅鐨勬儏鍐墊潵璁ㄨ榪欎釜闂銆傚ソ浜嗭紝灝辮鎴戜滑榪涘叆鍒頒腑蹇冪偣鍚э紝璇瘋繘schedule()銆?
鍥涖乻chedule()銆?錛堟枃鐚?錛歴ched.c: schedule()錛?
void schedule(void )
{
int next;
...
switch_to(next);
}
鍛碉紝榪欓噷鎴戝張鐪佺暐浜嗗嚑鍙ヤ唬鐮侊紝瀹冩墽琛岀殑鏄皟搴︾畻娉曪紝鍗充粠鎵鏈夌姸鎬佷負(fù)‘榪愯’鐨勮繘紼嬩腑鎵懼嚭涓嬩竴涓鎵ц鐨勮繘紼嬶紝鐒跺悗灝嗙紪鍙瘋祴緇檔ext銆傝繘琛屽垏鎹紒
switch_to()鏄竴涓畯錛屽畠鍦紙鏂囩尞3錛?sched.h錛変腑瀹氫箟錛?
#define switch_to(n) { \
struct (long a,b;} __tmp; \
__asm__("cmpl %%ecx,current \n\t" \
"je 1f\n\t" \
"xchgl %%ecx, current\n\t" \
"movw %%dx, %1\n\t" \
"ljmp *%0\n\t" \
"cmpl %%ecx, %2\n\t" \
"jne 1f\n\t" \
"clts\n" \
"1:" \
::"m" (*&__tmp.a), "m" (*&__tmp.b), \
"m" (last_task_used_math),"d" _TSS(n), "c" ((long) task[n])); \
}
榪欐槸浠誨姟鍒囨崲鐨勫叧閿唬鐮侊紝鍘熺悊鏄洿鎺ラ氳繃TSS鏉ヨ繘琛屼換鍔$殑鍒囨崲錛堟枃鐚?錛歅420錛夈傞偅鎴戝氨灝嗚繖孌靛叧閿唬鐮侀愯瑙h涓涓嬪惂銆俢mpl %%ecx, current錛屾瘮杈冧換鍔鏄笉鏄綋鍓嶈繘紼嬶紝濡傛灉鏄綋鐒跺氨涓嶇敤鍒囨崲浜嗭紝鐩存帴緇撴潫schedule()銆倄chgl %%ecx,current錛宑urrent鎸囬拡鎸囧悜浠誨姟n鐨勪換鍔$粨鏋勶紝ecx瀵勫瓨鍣ㄤ繚瀛樺綋鍓嶈繘紼嬬殑浠誨姟緇撴瀯鎸囬拡銆俶ovw %%dx, %1錛?浣縚_tmp.b=‘GDT涓n涓換鍔$殑TSS閫夋嫨瀛?#8217;錛屾敞鎰廮TSS(n)鏄眰閫夋嫨瀛愮殑瀹忥紒ljmp *%0錛岃繖鍙ヤ唬鐮佸氨鏄湡姝g殑浠誨姟鍒囨崲緗楋紝 AT&T璇硶鐨刲jmp鐩稿綋浜嶪NTEL鐨刯mp far SECTION:OFFSET鎸囦護(hù)鏍煎紡錛屽畠鐨勭粷瀵瑰湴鍧鍓嶅姞*鍙楓傝繖閲屽紩鐢紙鏂囩尞1錛歅420錛変竴孌佃瘽錛氬綋孌甸棿杞Щ鎸囦護(hù)JMP鎵鍚寚閽堢殑閫夋嫨瀛愭寚紺轟竴涓彲鐢ㄤ換鍔$姸鎬佹TSS鎻忚堪絎︽椂錛屾甯告儏鍐典笅灝卞彂鐢熶粠褰撳墠浠誨姟鍒扮敱璇ュ彲鐢ㄤ換鍔$殑鍒囨崲銆傜洰鏍囦換鍔$殑鍏ュ彛鐐圭敱鐩爣浠誨姟TSS鍐呯殑CS鍜孍IP瀛楁鎵瑙勫畾鐨勬寚閽堢‘瀹氾紝榪欐牱鐨凧MP鎸囦護(hù)鍐呯殑鍋忕Щ琚涪寮冦傚啀鍏蜂綋鐨勪換鍔″垏鎹綘涔熻寰楃炕緲伙紙鏂囩尞1錛歅421錛夛紝榪欓噷鎴戝彧璁叉湁鍏沖爢鏍堢殑澶勭悊錛岄偅灝辨槸鎶婂瘎瀛樺櫒鐜板満淇濆瓨鍒板綋鍓嶄換鍔$殑TSS銆傛妸閫氱敤瀵勫瓨鍣ㄣ佹瀵勫瓨鍣ㄣ丒IP鍙?qiáng)EFLAGS鐨勫綋鍓嶅間繚瀛樺埌褰撳墠鐨凾SS涓備繚瀛樼殑EIP鐨勫兼槸榪斿洖鍦板潃錛屾寚鍚戝紩璧蜂換鍔″垏鎹㈡寚浠ょ殑涓嬩竴鏉℃寚浠わ紱鎭㈠鐩爣浠誨姟鐨勫瘎瀛樺櫒鐜板満錛屾牴鎹繚瀛樺湪TSS涓殑鍐呭鎭㈠鍚勯氱敤瀵勫瓨鍣ㄣ佹瀵勫瓨鍣ㄣ丒FLAG銆丒IP銆傚ソ浜嗭紝鍩烘湰姒傚康灝卞紩鐢ㄨ繖涔堝錛岄偅涔堬紝鍒氭墠鎻愬埌鐨勮繘紼嬮┈涓婅琚垏鎹㈠嚭鍘諱簡錛屽畠淇濆瓨TSS涓璄IP鏄粈涔堝憿錛熸樉鐒?dòng)灱屾犚?guī)嵁鍒氭墠鐨勫垎鏋愬簲璇ユ槸cmpl %%ecx, %2榪欐潯鎸囦護(hù)銆傝繖鎰忓懗鐫浠涔堝憿錛熻繖灝辨槸璇達(dá)紝濡傛灉涓嬫榪欎釜浠誨姟瑕佽鍒囨崲鎴愯繍琛岀姸鎬佹椂錛屽畠?yōu)畣浠巆mpl %%ecx, %2榪欐潯鎸囦護(hù)寮濮嬫墽琛岋紒閭d箞錛岀敱褰間換鍔℃帹鍒版浠誨姟錛屼篃灝辨槸璇存垜浠垏鎹㈣嚦浠誨姟next鏃訛紝瀹冧篃鏄粠榪欐潯鎸囦護(hù)寮濮嬫墽琛岀殑錛佷簬鏄垜浠繘鍏ュ埌浠誨姟next鐨勫爢鏍堢┖闂達(dá)紝騫跺紑濮嬫墽琛岋紝浣嗙敱浜庝換鍔ext鍜屽綋鍓嶇殑浠誨姟鏈夌潃鐩稿悓鐨勫爢鏍堣礬寰勶紙榪欏拰LINUX涓殑鍐呮牳鎺у埗璺緞鏄笉鏄竴鍥炰簨鍛紵錛夛紝鎵浠ユ垜浠繕鏄紩鐢ㄥ綋鍓嶇殑鍫嗘爤鏉ョ戶緇垎鏋愩?
鍝︼紝鏈夌偣緋婃秱浜嗭紝濂借薄鏄備紤鎭竴涓嬶紝鍐嶅弬鑰冧竴涓嬶紙鏂囩尞2錛氫笂鍐孭373錛夈備笓瀹朵篃鏄繖鏍瘋鐨?)
瑕佷笉錛屾垜浠繖涔堢悊瑙o紝鍒氭墠琚腑鏂殑榪涚▼鍙戠敓浜嗗己鍒惰皟搴︼紝涓斾篃鍙戠敓浜嗕換鍔″垏鎹紝鍙笉榪囨槸鍒囨崲鍒板畠鑷繁錛屽疄闄呬笂涓嶆槸鍝熴傚ソ鍚э紝JMP鎴愬姛錛屽紑濮嬫墽琛屻?
浜斻佽漿鎶樼偣錛屼粠schedule()榪斿洖銆?
cmpl %%ecx, %2錛沯ne 1f; clts;1: 榪欏嚑鍙ユ槸涓庡崗澶勭悊鍣ㄦ湁鍏籌紝榪樻湁TS鏍囧織錛屾垜浠氨鐩存帴鍒?錛氬惂錛屽紑濮嬩粠schedule()榪斿洖錛屾敞鎰弒witch_to()鏄畯錛屽畠鍦╯chedule()鏈銆傝繑鍥炲埌鍝効鍘諱簡鍛紵璺熻釜涓涓嬶紝鐪嬬湅涓婇潰鐨勫爢鏍堢ず鎰忓浘錛岃繑鍥炲湴鍧灝辨槸璋冪敤do_timer鍚庣殑閭f潯璇彞錛?
addl $4, %esp
jmp ret_from_sys_call
榪欏効esp鍔?灝辨槸鎶婂爢鏍堜腑鐨凜PL鍘繪帀錛屽洜涓烘垜浠笉鐢ㄤ簡錛岃煩杞埌ret_from_sys_call銆傚摝錛屽墿涓嬬殑澶勭悊涓庣郴緇熻皟鐢ㄨ繑鍥炲叡鐢ㄤ唬鐮併?
鍏乺et_from_sys_call 錛堟枃鐚?錛宬ernel/system_call.s錛?
鍏堢湅鐪嬫垜浠殑鐒︾偣錛屽爢鏍堟庝箞鏍蜂簡鍛紵
| eax |
| ebx |
| ecx |
| edx |
| fs |
| es |
| ds |
-----------
| 澶栧眰EIP |
| 澶栧眰CS |
| EFLAG |
| 澶栧眰ESP |
| 澶栧眰SS |
-----------
ret_from_sys_call:
movel current, %eax
cmpl task, %eax
je 3f
movl CS(%esp), %ebx
testl $3, %ebx
je 3f
cmpw $0x17, OLDSS(%esp)
jne 3f
2:
....
3:
popl %eax
popl %ebx
popl %ecx
popl %edx
pop %fs
pop %es
pop %ds
iret
2鏍囧彿澶勬垜鐪佺暐浜嗕竴浜涙湁鍏充俊鍙峰強(qiáng)鍏跺畠涓浜涘鐞嗐傝鎴戜滑鍒嗘瀽涓涓嬶紝濡傛灉褰撳墠浠誨姟鏄?鍙瘋繘紼嬶紝鎴栨槸浠誨姟鍏堝墠鐨凜PL涓?錛堝嵆鐢ㄦ埛鎬侊級(jí)錛屾垨鏄換鍔″厛鍓嶇殑鍫嗘爤孌典負(fù)LDT涓寚瀹氱殑鍫嗘爤錛孞MP鍒?鏍囧彿澶勩傜敱鍏堝墠鐨勫亣璁懼彲鐭ワ紝姝や換鍔$殑CPL涓?錛岄偅灝辮煩鍚с傛妸eax, ebc, ecx, edx, fs, es, ds瀵勫瓨鍣ㄤ粠鍫嗘爤涓仮澶嶅嚭鏉ャ?
鐜板湪鍫嗘爤濡備笅錛?
| 澶栧眰EIP |
| 澶栧眰CS |
| EFLAG |
| 澶栧眰ESP |
| 澶栧眰SS |
-----------
璁板緱鎴戜滑榪樻湁鏈鍚庝竴鏉¤鍙ュ摕錛宨ret銆傝繖鏉℃寚浠ゅぇ瀹舵兂蹇呭凡緇忓緢鐔熸?zhèn)変簡锛屽畠鎭㈠EIP銆丆S銆丒FLAG銆丒SP銆丼S銆傝寰椾笉錛岃繖鏄笉鏄凡緇忔仮澶嶅埌浜嗘渶鍒濈殑鏃墮棿涓柇鏃惰繘紼嬭涓柇鐨勯偅涓鍒伙紵鎭枩錛佷綘緇堜簬鍙互緇х畫鍋氫綘闇瑕佸仛鐨勪簨鎯呬簡錛佸皬蹇冿紝榪樻湁涓嬩竴涓椂闂翠腑鏂紝鍝︼紝浣犱笉鎬曪紵鍥犱負(fù)瀹冧笉浼?xì)濯?jiǎng)鍝嶄綘鐨勮繛璐с?
緇撴潫璇細(xì)
鎴戜滑璧拌繃浜嗕竴孌佃壈杈涚殑鍘嗙▼錛屼絾鎴戜滑璧扮殑鏄竴孌佃繎涔庣洿綰跨殑璺緞錛屽茍娌℃湁鍒嗘瀽鍒板叾瀹冨悇涓柟闈㈢殑鎯呭喌銆備笉榪囨垜鐩鎬俊錛岄氳繃榪欐璺▼錛屼細(xì)璁╂垜浠浜庝換鍔″垏鎹㈡満鍒舵湁涓涓洿娣卞叆鐨勮璇嗐傚笇鏈涘澶у鏈夋墍甯姪錛岃繖涔熸槸鎴戝啓鍑烘潵涓庡ぇ瀹跺垎浜殑緙樻晠銆?
鍙傝冩枃鐚細(xì)
1銆?0X86姹囩紪璇█紼嬪簭璁捐鏁欑▼ 鏉ㄥ鏂囩紪钁?娓呭崕澶у鍑虹増紺?
2銆丩INUX鍐呮牳婧愪唬鐮佹儏鏅垎鏋?姣涘痙鎿?鑳″笇鏄庤憲 嫻欐睙澶у鍑虹増紺?
3銆丩INUX0.01婧愪唬鐮?
4銆乭ttp://www.linuxforum.net/ LINUX鍐呮牳鍒嗘瀽-->綺懼崕綃?->榪涚▼璋冨害
]]>
]]>
]]>
Here are the different values that the s, stat and state output
specifiers (header "STAT" or "S") will display to describe the state of
a process.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being
traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its
parent.
For BSD formats and when the stat keyword is used, additional
characters may be displayed:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group
瀵逛簬鎻愪緵浜哅MU錛堝瓨鍌ㄧ鐞嗗櫒錛岃緟鍔╂搷浣滅郴緇熻繘琛屽唴瀛樼鐞嗭紝鎻愪緵铏氬疄鍦板潃杞崲絳夌‖浠舵敮鎸侊級(jí)鐨勫鐞嗗櫒鑰岃█錛孡inux鎻愪緵浜嗗鏉傜殑瀛樺偍綆$悊緋葷粺錛屼嬌寰楄繘紼嬫墍鑳借闂殑鍐呭瓨杈懼埌4GB銆?/p>
銆銆榪涚▼鐨?GB鍐呭瓨絀洪棿琚漢涓虹殑鍒嗕負(fù)涓や釜閮ㄥ垎--鐢ㄦ埛絀洪棿涓庡唴鏍哥┖闂淬傜敤鎴風(fēng)┖闂村湴鍧鍒嗗竷浠?鍒?GB(PAGE_OFFSET錛屽湪0x86涓畠絳変簬0xC0000000)錛?GB鍒?GB涓哄唴鏍哥┖闂淬?/p>
銆銆鍐呮牳絀洪棿涓紝浠?G鍒皏malloc_start榪欐鍦板潃鏄墿鐞嗗唴瀛樻槧灝勫尯鍩燂紙璇ュ尯鍩熶腑鍖呭惈浜嗗唴鏍擱暅鍍忋佺墿鐞嗛〉妗嗚〃mem_map絳夌瓑錛夛紝姣斿鎴戜滑浣跨敤鐨?VMware铏氭嫙緋葷粺鍐呭瓨鏄?60M錛岄偅涔?G锝?G+160M榪欑墖鍐呭瓨灝卞簲璇ユ槧灝勭墿鐞嗗唴瀛樸傚湪鐗╃悊鍐呭瓨鏄犲皠鍖轟箣鍚庯紝灝辨槸vmalloc鍖哄煙銆傚浜?160M鐨勭郴緇熻岃█錛寁malloc_start浣嶇疆搴斿湪3G+160M闄勮繎錛堝湪鐗╃悊鍐呭瓨鏄犲皠鍖轟笌vmalloc_start鏈熼棿榪樺瓨鍦ㄤ竴涓?M鐨刧ap 鏉ラ槻姝㈣穬鐣岋級(jí)錛寁malloc_end鐨勪綅緗帴榪?G(鏈鍚庝綅緗郴緇熶細(xì)淇濈暀涓鐗?28k澶у皬鐨勫尯鍩熺敤浜庝笓鐢ㄩ〉闈㈡槧灝?
銆銆銆銆銆kmalloc鍜実et_free_page鐢寵鐨勫唴瀛樹綅浜庣墿鐞嗗唴瀛樻槧灝勫尯鍩燂紝鑰屼笖鍦ㄧ墿鐞嗕笂涔熸槸榪炵畫鐨勶紝瀹冧滑涓庣湡瀹炵殑鐗╃悊鍦板潃鍙湁涓涓浐瀹氱殑鍋忕Щ錛屽洜姝ゅ瓨鍦ㄨ緝綆鍗曠殑杞崲鍏崇郴錛寁irt_to_phys()鍙互瀹炵幇鍐呮牳铏氭嫙鍦板潃杞寲涓虹墿鐞嗗湴鍧錛?br> #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
extern inline unsigned long virt_to_phys(volatile void * address)
{
銆return __pa(address);
}
涓婇潰杞崲榪囩▼鏄皢铏氭嫙鍦板潃鍑忓幓3G錛圥AGE_OFFSET=0XC000000錛夈?/p>
涓庝箣瀵瑰簲鐨勫嚱鏁頒負(fù)phys_to_virt()錛屽皢鍐呮牳鐗╃悊鍦板潃杞寲涓鴻櫄鎷熷湴鍧錛?br> #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
extern inline void * phys_to_virt(unsigned long address)
{
銆return __va(address);
}
virt_to_phys()鍜宲hys_to_virt()閮藉畾涔夊湪include\asm-i386\io.h涓?/p>
-------------------------------------------------------------------------------------
1銆乲malloc() 鍒嗛厤榪炵畫鐨勭墿鐞嗗湴鍧錛岀敤浜庡皬鍐呭瓨鍒嗛厤銆?
銆銆2銆乢_get_free_page() 鍒嗛厤榪炵畫鐨勭墿鐞嗗湴鍧錛岀敤浜庢暣欏靛垎閰嶃?
銆銆鑷充簬涓轟粈涔堣浠ヤ笂鍑芥暟鍒嗛厤鐨勬槸榪炵畫鐨勭墿鐞嗗湴鍧鍜岃繑鍥炵殑鍒板簳鏄墿鐞嗗湴鍧榪樻槸铏氭嫙鍦板潃錛屼笅闈㈢殑璁板綍浼?xì)鍋氬國櫑i噴銆?
銆銆kmalloc() 鍑芥暟鏈韓鏄熀浜?slab 瀹炵幇鐨勩俿lab 鏄負(fù)鍒嗛厤灝忓唴瀛樻彁渚涚殑涓縐嶉珮鏁堟満鍒躲備絾 slab 榪欑鍒嗛厤鏈哄埗鍙堜笉鏄嫭绔嬬殑錛屽畠鏈韓涔熸槸鍦ㄩ〉鍒嗛厤鍣ㄧ殑鍩虹涓婃潵鍒掑垎鏇寸粏綺掑害鐨勫唴瀛樹緵璋冪敤鑰呬嬌鐢ㄣ備篃灝辨槸璇寸郴緇熷厛鐢ㄩ〉鍒嗛厤鍣ㄥ垎閰嶄互欏典負(fù)鏈灝忓崟浣嶇殑榪炵畫鐗╃悊鍦板潃錛岀劧鍚?kmalloc() 鍐嶅湪榪欎笂闈㈡牴鎹皟鐢ㄨ呯殑闇瑕佽繘琛屽垏鍒嗐?
銆銆鍏充簬浠ヤ笂璁鴻堪錛屾垜浠彲浠ユ煡鐪?kmalloc() 鐨勫疄鐜幫紝kmalloc()鍑芥暟鐨勫疄鐜版槸鍦?__do_kmalloc() 涓紝鍙互鐪嬪埌鍦?__do_kmalloc()浠g爜閲屾渶緇堣皟鐢ㄤ簡 __cache_alloc() 鏉ュ垎閰嶄竴涓?slab錛屽叾瀹?
銆銆kmem_cache_alloc() 絳夊嚱鏁扮殑瀹炵幇涔熸槸璋冪敤浜嗚繖涓嚱鏁版潵鍒嗛厤鏂扮殑 slab銆傛垜浠寜鐓?__cache_alloc()鍑芥暟鐨勮皟鐢ㄨ礬寰勪竴鐩磋窡韙笅鍘諱細(xì)鍙戠幇鍦?cache_grow() 鍑芥暟涓嬌鐢ㄤ簡 kmem_getpages()鍑芥暟鏉ュ垎閰嶄竴涓墿鐞嗛〉闈紝kmem_getpages() 鍑芥暟涓皟鐢ㄧ殑alloc_pages_node() 鏈緇堟槸浣跨敤 __alloc_pages() 鏉ヨ繑鍥炰竴涓猻truct page 緇撴瀯錛岃岃繖涓粨鏋勬鏄郴緇熺敤鏉ユ弿榪扮墿鐞嗛〉闈㈢殑銆傝繖鏍蜂篃灝辮瘉瀹炰簡涓婇潰鎵璇寸殑錛宻lab 鏄湪鐗╃悊欏甸潰鍩虹涓婂疄鐜扮殑銆俴malloc() 鍒嗛厤鐨勬槸鐗╃悊鍦板潃銆?
銆銆__get_free_page() 鏄〉闈㈠垎閰嶅櫒鎻愪緵緇欒皟鐢ㄨ呯殑鏈搴曞眰鐨勫唴瀛樺垎閰嶅嚱鏁般傚畠鍒嗛厤榪炵畫鐨勭墿鐞嗗唴瀛樸俖_get_free_page() 鍑芥暟鏈韓鏄熀浜?buddy 瀹炵幇鐨勩傚湪浣跨敤 buddy 瀹炵幇鐨勭墿鐞嗗唴瀛樼鐞嗕腑鏈灝忓垎閰嶇矑搴︽槸浠ラ〉涓哄崟浣嶇殑銆傚叧浜庝互涓婅榪幫紝鎴戜滑鍙互鏌ョ湅__get_free_page()鐨勫疄鐜幫紝鍙互鐪嬪埌__get_free_page()鍑芥暟鍙槸涓涓潪甯哥畝鍗曠殑灝佺姸錛屽畠鐨勬暣涓嚱鏁板疄鐜板氨鏄棤鏉′歡鐨勮皟鐢?__alloc_pages() 鍑芥暟鏉ュ垎閰嶇墿鐞嗗唴瀛橈紝涓婇潰璁板綍 kmalloc()瀹炵幇鏃朵篃鎻愬埌榪囨槸鍦ㄨ皟鐢?__alloc_pages() 鍑芥暟鏉ュ垎閰嶇墿鐞嗛〉闈㈢殑鍓嶆彁涓嬭繘琛岀殑 slab 綆$悊銆傞偅涔堣繖涓嚱鏁版槸濡備綍鍒嗛厤鍒扮墿鐞嗛〉闈㈠張鏄湪浠涔堝尯鍩熶腑榪涜鍒嗛厤鐨勶紵鍥炵瓟榪欎釜闂鍙兘鐪嬩笅鐩稿叧鐨勫疄鐜般傚彲浠ョ湅鍒板湪 __alloc_pages() 鍑芥暟涓紝澶氭灝濊瘯璋冪敤get_page_from_freelist() 鍑芥暟浠?zonelist 涓彇寰楃浉鍏?zone錛屽茍浠庡叾涓繑鍥炰竴涓彲鐢ㄧ殑 struct page 欏甸潰錛堣繖閲岀殑鏈変簺璋冪敤鍒嗘敮鏄洜涓烘爣蹇椾笉鍚岋級(jí)銆傝嚦姝わ紝鍙互鐭ラ亾涓涓墿鐞嗛〉闈㈢殑鍒嗛厤鏄粠 zonelist錛堜竴涓?zone 鐨勭粨鏋勬暟緇勶級(jí)涓殑 zone 榪斿洖鐨勩傞偅涔?zonelist/zone 鏄浣曚笌鐗╃悊欏甸潰鍏寵仈錛屽張鏄浣曞垵濮嬪寲鐨勫憿錛熺戶緇潵鐪?free_area_init_nodes() 鍑芥暟錛屾鍑芥暟鍦ㄧ郴緇熷垵濮嬪寲鏃剁敱 zone_sizes_init() 鍑芥暟闂存帴璋冪敤鐨勶紝zone_sizes_init()鍑芥暟濉厖浜嗕笁涓尯鍩燂細(xì)ZONE_DMA錛孼ONE_NORMAL錛孼ONE_HIGHMEM銆傚茍鎶婁粬浠綔涓哄弬鏁拌皟鐢?free_area_init_nodes()錛屽湪榪欎釜鍑芥暟涓細(xì)鍒嗛厤涓涓?pglist_data 緇撴瀯錛屾緇撴瀯涓寘鍚簡 zonelist/zone緇撴瀯鍜屼竴涓?struct page 鐨勭墿鐞嗛〉緇撴瀯錛屽湪鍑芥暟鏈鍚庣敤姝ょ粨鏋勪綔涓哄弬鏁拌皟鐢ㄤ簡 free_area_init_node() 鍑芥暟錛屽湪榪欎釜鍑芥暟涓鍏堜嬌鐢?calculate_node_totalpages() 鍑芥暟鏍囪 pglist_data 鐩稿叧鍖哄煙錛岀劧鍚庤皟鐢?alloc_node_mem_map() 鍑芥暟鍒濆鍖?pglist_data緇撴瀯涓殑 struct page 鐗╃悊欏點(diǎn)傛渶鍚庝嬌鐢?free_area_init_core()鍑芥暟鍏寵仈 pglist_data 涓?zonelist銆傜幇鍦ㄩ氫互涓婂垎鏋愬凡緇忔槑紜簡__get_free_page() 鍑芥暟鍒嗛厤鐗╃悊鍐呭瓨鐨勬祦紼嬨備絾榪欓噷鍙堝紩鍑轟簡鍑犱釜鏂伴棶棰橈紝閭e氨鏄鍑芥暟鍒嗛厤鐨勭墿鐞嗛〉闈㈡槸濡備綍鏄犲皠鐨勶紵鏄犲皠鍒頒簡浠涔堜綅緗紵鍒拌繖閲屼笉寰椾笉鍘葷湅涓嬩笌 VMM 鐩稿叧鐨勫紩瀵間唬鐮併?
銆銆鍦ㄧ湅 VMM 鐩稿叧鐨勫紩瀵間唬鐮佸墠錛屽厛鏉ョ湅涓涓?virt_to_phys() 涓巔hys_to_virt 榪欎袱涓嚱鏁般傞【鍚嶆濅箟錛屽嵆鏄櫄鎷熷湴鍧鍒扮墿鐞嗗湴鍧鍜岀墿鐞嗗湴鍧鍒拌櫄鎷熷湴鍧鐨勮漿鎹€傚嚱鏁板疄鐜板崄鍒嗙畝鍗曪紝鍓嶈呰皟鐢ㄤ簡__pa( address ) 杞崲铏氭嫙鍦板潃鍒扮墿鐞嗗湴鍧錛屽悗鑰呰皟鐢?__va(addrress ) 灝嗙墿鐞嗗湴鍧杞崲涓鴻櫄鎷熷湴鍧銆傚啀鐪嬩笅 __pa __va 榪欎袱涓畯鍒板簳鍋氫簡浠涔堛?
銆銆#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
銆銆#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
銆銆閫氳繃涓婇潰鍙互鐪嬪埌浠呬粎鏄妸鍦板潃鍔犱笂鎴栧噺鍘?PAGE_OFFSET錛岃孭AGE_OFFSET 鍦?x86 涓嬪畾涔変負(fù) 0xC0000000銆傝繖閲屽張寮曞嚭浜嗙枒闂紝鍦?linux 涓嬪啓榪?driver 鐨勪漢閮界煡閬擄紝鍦ㄤ嬌鐢?kmalloc() 涓?
銆銆__get_free_page() 鍒嗛厤瀹岀墿鐞嗗湴鍧鍚庯紝濡傛灉鎯沖緱鍒版紜殑鐗╃悊鍦板潃闇瑕佷嬌鐢?virt_to_phys() 榪涜杞崲銆傞偅涔堜負(fù)浠涔堣鏈夎繖涓姝ュ憿錛熸垜浠笉鍒嗛厤鐨勪笉灝辨槸鐗╃悊鍦板潃涔堬紵鎬庝箞鍒嗛厤瀹屾垚榪橀渶瑕佽漿鎹紵濡傛灉榪斿洖鐨勬槸铏氭嫙鍦板潃錛岄偅涔堟牴鎹涓婂 virt_to_phys() 鐨勫垎鏋愶紝涓轟粈涔堜粎浠呭 PAGE_OFFSET 鎿嶄綔灝辮兘瀹炵幇鍦板潃杞崲鍛紵铏氭嫙鍦板潃涓庣墿鐞嗗湴鍧涔嬮棿鐨勮漿鎹笉闇瑕佹煡欏佃〃涔堬紵浠g潃浠ヤ笂璇稿鐤戦棶鏉ョ湅 VMM 鐩稿叧鐨勫紩瀵間唬鐮併?
銆銆鐩存帴浠?start_kernel() 鍐呮牳寮曞閮ㄥ垎鏉ユ煡鎵?VMM 鐩稿叧鍐呭銆傚彲浠ョ湅鍒扮涓涓簲璇ュ叧娉ㄧ殑鍑芥暟鏄?setup_arch()錛屽湪榪欎釜鍑芥暟褰撲腑浣跨敤paging_init() 鍑芥暟鏉ュ垵濮嬪寲鍜屾槧灝勭‖浠墮〉琛紙鍦ㄥ垵濮嬪寲鍓嶅凡鏈?8M鍐呭瓨琚槧灝勶紝鍦ㄨ繖閲屼笉鍋氳褰曪級(jí)錛岃?paging_init() 鍒欐槸璋冪敤鐨刾agetable_init() 鏉ュ畬鎴愬唴鏍哥墿鐞嗗湴鍧鐨勬槧灝勪互鍙?qiáng)鐩稿厸_唴瀛樼殑鍒濆鍖栥傚湪 pagetable_init() 鍑芥暟涓紝棣栧厛鏄竴浜?PAE/PSE/PGE 鐩稿叧鍒ゆ柇涓庤緗紝鐒跺悗浣跨敤 kernel_physical_mapping_init() 鍑芥暟鏉ュ疄鐜板唴鏍哥墿鐞嗗唴瀛樼殑鏄犲皠銆傚湪榪欎釜鍑芥暟涓彲浠ュ緢娓呮鐨勭湅鍒幫紝pgd_idx 鏄互PAGE_OFFSET 涓哄惎濮嬪湴鍧榪涜鏄犲皠鐨勶紝涔熷氨鏄寰幆鍒濆鍖栨墍鏈夌墿鐞嗗湴鍧鏄互 PAGE_OFFSET 涓鴻搗鐐圭殑銆傜戶緇瀵熸垜浠彲浠ョ湅鍒板湪 PMD 琚垵濮嬪寲鍚庯紝鎵鏈夊湴鍧璁$畻鍧囨槸浠?PAGE_OFFSET 浣滀負(fù)鏍囪鏉ラ掑鐨勩傚垎鏋愬埌榪欓噷宸茬粡寰堟槑鏄劇殑鍙互鐪嬪嚭錛岀墿鐞嗗湴鍧琚槧灝勫埌浠?PAGE_OFFSET 寮濮嬬殑铏氭嫙鍦板潃絀洪棿銆傝繖鏍蜂互涓婃墍鏈夌枒闂氨閮芥湁浜嗙瓟妗堛俴malloc() 涓巁_get_free_page() 鎵鍒嗛厤鐨勭墿鐞嗛〉闈㈣鏄犲皠鍒頒簡 PAGE_OFFSET 寮濮嬬殑铏氭嫙鍦板潃錛屼篃灝辨槸璇村疄闄呯墿鐞嗗湴鍧涓庤櫄鎷熷湴鍧鏈変竴緇勪竴涓瀵瑰簲鐨勫叧緋伙紝
銆銆姝f槸鍥犱負(fù)鏈変簡榪欑鏄犲皠鍏崇郴錛屽鍐呮牳浠?PAGE_OFFSET 鍚鐨勮櫄鎷熷湴鍧鐨勫垎閰嶄篃灝辨槸瀵圭墿鐞嗗湴鍧鐨勫垎閰嶏紙褰撶劧榪欐湁涓瀹氱殑鑼冨洿錛屽簲璇ュ湪 PAGE_OFFSET涓?VMALLOC_START 涔嬮棿錛屽悗鑰呬負(fù) vmalloc() 鍑芥暟鍒嗛厤鍐呭瓨鐨勫惎濮嬪湴鍧錛夈傝繖涔熷氨瑙i噴浜嗕負(fù)浠涔?virt_to_phys() 涓?phys_to_virt() 鍑芥暟鐨勫疄鐜頒粎浠呮槸鍔?鍑?PAGE_OFFSET 鍗沖彲鍦ㄨ櫄鎷熷湴鍧涓庣墿鐞嗗湴鍧涔嬮棿杞崲錛屾鏄洜涓轟簡鏈変簡榪欑鏄犲皠錛屼笖鍥哄畾涓嶅彉錛屾墍浠ユ墠涓嶇敤鍘繪煡欏佃〃榪涜杞崲銆傝繖涔熷悓鏍峰洖絳斾簡寮濮嬬殑闂錛屽嵆 kmalloc() / __get_free_page() 鍒嗛厤鐨勬槸鐗╃悊鍦板潃錛岃岃繑鍥炵殑鍒欐槸铏氭嫙鍦板潃錛堣櫧鐒惰繖鍚笂鍘繪湁浜涘埆鎵級(jí)銆傛鏄洜涓烘湁浜嗚繖縐嶆槧灝勫叧緋伙紝鎵浠ラ渶瑕佸皢瀹冧滑鐨勮繑鍥炲湴鍧鍑忓幓 PAGE_OFFSET 鎵嶅彲浠ュ緱鍒扮湡姝g殑鐗╃悊鍦板潃銆?/p>
鍙︿竴綃囨洿瀹規(guī)槗鐞嗚В鐨勶細(xì)
kmalloc, vmalloc鍒嗛厤鐨勫唴瀛樼粨鏋?zz
2008-01-20 16:05
榪涚▼絀洪棿錛殀 <-鐢ㄦ埛絀洪棿-> | <-鍐呮牳絀洪棿-> |
鍐呮牳絀洪棿錛殀 <-鐗╃悊鍐呭瓨鏄犲皠鍖?> | <-vmalloc鍖哄煙-> |
==============鍘熸枃================================
瀵逛簬鎻愪緵浜哅MU錛堝瓨鍌ㄧ鐞嗗櫒錛岃緟鍔╂搷浣滅郴緇熻繘琛屽唴瀛樼鐞嗭紝鎻愪緵铏氬疄鍦板潃杞崲絳夌‖浠舵敮鎸侊級(jí)鐨勫鐞嗗櫒鑰岃█錛孡inux鎻愪緵浜嗗鏉傜殑瀛樺偍綆$悊緋葷粺錛屼嬌寰楄繘紼嬫墍鑳借闂殑鍐呭瓨杈懼埌4GB銆?/p>
榪涚▼鐨?GB鍐呭瓨絀洪棿琚漢涓虹殑鍒嗕負(fù)涓や釜閮ㄥ垎--鐢ㄦ埛絀洪棿涓庡唴鏍哥┖闂淬傜敤鎴風(fēng)┖闂村湴鍧鍒嗗竷浠?鍒?GB(PAGE_OFFSET錛屽湪0x86涓畠絳変簬0xC0000000)錛?GB鍒?GB涓哄唴鏍哥┖闂淬?/p>
鍐呮牳絀洪棿涓紝浠?G鍒皏malloc_start榪欐鍦板潃鏄墿鐞嗗唴瀛樻槧灝勫尯鍩燂紙璇ュ尯鍩熶腑鍖呭惈浜嗗唴鏍擱暅鍍忋佺墿鐞嗛〉妗嗚〃mem_map絳夌瓑錛夛紝姣斿鎴戜滑浣跨敤 鐨?VMware铏氭嫙緋葷粺鍐呭瓨鏄?60M錛岄偅涔?G锝?G+160M榪欑墖鍐呭瓨灝卞簲璇ユ槧灝勭墿鐞嗗唴瀛樸傚湪鐗╃悊鍐呭瓨鏄犲皠鍖轟箣鍚庯紝灝辨槸vmalloc鍖哄煙銆傚浜?160M鐨勭郴緇熻岃█錛寁malloc_start浣嶇疆搴斿湪3G+160M闄勮繎錛堝湪鐗╃悊鍐呭瓨鏄犲皠鍖轟笌vmalloc_start鏈熼棿榪樺瓨鍦ㄤ竴涓?M鐨刧ap 鏉ラ槻姝㈣穬鐣岋級(jí)錛寁malloc_end鐨勪綅緗帴榪?G(鏈鍚庝綅緗郴緇熶細(xì)淇濈暀涓鐗?28k澶у皬鐨勫尯鍩熺敤浜庝笓鐢ㄩ〉闈㈡槧灝?
kmalloc鍜実et_free_page鐢寵鐨勫唴瀛樹綅浜庣墿鐞嗗唴瀛樻槧灝勫尯鍩燂紝鑰屼笖鍦ㄧ墿鐞嗕笂涔熸槸榪炵畫鐨勶紝瀹冧滑涓庣湡瀹炵殑鐗╃悊鍦板潃鍙湁涓涓浐瀹氱殑鍋忕Щ錛屽洜姝ゅ瓨鍦ㄨ緝綆鍗曠殑杞崲鍏崇郴錛寁irt_to_phys()鍙互瀹炵幇鍐呮牳铏氭嫙鍦板潃杞寲涓虹墿鐞嗗湴鍧錛?br> #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
extern inline unsigned long virt_to_phys(volatile void * address)
{
銆return __pa(address);
}
涓婇潰杞崲榪囩▼鏄皢铏氭嫙鍦板潃鍑忓幓3G錛圥AGE_OFFSET=0XC000000錛夈?/p>
涓庝箣瀵瑰簲鐨勫嚱鏁頒負(fù)phys_to_virt()錛屽皢鍐呮牳鐗╃悊鍦板潃杞寲涓鴻櫄鎷熷湴鍧錛?br> #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
extern inline void * phys_to_virt(unsigned long address)
{
銆return __va(address);
}
virt_to_phys()鍜宲hys_to_virt()閮藉畾涔夊湪include\asm-i386\io.h涓?/p>
鑰寁malloc鐢寵鐨勫唴瀛樺垯浣嶄簬vmalloc_start锝瀡malloc_end涔嬮棿錛屼笌鐗╃悊鍦板潃娌℃湁綆鍗曠殑杞崲鍏崇郴錛岃櫧鐒跺湪閫昏緫涓婂畠浠篃鏄繛緇殑錛屼絾鏄湪鐗╃悊涓婂畠浠笉瑕佹眰榪炵畫銆?/p>
鎴戜滑鐢ㄤ笅闈㈢殑紼嬪簭鏉ユ紨紺簁malloc銆乬et_free_page鍜寁malloc鐨勫尯鍒細(xì)
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
MODULE_LICENSE("GPL");
unsigned char *pagemem;
unsigned char *kmallocmem;
unsigned char *vmallocmem;
int __init mem_module_init(void)
{
//鏈濂芥瘡嬈″唴瀛樼敵璇烽兘媯(gè)鏌ョ敵璇鋒槸鍚︽垚鍔?br>//涓嬮潰榪欐浠呬粎浣滀負(fù)婕旂ず鐨勪唬鐮佹病鏈夋鏌?br>pagemem = (unsigned char*)get_free_page(0);
printk("<1>pagemem addr=%x", pagemem);
kmallocmem = (unsigned char*)kmalloc(100, 0);
printk("<1>kmallocmem addr=%x", kmallocmem);
vmallocmem = (unsigned char*)vmalloc(1000000);
printk("<1>vmallocmem addr=%x", vmallocmem);
return 0;
}
void __exit mem_module_exit(void)
{
free_page(pagemem);
kfree(kmallocmem);
vfree(vmallocmem);
}
module_init(mem_module_init);
module_exit(mem_module_exit);
鎴戜滑鐨勭郴緇熶笂鏈?60MB鐨勫唴瀛樼┖闂達(dá)紝榪愯涓嬈′笂榪扮▼搴忥紝鍙戠幇pagemem鐨勫湴鍧鍦?xc7997000錛堢害3G+121M錛夈乲mallocmem 鍦板潃鍦?xc9bc1380錛堢害3G+155M錛夈乿mallocmem鐨勫湴鍧鍦?xcabeb000錛堢害3G+171M錛夊錛岀鍚堝墠鏂囨墍榪扮殑鍐呭瓨甯冨眬銆?
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/sandflee/archive/2009/07/28/4388322.aspx
POSIX鏄疨ortable Operating System Interface of Unix鐨勭緝鍐欍傜敱IEEE錛圛nstitute of Electrical and Electronic Engineering錛夊紑鍙戯紝鐢盇NSI鍜孖SO鏍囧噯鍖栥?br> POSIX鐨勮癁鐢熷拰Unix鐨勫彂灞曟槸瀵嗕笉鍙垎鐨勶紝Unix浜?0騫翠唬璇炵敓浜嶣ell lab錛屽茍浜?0騫翠唬鍚戠編鍚勫ぇ楂樻牎鍒嗗彂V7鐗堢殑婧愮爜浠ュ仛鐮旂┒銆俇C Berkeley鍦╒7鐨勫熀紜涓婂紑鍙戜簡BSD Unix銆傚悗鏉ュ緢澶氬晢涓氬巶瀹舵剰璇嗗埌Unix鐨勪環(huán)鍊間篃綰風(fēng)悍浠ell Lab鐨凷ystem V鎴朆SD涓哄熀紜鏉ュ紑鍙戣嚜宸辯殑Unix錛岃緝钁楀悕鐨勬湁Sun OS錛孉IX錛孷MS銆傜敱浜庡悇鍘傚瀵筓nix鐨勫紑鍙戝悇鑷負(fù)鏀匡紝閫犳垚浜哢nix鐨勭増鏈浉褰撴販涔憋紝緇欒蔣浠剁殑鍙Щ妞嶆у甫鏉ュ緢澶у洶闅撅紝瀵筓nix鐨勫彂灞曟瀬涓轟笉鍒┿備負(fù)緇撴潫榪欑灞闈紝IEEE寮鍙戜簡POSIX錛孭OSIX鍦ㄦ簮浠g爜綰у埆涓婂畾涔変簡涓緇勬渶灝忕殑Unix(綾籙nix)鎿嶄綔緋葷粺鎺ュ彛銆?br> POSIX 琛ㄧず鍙Щ妞嶆搷浣滅郴緇熸帴鍙o紙Portable Operating System Interface 錛岀緝鍐欎負(fù) POSIX 鏄負(fù)浜嗚闊蟲洿鍍?UNIX錛夈傜數(shù)姘斿拰鐢?shù)瀛愬伐绋嬪笀鍗忎細(xì)锛圛nstitute of Electrical and Electronics Engineers錛孖EEE錛夋渶鍒濆紑鍙?POSIX 鏍囧噯錛屾槸涓轟簡鎻愰珮 UNIX 鐜涓嬪簲鐢ㄧ▼搴忕殑鍙Щ妞嶆с傜劧鑰岋紝POSIX 騫朵笉灞闄愪簬 UNIX銆傝澶氬叾瀹冪殑鎿嶄綔緋葷粺錛屼緥濡?DEC OpenVMS 鍜?Microsoft Windows NT錛岄兘鏀寔 POSIX 鏍囧噯錛屽挨鍏舵槸 IEEE Std. 1003.1-1990錛?995 騫翠慨璁級(jí)鎴?POSIX.1錛孭OSIX.1 鎻愪緵浜嗘簮浠g爜綰у埆鐨?C 璇█搴旂敤緙栫▼鎺ュ彛錛圓PI錛夌粰鎿嶄綔緋葷粺鐨勬湇鍔$▼搴忥紝渚嬪璇誨啓鏂囦歡銆侾OSIX.1 宸茬粡琚浗闄呮爣鍑嗗寲緇勭粐錛圛nternational Standards Organization錛孖SO錛夋墍鎺ュ彈錛岃鍛藉悕涓?ISO/IEC 9945-1:1990 鏍囧噯銆?
POSIX 鐜板湪宸茬粡鍙戝睍鎴愪負(fù)涓涓潪甯稿簽澶х殑鏍囧噯鏃忥紝鏌愪簺閮ㄥ垎姝e鍦ㄥ紑鍙戣繃紼嬩腑銆傝〃 1-1 緇欏嚭浜?POSIX 鏍囧噯鐨勫嚑涓噸瑕佺粍鎴愰儴鍒嗐侾OSIX 涓?IEEE 1003 鍜?2003 瀹舵棌鐨勬爣鍑嗘槸鍙簰鎹㈢殑銆傞櫎 1003.1 涔嬪錛?003 鍜?2003 瀹舵棌涔熷寘鎷湪琛ㄤ腑銆?
琛?錛氭爣鍑嗙殑閲嶈緇勬垚閮ㄥ垎
1003.0
綆$悊 POSIX 寮鏀懼紡緋葷粺鐜錛圤SE錛夈侷EEE 鍦?1995 騫撮氳繃浜嗚繖欏規(guī)爣鍑嗐?ISO 鐨勭増鏈槸 ISO/IEC 14252:1996銆?
1003.1
琚箍娉涙帴鍙椼佺敤浜庢簮浠g爜綰у埆鐨勫彲縐繪鎬ф爣鍑嗐?003.1 鎻愪緵涓涓搷浣滅郴緇熺殑 C 璇█搴旂敤緙栫▼鎺ュ彛錛圓PI錛夈侷EEE 鍜?ISO 宸茬粡鍦?1990 騫撮氳繃浜嗚繖涓爣鍑嗭紝IEEE 鍦?1995 騫撮噸鏂頒慨璁簡璇ユ爣鍑嗐?
1003.1b
涓涓敤浜庡疄鏃剁紪紼嬬殑鏍囧噯錛堜互鍓嶇殑 P1003.4 鎴?POSIX.4錛夈傝繖涓爣鍑嗗湪 1993 騫磋 IEEE 閫氳繃錛岃鍚堝茍榪?ISO/IEC 9945-1銆?
1003.1c
涓涓敤浜庣嚎紼嬶紙鍦ㄤ竴涓▼搴忎腑褰撳墠琚墽琛岀殑浠g爜孌碉級(jí)鐨勬爣鍑嗐備互鍓嶆槸 P1993.4 鎴?POSIX.4 鐨勪竴閮ㄥ垎錛岃繖涓爣鍑嗗凡緇忓湪 1995 騫磋 IEEE 閫氳繃錛屽綊鍏?ISO/IEC 9945-1:1996銆?
1003.1g
涓涓叧浜庡崗璁嫭绔嬫帴鍙g殑鏍囧噯錛岃鎺ュ彛鍙互浣夸竴涓簲鐢ㄧ▼搴忛氳繃緗戠粶涓庡彟涓涓簲鐢ㄧ▼搴忛氳銆?1996 騫達(dá)紝IEEE 閫氳繃浜嗚繖涓爣鍑嗐?
1003.2
涓涓簲鐢ㄤ簬 shell 鍜?宸ュ叿杞歡鐨勬爣鍑嗭紝瀹冧滑鍒嗗埆鏄搷浣滅郴緇熸墍蹇呴』鎻愪緵鐨勫懡浠ゅ鐞嗗櫒鍜屽伐鍏風(fēng)▼搴忋?1992 騫?IEEE 閫氳繃浜嗚繖涓爣鍑嗐侷SO 涔熷凡緇忛氳繃浜嗚繖涓爣鍑嗭紙ISO/IEC 9945-2:1993錛夈?
1003.2d
鏀硅繘鐨?1003.2 鏍囧噯銆?
1003.5
涓涓浉褰撲簬 1003.1 鐨?Ada 璇█鐨?API銆傚湪 1992 騫達(dá)紝IEEE 閫氳繃浜嗚繖涓爣鍑嗐傚茍鍦?1997 騫村鍏惰繘琛屼簡淇銆侷SO 涔熼氳繃浜嗚鏍囧噯銆?
1003.5b
涓涓浉褰撲簬 1003.1b錛堝疄鏃舵墿灞曪級(jí)鐨?Ada 璇█鐨?API銆侷EEE 鍜?ISO 閮藉凡緇忛氳繃浜嗚繖涓爣鍑嗐侷SO 鐨勬爣鍑嗘槸 ISO/IEC 14519:1999銆?
1003.5c
涓涓浉褰撲簬 1003.1q錛堝崗璁嫭绔嬫帴鍙o級(jí)鐨?Ada 璇█鐨?API銆傚湪 1998 騫達(dá)紝 IEEE 閫氳繃浜嗚繖涓爣鍑嗐侷SO 涔熼氳繃浜嗚繖涓爣鍑嗐?
1003.9
涓涓浉褰撲簬 1003.1 鐨?FORTRAN 璇█鐨?API銆傚湪 1992 騫達(dá)紝IEEE 閫氳繃浜嗚繖涓爣鍑嗭紝騫朵簬 1997 騫村鍏跺啀嬈$‘璁ゃ侷SO 涔熷凡緇忛氳繃浜嗚繖涓爣鍑嗐?
1003.10
涓涓簲鐢ㄤ簬瓚呯駭璁$畻搴旂敤鐜妗嗘灦錛圓pplication Environment Profile錛孉EP錛夌殑鏍囧噯銆傚湪 1995 騫達(dá)紝IEEE 閫氳繃浜嗚繖涓爣鍑嗐?
1003.13
涓涓叧浜庡簲鐢ㄧ幆澧冩鏋剁殑鏍囧噯錛屼富瑕侀拡瀵逛嬌鐢?POSIX 鎺ュ彛鐨勫疄鏃跺簲鐢ㄧ▼搴忋傚湪 1998 騫達(dá)紝IEEE 閫氳繃浜嗚繖涓爣鍑嗐?
1003.22
涓涓拡瀵?POSIX 鐨勫叧浜庡畨鍏ㄦф鏋剁殑鎸囧崡銆?
1003.23
涓涓拡瀵圭敤鎴風(fēng)粍緇囩殑鎸囧崡錛屼富瑕佹槸涓轟簡鎸囧鐢ㄦ埛寮鍙戝拰浣跨敤鏀寔鎿嶄綔闇姹傜殑寮鏀懼紡緋葷粺鐜錛圤SE錛夋鏋?
2003
閽堝鎸囧畾鍜屼嬌鐢ㄦ槸鍚︾鍚?POSIX 鏍囧噯鐨勬祴璇曟柟娉曪紝鏈夊叧鍏跺畾涔夈佷竴鑸渶姹傚拰鎸囧鏂歸拡鐨勪竴涓爣鍑嗐傚湪 1997 騫達(dá)紝IEEE 閫氳繃浜嗚繖涓爣鍑嗐?
2003.1
榪欎釜鏍囧噯瑙勫畾浜嗛拡瀵?1003.1 鐨?POSIX 嫻嬭瘯鏂規(guī)硶鐨勬彁渚涘晢瑕佹彁渚涚殑涓浜涙潯浠躲傚湪 1992 騫達(dá)紝IEEE 閫氳繃浜嗚繖涓爣鍑嗐?
2003.2
涓涓畾涔変簡琚敤鏉ユ鏌ヤ笌 IEEE 1003.2錛坰hell 鍜?宸ュ叿 API錛夋槸鍚︾鍚堢殑嫻嬭瘯鏂規(guī)硶鐨勬爣鍑嗐傚湪 1996 騫達(dá)紝IEEE 閫氳繃浜嗚繖涓爣鍑嗐?
闄や簡 1003 鍜?2003 瀹舵棌浠ュ錛岃繕鏈夊嚑涓叾瀹冪殑 IEEE 鏍囧噯錛屼緥濡?1224 鍜?1228錛屽畠浠篃鎻愪緵寮鍙戝彲縐繪搴旂敤紼嬪簭鐨?API銆傝鎯沖緱鍒板叧浜?IEEE 鏍囧噯鐨勬渶鏂頒俊鎭紝鍙互璁塊棶 IEEE 鏍囧噯鐨勪富欏碉紝緗戝潃鏄?http://standards.ieee.org/銆傛湁鍏?POSIX 鏍囧噯鐨勬榪頒俊鎭紝璇瘋闂?Web 绔欑偣 http://standards.ieee.org/reading/ieee/stad_public/description/posix/銆?/p>
Linux緋葷粺涓嬬殑澶氱嚎紼嬮伒寰狿OSIX綰跨▼鎺ュ彛錛岀О涓簆thread銆備粠涓婇潰鐨勬弿榪頒笉闅劇煡閬擄紝POSIX綰跨▼鎺ュ彛鏄疨OSIX浼楀鏍囧噯涓殑涓涓紙POSIX 1003.1-2001錛?/strong>銆?/p>
緙栧啓Linux涓嬬殑澶氱嚎紼嬬▼搴忥紝闇瑕佷嬌鐢ㄥご鏂囦歡pthread.h錛岃繛鎺ユ椂闇瑕佷嬌鐢ㄥ簱libpthread.a銆傞『渚胯涓涓嬶紝Linux涓媝thread鐨勫疄鐜版槸閫氳繃緋葷粺璋冪敤 clone() 鏉ュ疄鐜扮殑銆俢lone() 鏄疞inux鎵鐗規(guī)湁鐨勭郴緇熻皟鐢紝瀹冪殑浣跨敤鏂瑰紡綾諱技fork錛屽叧浜?clone() 鐨勮緇嗘儏鍐碉紝鏈夊叴瓚g殑璇昏呭彲浠ュ幓鏌ョ湅鏈夊叧鏂囨。璇存槑銆?/p>
涓嬮潰鏄竴涓?POSIX 綰跨▼鐨勭畝鍗曠ず渚嬬▼搴?thread1.c)錛? 瑕佺紪璇戣繖涓▼搴忥紝鍙渶鍏堝皢紼嬪簭瀛樹負(fù) thread1.c錛岀劧鍚庤緭鍏ワ細(xì) 榪愯鍒欒緭鍏ワ細(xì) Windows鏈韓娌℃湁鎻愪緵瀵筆OSIX鐨勬敮鎸併備絾鏈変竴涓彨 POSIX Threads for Win32 鐨勫紑婧愰」鐩粰鍑轟簡涓涓姛鑳芥瘮杈冨畬鍠勭殑Windows涓媝threads API鐨勫疄鐜般傜洰鍓嶇殑鏈鏂扮増鏈槸Pthreads-w32 release 2.8.0 (2006-12-22)銆?/p>
鎴戞病鏈夋祴璇曡繃榪欎釜鏈鏂扮増鏈紝榪欓噷鍙粰鍑?.7.0鐗堢殑閾炬帴錛?a title=ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe href="ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe">ftp://sources.redhat.com/pub/pthreads-win32/pthreads-w32-2-7-0-release.exe銆?/p>
鍏充簬璇ュ紑婧愰」鐩殑璇︾粏浠嬬粛瑙侊細(xì)http://sources.redhat.com/pthreads-win32/銆?/p>
涓婇潰鐨別xe鏂囦歡鏄竴涓嚜瑙e帇鏂囦歡錛岃В鍘嬪悗錛孭re-built.2鐩綍涓湁緙栬瘧鎵闇瑕佺殑澶存枃浠訛紙include瀛愮洰褰曪級(jí)鍜屽簱鏂囦歡錛坙ib瀛愮洰褰曪級(jí)銆?/p>
涓涓畝鍗曠殑嫻嬭瘯紼嬪簭(main.cpp)錛?/p>
浣跨敤 cl.exe 緙栬瘧錛堜笉鐔熸?zhèn)?cl.exe 鐨勮鍙傝冿細(xì)http://blog.csdn.net/liuyongjin1984/archive/2008/01/07/2029405.aspx 鎴栬呭弬瑙佷笅闈?.2閮ㄥ垎錛夛細(xì) 3.2 浣跨敤VC++ 6.0鎴朧isual Studio 2005鏉ヨ繍琛屼笂闈㈢殑紼嬪簭 鍏抽敭鏈変袱鐐癸細(xì) 1. 鏄皢澶存枃浠訛紙include瀛愮洰褰曪級(jí)鍜屽簱鏂囦歡錛坙ib瀛愮洰褰曪級(jí)涓殑鍐呭娣誨姞鍒癡C++ 6.0鎴朧isual Studio 2005寮鍙戠幆澧冨搴旂殑include鍜宭ib鐩綍涓嬨?/p>
鍏蜂綋鏉ヨ錛?strong>浠ユ坊鍔爄nclude鐩綍涓轟緥錛屾坊鍔爈ib鐩綍綾諱技
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
void *thread_function(void *arg) ...{
int i;
for ( i=0; i<20; i++) ...{
printf("Thread says hi! ");
sleep(1);
}
return NULL;
}
int main(void) ...{
pthread_t mythread;

if ( pthread_create( &mythread, NULL, thread_function, NULL) ) ...{
printf("error creating thread.");
abort();
}
if ( pthread_join ( mythread, NULL ) ) ...{
printf("error joining thread.");
abort();
}
exit(0);
}
3. Windows涓婸OSIX綰跨▼緙栫▼
3.1 綆鍗曚嬌鐢?/strong>
#include <stdio.h>
#include <pthread.h>
#include <assert.h>
void* Function_t(void* Param)
...{
printf("I am a thread! ");
pthread_t myid = pthread_self();
printf("thread ID=%d ", myid);
return NULL;
}
int main()
...{
pthread_t pid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&pid, &attr, Function_t, NULL);
printf("======================================== ");
getchar();
pthread_attr_destroy(&attr);
return 1;
}
銆?span style="COLOR: #000000">rem cl.bat
銆媍l.exe main.cpp /c /I"c:pthreads-w32-2-7-0-releasePre-built.2include"
銆媗ink.exe /out:main_cl.exe main.obj /LIBPATH:"c:pthreads-w32-2-7-0-releasePre-built.2lib" pthreadVC2.lib
鍥?錛歏C++ 6.0錛堟坊鍔爄nclude鐩綍錛氬伐鍏?-銆嬮夐」--銆嬬洰褰曪級(jí)
鍥?錛歏isual Studio 2005(娣誨姞include鐩綍錛歵ools--銆媜ptions)
2. 鎸囧畾link鏃惰榪炴帴鐨勫簱鐨勫悕縐幫紙pthreadVC2.lib錛?/strong>
鍥?錛歏C++ 6.0錛堝伐紼?-銆嬭緗?-銆嬭繛鎺ワ級(jí)

鍥?錛歏isual Studio 2005(project-->* property pages)
2. 鎺ヤ笅鏉ョ偣鍑?#8220;涓嬩竴姝?#8221;錛岀劧鍚庝粠涓緋誨垪鏈嶅姟鍣ㄥ垪琛ㄤ腑閫夋嫨涓涓綘璁や負(fù)緗戦熸渶蹇殑涓涓綔涓轟笅杞芥湇鍔″櫒銆傛帴鐫鐐瑰嚮“涓嬩竴姝?#8221;灝變細(xì)鍑虹幇濡備笅鍥炬墍紺虹殑鐣岄潰錛岀敤鏉ラ夋嫨浣犳兂瀹夎鐨勭▼搴忋?/p>
濡傛灉浣犱笉鍋氫換浣曚慨鏀癸紝灝嗛粯璁ゅ畨瑁匔ygwin榪愯鎵闇鐨勬渶灝戠殑紼嬪簭鍜岀粍浠躲備笉榪囷紝gcc緙栬瘧鍣ㄤ笉鍦ㄩ粯璁ゅ畨瑁呯▼搴忎箣鍒楋紝鎵浠ヤ綘蹇呴』閫夋嫨瀹夎gcc銆傚叿浣撴槸錛?鍦ㄤ笂榪扮獥鍙d腑鐨勫垪琛ㄤ腑灞曞紑Devel鐩綍錛屾壘鍒癵cc-g++涓欏癸紝鐐瑰嚮“Default”錛屽畠?yōu)鍙樻垚浜?#8220;Install”錛屽悓鏃剁敱浜庣▼搴忎箣闂寸殑渚濊禆鎬?gcc-core鏉$洰鐨?#8220;Default”錛屼篃鍙樻垚浜?#8220;Install”銆?/p>
姝ゅ錛屼負(fù)浜嗕嬌gcc鑳芥紜紪璇戞簮鏂囦歡錛岃繕蹇呴』瀹夎win32api搴擄紝鍚﹀垯浼?xì)缂栬瘧鍑洪敊銆傚洜姝わ紝浣犻渶瑕佸湪涓婅堪紿楀彛涓睍寮Libs鐩綍錛屾壘鍒皐in32api涓欏癸紝灝嗗畠鐐規(guī)垚“Install”銆?/p> 3. 鎺ヤ笅鏉ュ氨鏄愬績絳夊緟紼嬪簭鍘諱笅杞芥墍闇鐨勫畨瑁呮枃浠朵簡銆備竴鏃︿笅杞藉畬姣曪紝浣犲啀嬈¤繍琛宻etup.exe錛屽厛閫夋嫨浣犲皢瑕佹妸Cygwin瀹夎鍦ㄤ粈涔堝湴鏂癸紝鐒跺悗鍐嶉夋嫨浣?鍒氭墠鎵涓嬭澆鐨勯偅浜涘畨瑁呮枃浠舵墍鍦ㄧ殑紜洏浣嶇疆銆傛帴鐫浣犺繕闇瑕佸啀嬈¢夋嫨瀹夎gcc鍜寃in32api銆傝繖鏍鳳紝浣犲氨鍙互寮濮嬪畨瑁呬簡銆?
4. 瀹夎瀹屾垚鍚庯紝榪愯Cygwin銆傚湪紿楀彛涓暡鍏cc灝卞彲浠ョ洿鎺ョ敤gcc鏉ョ紪璇戜簡銆傜紪璇戦摼鎺ョ敓鎴愮殑鍙墽琛屾枃浠訛紝緋葷粺浼?xì)鑷姩鍔犱?exe鍚庣紑錛屽湪Cygwin 鐜涓彲浠ョ洿鎺ヨ繍琛屻備絾濡傛灉鑴辯Cygwin鐜錛岃屽湪MS DOS涓嬭繍琛岋紝鍒欎細(xì)鍑洪敊銆傝В鍐沖姙娉曞緢綆鍗曪紝閭e氨鏄皢cygwin1.dll鏂囦歡鎷瘋礉鍒癈:\WINDOWS鐩綍涓嬪嵆鍙?br>
鍦ㄨ繖閲屾垜鎯沖己璋冿紝濡傛灉鍥劇渷浜嬶紝瀹屽叏鍙互鐩存帴灝哸ll鍙寵竟鐨刣efault璁句負(fù)install銆備絾鏄繖灝嗚繖鏍蜂綘4涓狦鐨勭┖闂達(dá)紝鎵浠ュ鏋滀綘涓嶆槸鎷ユ湁鐗瑰埆澶х殑絀洪棿鐨勮瘽錛岃繕鏄緩璁夋嫨鎬х殑瀹夎錛岄渶瑕佷粈涔堝彲浠ラ殢鏃剁偣鍑誨厛鍓嶇殑setup.exe鍔犺鏂扮殑緇勪歡闄ゅ幓浠ヤ笂鎵璇寸殑緇勪歡澶栵紝鍦╠evel涓嬬殑GDB鍜宮ake鐩鎬俊涔熸槸澶у鏁板紑鍙戣呮墍蹇呴』鐨勩?br>鑷蟲宸插皢瑙e喅鐨勪簡鏂囩珷寮澶存彁鍙?qiáng)鐨勫墠涓墮骞瑕佷挥灱岃岀鍥涢」man鍒欐槸cygwin榛樿瀹夎鐨勶紝涓嶈繃涓嶆槸寰堝叏闈紝鎵浠ュ彲浠ラ氳繃The Linux Documentation Project 錛堝緢濂藉緢寮哄ぇ鐨勬枃妗g綉绔欙級(jí)鏉ヨВ鍐籌紝涓嶈繃璨屼技榪欎釜緗戠珯澶ч檰鎵撲笉寮錛屽弽姝f垜鏄病鎵撳紑錛岃繕濂芥湁棣欐腐鍚岃優(yōu)寤虹珛鐨刴irror錛屾瘮杈冨ソ鐢ㄧ殑鏄?a href="ftp://ftp.hkmirror.org/pub/ldp/manpages/">ftp://ftp.hkmirror.org/pub/ldp/manpages/錛屽湪鍏朵腑鎵懼埌閫傚悎浣犵殑man鐗堟湰錛屼笅杞斤紝瑙e帇鍒?(cygwin)鐩綍涓嬬殑/usr/share/man/涓嬮潰錛岀紪杈?usr/share/misc/man.conf錛屾枃浠舵湯灝懼姞涓奙ANPATH /usr/share/man/man-pages-*.**鍗沖彲銆?br>
濂藉暒錛屽涓嬮厤緗悗錛屽惎鍔╟ygwin錛屾潵緙栦竴涓皬紼嬪簭helloworld鐑儹韜?br>闅忎究閫変竴涓洰褰曞緩绔媓elloworld.cc鏂囦歡錛岃浜嬫湰鎵撳紑錛屽啓鍏ヤ互涓嬩唬鐮侊細(xì)
#include "stdio.h"
int
main(int args,char* argv[])
{
printf("helloworld");
return 0;
}
淇濆瓨錛屽惎鍔╟ygwin cd鍒癶elloworld.cc鏂囦歡鐩綍錛屾墽琛?br>
$ gcc -o helloworld helloworld.cc
$ ./helloworld
helloworld1 鐢╱buntu鑷甫鐨勬柊绔嬪緱杞歡鍖呭畨瑁卆rk杞歡錛屾悳绱rk錛岀劧鍚庨変腑灝辮浜嗭紝浼?xì)鑷姩瀹夎闄勫甫鐨?0澶氫釜搴撴枃浠躲?/p>
2 瀹夎瀹宎rk錛屼細(xì)鍦ㄨ彍鍗曠殑闄勪歡涓壘鍒幫紝浣犱細(xì)鍙戠幇ark鍏跺疄宸茬粡璁捐鎴愪負(fù)鏀寔rar錛屽洜涓哄湪鏂板緩鎵撳紑絳夋搷浣滀腑閮藉彲浠ラ夋嫨rar鏍煎紡錛屼笉榪囧彧鏄啓浜嗗嚭鏉ワ紝涓嶆槸鐪熸鐨勬敮鎸併傛帴涓嬫潵涓昏瑕佺櫥鍦轟簡銆?/p>
3 鍒拌繖閲?a >RARLAB錛屼綘鍙互涓嬭澆rar for linux鐨勬枃浠訛紝褰撶劧涓嶆槸鐢╮ar鏍煎紡鍘嬬緝鐨勶紝鐢ㄩ粯璁ゆ墦寮鐨勫綊妗g鐞嗗櫒瑙e帇緙╋紝灝嗗叾涓殑鏂囦歡鎵句竴涓礬寰勫瓨鏀俱?/p>
4 灝嗗垰鎵嶈В鍘嬬緝鐨剅ar for linux鐨勬枃浠朵腑鐨勫洓涓彲鎵ц鏂囦歡錛歞efault.sfx錛宺ar錛宺ar_static錛?unrar錛屽鍒跺埌 /usr/local/bin 鐩綍涓嬨備綘鍙兘闇瑕佺鐞嗗憳甯愬彿銆傚鏋滃湪緇堢涓嬫搷浣滐紝鍙互綆鍗曠殑sudo mv涓涓嬨?/p>
.tar
瑙e寘錛歵ar xvf FileName.tar
鎵撳寘錛歵ar cvf FileName.tar DirName
錛堟敞錛歵ar鏄墦鍖咃紝涓嶆槸鍘嬬緝錛侊級(jí)
---------------------------------------------
.gz
瑙e帇1錛歡unzip FileName.gz
瑙e帇2錛歡zip -d FileName.gz
鍘嬬緝錛歡zip FileName
.tar.gz 鍜?.tgz
瑙e帇錛歵ar zxvf FileName.tar.gz
鍘嬬緝錛歵ar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
瑙e帇1錛歜zip2 -d FileName.bz2
瑙e帇2錛歜unzip2 FileName.bz2
鍘嬬緝錛?bzip2 -z FileName
.tar.bz2
瑙e帇錛歵ar jxvf FileName.tar.bz2
鍘嬬緝錛歵ar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
瑙e帇1錛歜zip2 -d FileName.bz
瑙e帇2錛歜unzip2 FileName.bz
鍘嬬緝錛?font color="#ffa500">鏈煡
.tar.bz
瑙e帇錛歵ar jxvf FileName.tar.bz
鍘嬬緝錛?font color="#ffa500">鏈煡
---------------------------------------------
.Z
瑙e帇錛歶ncompress FileName.Z
鍘嬬緝錛歝ompress FileName
.tar.Z
瑙e帇錛歵ar Zxvf FileName.tar.Z
鍘嬬緝錛歵ar Zcvf FileName.tar.Z DirName
---------------------------------------------
.zip
瑙e帇錛歶nzip FileName.zip
鍘嬬緝錛歾ip FileName.zip DirName
---------------------------------------------
.rar
瑙e帇錛歳ar x FileName.rar
鍘嬬緝錛歳ar a FileName.rar DirName
rar璇峰埌錛?a style="color: #003793;" target="_blank">http://www.rarsoft.com/download.htm 涓嬭澆錛?br>
瑙e帇鍚庤灝唕ar_static鎷瘋礉鍒?usr/bin鐩綍錛堝叾浠栫敱$PATH鐜鍙橀噺鎸囧畾鐨勭洰褰曚篃鍙互錛夛細(xì)
[root@www2 tmp]# cp rar_static /usr/bin/rar
---------------------------------------------
.lha
瑙e帇錛歭ha -e FileName.lha
鍘嬬緝錛歭ha -a FileName.lha FileName
lha璇峰埌錛?a style="color: #003793;" target="_blank">http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/涓嬭澆錛?br>
>瑙e帇鍚庤灝唋ha鎷瘋礉鍒?usr/bin鐩綍錛堝叾浠栫敱$PATH鐜鍙橀噺鎸囧畾鐨勭洰褰曚篃鍙互錛夛細(xì)
[root@www2 tmp]# cp lha /usr/bin/
---------------------------------------------
.rpm
瑙e寘錛歳pm2cpio FileName.rpm | cpio -div
---------------------------------------------
.deb
瑙e寘錛歛r p FileName.deb data.tar.gz | tar zxf -
---------------------------------------------
.tar .tgz .tar.gz .tar.Z
.tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh
.lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
瑙e帇錛歴Ex x FileName.*
鍘嬬緝錛歴Ex a FileName.* FileName
sEx鍙槸璋冪敤鐩稿叧紼嬪簭錛屾湰韜茍鏃犲帇緙┿佽В鍘嬪姛鑳斤紝璇鋒敞鎰忥紒
sEx璇峰埌錛?http://sourceforge.net/projects/sex涓嬭澆錛?br>
瑙e帇鍚庤灝唖Ex鎷瘋礉鍒?usr/bin鐩綍錛堝叾浠栫敱$PATH鐜鍙橀噺鎸囧畾鐨勭洰褰曚篃鍙互錛夛細(xì)
[root@www2 tmp]# cp sEx /usr/bin/