锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
瀹炴ā寮忥細
錛堝嵆瀹炲湴鍧璁塊棶妯″紡錛夊畠鏄?/span>
Intel鍏徃80286鍙婁互鍚庣殑x86(80386,80486鍜?/span>80586絳?/span>)鍏煎澶勭悊鍣紙CPU錛夌殑涓縐嶆搷浣滄ā寮忋傚疄妯″紡琚壒孌婂畾涔変負20浣嶅湴鍧鍐呭瓨鍙闂┖闂翠笂錛岃繖灝辨剰鍛崇潃瀹冪殑瀹歸噺鏄?/span>2鐨?/span>20嬈″箓錛?/span>1M錛夌殑鍙闂唴瀛樼┖闂達紙鐗╃悊鍐呭瓨鍜?/span>BIOS-ROM錛夛紝杞歡鍙氳繃榪欎簺鍦板潃鐩存帴璁塊棶BIOS紼嬪簭鍜屽鍥寸‖浠躲傚疄妯″紡涓嬪鐞嗗櫒娌℃湁紜歡綰х殑鍐呭瓨淇濇姢姒傚康鍜屽閬撲換鍔$殑宸ヤ綔妯″紡銆備絾鏄負浜嗗悜涓嬪吋瀹癸紝鎵浠?/span>80286鍙婁互鍚庣殑x86緋誨垪鍏煎澶勭悊鍣ㄤ粛鐒舵槸寮鏈哄惎鍔ㄦ椂宸ヤ綔鍦ㄥ疄妯″紡涓嬨?/span>80186鍜屾棭鏈熺殑澶勭悊鍣ㄤ粎鏈変竴縐嶆搷浣滄ā寮忥紝灝辨槸鍚庢潵鎴戜滑鎵瀹氫箟鐨勫疄妯″紡銆傚疄妯″紡铏界劧鑳借闂埌1M鐨勫湴鍧絀洪棿錛屼絾鏄敱浜?/span>BIOS鐨勬槧灝勪綔鐢紙鍗?/span>BIOS鍗犵敤浜嗛儴鍒嗙┖闂村湴鍧璧勬簮錛夛紝鎵浠ョ湡姝h兘浣跨敤鐨勭墿鐞嗗唴瀛樼┖闂達紙鍐呭瓨鏉★級錛屼篃灝辨槸鍦?/span>640k鍒?/span>924k涔嬮棿銆?/span>1M
鍦板潃絀洪棿緇勬垚鏄敱
16浣嶇殑孌靛湴鍧鍜?/span>16浣嶇殑孌靛唴鍋忕Щ鍦板潃緇勬垚鐨勩傜敤鍏紡琛ㄧず涓猴細鐗╃悊鍦板潃=宸︾Щ4浣嶇殑孌靛湴鍧+鍋忕Щ鍦板潃銆?/span>
聽
286澶勭悊鍣ㄤ綋緋葷粨鏋勫紩鍏ヤ簡鍦板潃淇濇姢妯″紡鐨勬蹇碉紝澶勭悊鍣ㄨ兘澶熷鍐呭瓨鍙婁竴浜涘叾浠栧鍥磋澶囧仛紜歡綰х殑淇濇姢璁劇疆錛堜繚鎶よ緗疄璐ㄤ笂灝辨槸灞忚斀涓浜涘湴鍧鐨勮闂級銆備嬌鐢ㄨ繖浜涙柊鐨勭壒鎬э紝鐒惰屽繀涓嶅彲灝戜竴浜涢澶栫殑鍦?/span>80186鍙婁互鍓嶅鐞嗗櫒娌℃湁鐨勬搷浣滆紼嬨傝嚜浠庢渶鍒濈殑x86寰鐞嗗櫒瑙勬牸浠ュ悗錛屽畠瀵圭▼搴忓紑鍙戝畬鍏ㄥ悜涓嬪吋瀹癸紝80286鑺墖琚埗浣滄垚鍚姩鏃剁戶鎵夸簡浠ュ墠鐗堟湰鑺墖鐨勭壒鎬э紝宸ヤ綔鍦ㄥ疄妯″紡涓嬶紝鍦ㄨ繖縐嶆ā寮忎笅瀹為檯涓婃槸鍏抽棴浜嗘柊鐨勪繚鎶ゅ姛鑳界壒鎬э紝鍥犳鑳戒嬌浠ュ線鐨勮蔣浠剁戶緇伐浣滃湪鏂扮殑鑺墖涓嬨傜洿鍒頒粖澶╋紝鐢氳嚦鏈鏂扮殑x86澶勭悊鍣ㄩ兘鏄湪璁$畻鏈哄姞鐢靛惎鍔ㄦ椂閮芥槸宸ヤ綔鍦ㄥ疄妯″紡涓嬶紝瀹冭兘榪愯涓轟互鍓嶅鐞嗗櫒鑺墖鍐欑殑紼嬪簭.
聽
DOS鎿嶄綔緋葷粺錛堜緥濡?/font>
MS-DOS,DR-DOS錛夊伐浣滃湪瀹炴ā寮忎笅錛屽井杞?/span>Windows鏃╂湡鐨勭増鏈紙瀹冩湰璐ㄤ笂鏄繍琛屽湪DOS涓婄殑鍥懼艦鐢ㄦ埛鐣岄潰搴旂敤紼嬪簭錛屽疄闄呬笂鏈韓騫朵笉鏄竴涓搷浣滅郴緇燂級涔熸槸榪愯鍦ㄥ疄妯″紡涓嬶紝鐩村埌Windows3.0錛屽畠榪愯鏈熼棿鏃㈡湁瀹炴ā寮忓張鏈変繚鎶ゆā寮忥紝鎵浠ヨ瀹冩槸涓縐嶆販鍚堟ā寮忓伐浣溿傚畠鐨勪繚鎶ゆā寮忚繍琛屾湁涓ょ涓嶅悓鎰忎箟(鍥犱負80286騫舵病鏈夊畬鍏ㄥ湴瀹炵幇80386鍙婁互鍚庣殑淇濇姢妯″紡鍔熻兘)錛?/span>
聽
1銆夆滄爣鍑嗕繚鎶ゆā寮忊濓細榪欏氨鏄▼搴忚繍琛屽湪淇濇姢妯″紡涓嬶紱
2銆夆滆櫄鎷熶繚鎶ゆā寮忥紙瀹炶川涓婅繕鏄疄妯″紡錛屾槸瀹炴ā寮忎笂妯℃嫙鐨勪繚鎶ゆā寮忥級鈥濓細瀹冧篃浣跨敤32浣嶅湴鍧瀵誨潃鏂瑰紡銆?/span>Windows3.1褰誨簳鍒犻櫎浜嗗瀹炴ā寮忕殑鏀寔銆傚湪80286澶勭悊鍣ㄨ姱鐗囦互鍚庯紝Windows3.1鎴愪負涓繪祦鎿嶄綔緋葷粺錛?/span>Windows/80286涓嶆槸涓繪祦浜у搧錛夈傜洰鍓嶅樊涓嶅鎵鏈夌殑X86緋誨垪澶勭悊鍣ㄦ搷浣滅郴緇燂紙Linux錛?/span>Windows95 and later錛?/span>OS/2絳夛級閮芥槸鍦ㄥ惎鍔ㄦ椂榪涜澶勭悊鍣ㄨ緗岃繘鍏ヤ繚鎶ゆā寮忕殑銆?/span>
聽
瀹炴ā寮忓伐浣滄満鐞嗭細
1> 瀵逛簬8086/8088鏉ヨ璁$畻瀹為檯鍦板潃鏄敤緇濆鍦板潃瀵?/span>1M姹傛ā銆?/span>8086鐨勫湴鍧綰跨殑鐗╃悊緇撴瀯錛?/span>20鏍癸紝涔熷氨鏄畠鍙互鐗╃悊瀵誨潃鐨勫唴瀛樿寖鍥翠負2^20涓瓧鑺傦紝鍗?/span>1 M絀洪棿錛屼絾鐢變簬8086/8088鎵浣跨敤鐨勫瘎瀛樺櫒閮芥槸16浣嶏紝鑳藉琛ㄧず鐨勫湴鍧鑼冨洿鍙湁0-64K錛岃繖鍜?/span>1M鍦板潃絀洪棿鏉ユ瘮杈冧篃澶皬浜嗭紝鎵浠ヤ負浜嗗湪8086/8088涓嬭兘澶熻闂?/span>1M鍐呭瓨錛?/span>Intel閲囧彇浜嗗垎孌靛鍧鐨勬ā寮忥細16浣嶆鍩哄湴鍧:16浣嶅亸縐?/span>EA銆傚叾緇濆鍦板潃璁$畻鏂規硶涓猴細16浣嶅熀鍦板潃宸︾Щ4浣?/span>+16浣嶅亸縐?/span>=20浣嶅湴鍧銆?/span>聽
姣斿錛?/span>DS=1000H EA=FFFFH 閭d箞緇濆鍦板潃灝變負錛?/span>10000H +
聽
聽
2> 瀵逛簬80286鎴栦互涓婄殑CPU閫氳繃A20 GATE鏉ユ帶鍒?/span>A20鍦板潃綰?/span>
銆?/span>
鎶鏈彂灞曞埌浜?/span>
80286錛岃櫧鐒剁郴緇熺殑鍦板潃鎬葷嚎鐢卞師鏉ョ殑20鏍瑰彂灞曚負24鏍癸紝榪欐牱鑳藉璁塊棶鐨勫唴瀛樺彲浠ヨ揪鍒?/span>2^24=16M,浣嗘槸Intel鍦ㄨ璁?/span>80286鏃舵彁鍑虹殑鐩爣鏄悜涓嬪吋瀹?/span>,鎵浠ュ湪瀹炴ā寮忎笅錛岀郴緇熸墍琛ㄧ幇鐨勮涓哄簲璇ュ拰8086/8088鎵琛ㄧ幇鐨勫畬鍏ㄤ竴鏍鳳紝涔熷氨鏄錛屽湪瀹炴ā寮忎笅錛?/span>80386浠ュ強鍚庣畫緋誨垪搴旇鍜?/span>8086/8088瀹屽叏鍏煎浠嶇劧浣跨敤A20鍦板潃綰褲傛墍浠ヨ80286鑺墖瀛樺湪涓涓?/span>BUG錛氬畠寮璁?/span>A20鍦板潃綰褲傚鏋滅▼搴忓憳璁塊棶100000H-10FFEFH涔嬮棿鐨勫唴瀛橈紝緋葷粺灝嗗疄闄呰闂繖鍧楀唴瀛橈紙娌℃湁wrap-around鎶鏈級錛岃屼笉鏄薄8086/8088涓鏍蜂粠0寮濮嬨傛垜浠潵鐪嬩竴鍓浘錛?/span>
涓轟簡瑙e喅涓婅堪鍏煎鎬ч棶棰橈紝IBM浣跨敤閿洏鎺у埗鍣ㄤ笂鍓╀綑鐨勪竴浜涜緭鍑虹嚎鏉ョ鐞嗙21鏍瑰湴鍧綰匡紙浠?/span>0寮濮嬫暟鏄20鏍癸級聽鐨勬湁鏁堟э紝琚О涓?/span>A20 Gate錛?/span>
1> 濡傛灉A20 Gate琚墦寮錛屽垯褰撶▼搴忓憳緇欏嚭100000H-10FFEFH涔嬮棿鐨勫湴鍧鐨勬椂鍊欙紝緋葷粺灝嗙湡姝h闂繖鍧楀唴瀛樺尯鍩燂紱
2 濡傛灉A20 Gate琚姝紝鍒欏綋紼嬪簭鍛樼粰鍑?/span>100000H-10FFEFH涔嬮棿鐨勫湴鍧鐨勬椂鍊欙紝緋葷粺浠嶇劧浣跨敤8086/8088鐨勬柟寮忓嵆鍙栨ā鏂瑰紡錛?/span>8086浠跨湡錛夈傜粷澶у鏁?/span>IBM PC鍏煎鏈洪粯璁ょ殑A20 Gate鏄紱佹鐨勩傜幇鍦ㄨ澶氭柊鍨?/span>PC涓婂瓨鍦ㄧ洿鎺ラ氳繃BIOS鍔熻兘璋冪敤鏉ユ帶鍒?/span>A20 Gate鐨勫姛鑳姐?/span>
涓婇潰鎵榪扮殑鍐呭瓨璁塊棶妯″紡閮芥槸瀹炴ā寮忥紝鍦?/span>80286浠ュ強鏇撮珮緋誨垪鐨?/span>PC涓紝鍗充嬌A20 Gate琚墦寮錛屽湪瀹炴ā寮忎笅鎵鑳藉璁塊棶鐨勫唴瀛樻渶澶т篃鍙兘涓?/span>10FFEFH錛屽敖綆″畠浠殑鍦板潃鎬葷嚎鎵鑳藉璁塊棶鐨勮兘鍔涢兘澶уぇ瓚呰繃榪欎釜闄愬埗銆備負浜嗚兘澶熻闂?/span>10FFEFH浠ヤ笂鐨勫唴瀛橈紝鍒欏繀欏昏繘鍏ヤ繚鎶ゆā寮忋?/span>
淇濇姢妯″紡錛?/strong>
緇忓父緙╁啓涓?/span>
p-mode,鍦?/font>
Intel iAPX 286紼嬪簭鍛樺弬鑰冩墜鍐屼腑錛?/span>iAPX
聽
80286鍙婁互鍚庣殑澶勭悊鍣ㄥ彟涓縐嶅伐浣滄ā寮忔槸瀹炴ā寮忥紙浠呭綋緋葷粺鍚姩鐨勪竴鐬棿錛夛紝鏈潃鍚戜笅鍏煎鐨勫師鍒欏睆钄戒繚鎶ゆā寮忕壒鎬э紝浠庤屽璁歌佺殑杞歡鑳藉榪愯鍦ㄦ柊鐨勮姱鐗囦笂銆備綔涓轟竴涓璁¤鑼冿紝鎵鏈夌殑x86緋誨垪澶勭悊鍣紝闄ゅ祵鍏ュ紡Intel80387涔嬪錛岄兘鏄郴緇熷惎鍔ㄥ伐浣滃湪瀹炴ā寮忎笅錛岀‘淇濋仐鐣欎笅鐨勬搷浣滅郴緇熷悜涓嬪吋瀹廣傚畠浠兘蹇呴』琚惎鍔ㄧ▼搴忥紙鎿嶄綔緋葷粺紼嬪簭鏈鍒濊繍琛屼唬鐮侊級閲嶆柊璁劇疆鑰岀浉搴旇繘鍏ヤ繚鎶ゆā寮忕殑錛屽湪榪欎箣鍓嶄換浣曠殑淇濇姢妯″紡鐗規ч兘鏄棤鏁堢殑銆傚湪鐜頒唬璁$畻鏈轟腑錛岃繖縐嶅尮閰嶈繘鍏ヤ繚鎶ゆā寮忔槸鎿嶄綔緋葷粺鍚姩鏃舵渶鍓嶆部鐨勫姩浣滀箣涓銆?/span>
聽
鍦ㄨ璋冨仠鐨勫閬撲換鍔$▼搴忎腑錛屽畠鍙互浠庢柊宸ヤ綔鍦ㄥ疄妯″紡涓嬫槸鐩稿綋鍙兘鐨勩備繚鎶ゆā寮忕殑鐗規ф槸闃繪琚叾浠栦換鍔℃垨緋葷粺鍐呮牳鐮村潖宸茬粡涓嶅仴鍏ㄧ殑紼嬪簭鐨勮繍琛岋紝淇濇姢妯″紡涔熸湁瀵圭‖浠剁殑鏀寔錛屼緥濡備腑鏂繍琛岀▼搴忥紝縐誨姩榪愯榪涚▼鏂囨。鍒板彟涓涓繘紼嬪拰緗┖澶氫換鍔$殑淇濇姢鍔熻兘銆?/span>
聽
386鍙婁互鍚庣郴鍒楀鐞嗗櫒涓嶄粎鍏鋒湁淇濇姢妯″紡鍙堝叿鏈?/span>32浣嶅瘎瀛樺櫒錛岀粨鏋滃鑷翠簡澶勭悊鍔熻兘鐨勬販涔憋紝鍥犱負80286铏界劧鏀寔淇濇姢妯″紡錛屼絾鏄畠鐨勫瘎瀛樺櫒閮芥槸16浣嶇殑錛屽畠鏄氳繃鑷韓紼嬪簭璁懼畾鑰屾ā鎷熷嚭鐨?/span>32浣嶏紝騫墮潪32浣嶅瘎瀛樺櫒澶勭悊銆傚綊鍜庝簬榪欑娣蜂貢鐜拌薄錛屽畠淇冧嬌Windows/386
鍙婁互鍚庣殑鐗堟湰褰誨簳鎶涘純80286鐨勮櫄鎷熶繚鎶ゆā寮忥紝浠ュ悗淇濇姢妯″紡鐨勬搷浣滅郴緇熼兘鏄繍琛屽湪80386浠ヤ笂錛屼笉鍐嶈繍琛屽湪80286錛堝敖綆?/span>80286妯″紡鏀寔淇濇姢妯″紡錛夛紝鎵浠ヨ80286鏄竴涓繃娓¤姱鐗囷紝瀹冩槸涓涓繃娓′駭鍝併?/span>
聽
灝界
286鍜?/span>386澶勭悊鍣ㄨ兘澶熷疄鐜頒繚鎶ゆā寮忓拰鍏煎浠ュ墠鐨勭増鏈紝浣嗘槸鍐呭瓨鐨?/span>1M浠ヤ笂絀洪棿榪樻槸涓嶆槗瀛樺彇錛岀敱浜庡唴瀛樺湴鍧鐨勫洖緇曪紝IBM PC XT 錛堢幇浠ュ簾寮冿級璁捐涓縐嶆ā鎷熺郴緇燂紝瀹冭兘榪囨楠楁墜孌佃闂埌1M浠ヤ笂鐨勫湴鍧絀洪棿錛屽氨鏄紑閫氫簡A20鍦板潃綰褲傚湪淇濇姢妯″紡閲岋紝鍓?/span>32涓腑鏂負澶勭悊鍣ㄥ紓甯擱鐣欙紝渚嬪錛屼腑鏂?/span>0D錛堝崄榪涘埗13錛夊父瑙勪繚鎶ゆ晠闅滃拰涓柇00鏄櫎鏁頒負闆跺紓甯搞?/span>
聽
濡傛灉瑕佽闂洿澶氱殑鍐呭瓨錛屽垯蹇呴』榪涘叆淇濇姢妯″紡錛岄偅涔堬紝鍦ㄤ繚鎶ゆā寮忎笅錛?/font>
A20
涓轟簡鎼炴竻妤氳繖涓鐐癸紝鎴戜滑鍏堟潵鐪嬩竴鐪?/span>A20鐨勫伐浣滃師鐞嗐?/span>A20錛屼粠瀹冪殑鍚嶅瓧灝卞彲浠ョ湅鍑烘潵錛屽叾瀹炲畠灝辨槸瀵逛簬A20錛堜粠0寮濮嬫暟錛夌殑鐗規畩澶勭悊(涔熷氨鏄絎?/span>21鏍瑰湴鍧綰跨殑澶勭悊)銆傚鏋?/span>A20 Gate琚姝紝瀵逛簬80286鏉ヨ錛屽叾鍦板潃涓?/span>24鏍瑰湴鍧綰匡紝鍏跺湴鍧琛ㄧず涓?/span>EFFFFF錛涘浜?/span>80386鏋佸叾闅忓悗鐨?/span>32鏍瑰湴鍧綰胯姱鐗囨潵璇達紝鍏跺湴鍧琛ㄧず涓?/span>FFEFFFFF銆傝繖縐嶈〃紺虹殑鎰忔濇槸錛?/span>
1>
濡傛灉A20
2濡傛灉A20 Gate琚墦寮銆傚垯鍏剁20-bit鏄湁鏁堢殑錛屽叾鍊兼棦鍙互鏄?/span>0錛屽張鍙互鏄?/span>1銆傞偅涔堝氨鍙互浣?/span>A20綰夸紶閫掑疄闄呯殑鍦板潃淇″彿銆傚鏋?/span>A20 Gate琚墦寮錛屽垯鍙互璁塊棶鐨勫唴瀛樺垯鏄繛緇殑銆?/span>
瀹炴ā寮忓拰淇濇姢妯″紡鐨勫尯鍒細
浠庤〃闈笂鐪嬶紝淇濇姢妯″紡鍜屽疄妯″紡騫舵病鏈夊お澶х殑鍖哄埆錛屼簩鑰呴兘浣跨敤浜嗗唴瀛樻銆佷腑鏂拰璁懼椹卞姩鏉ュ鐞嗙‖浠訛紝浣嗕簩鑰呮湁寰堝涓嶅悓涔嬪銆傛垜浠煡閬擄紝鍦ㄥ疄妯″紡涓唴瀛樿鍒掑垎鎴愭錛屾瘡涓鐨勫ぇ灝忎負
64KB
錛岃岃繖鏍風殑孌靛湴鍧鍙互鐢?/span>
16
浣嶆潵琛ㄧず銆傚唴瀛樻鐨勫鐞嗘槸閫氳繃鍜屾瀵勫瓨鍣ㄧ浉鍏寵仈鐨勫唴閮ㄦ満鍒舵潵澶勭悊鐨勶紝榪欎簺孌靛瘎瀛樺櫒錛?/span>
CS
銆?/span>
DS
銆?/span>
SS
鍜?/span>
ES
錛夌殑鍐呭褰㈡垚浜嗙墿鐞嗗湴鍧鐨勪竴閮ㄥ垎銆傚叿浣撴潵璇達紝鏈緇堢殑鐗╃悊鍦板潃鏄敱
16
浣嶇殑孌靛湴鍧鍜?/span>
16
浣嶇殑孌靛唴鍋忕Щ鍦板潃緇勬垚鐨勩傜敤鍏紡琛ㄧず涓猴細鐗╃悊鍦板潃
=
宸︾Щ
4
浣嶇殑孌靛湴鍧
+
鍋忕Щ鍦板潃銆?/span>
鍦ㄤ繚鎶ゆā寮忎笅錛屾鏄氳繃涓緋誨垪琚О涔嬩負
鈥?/span>
鎻忚堪絎﹁〃
鈥?/span>
鐨勮〃鎵瀹氫箟鐨勩傛瀵勫瓨鍣ㄥ瓨鍌ㄧ殑鏄寚鍚戣繖浜涜〃鐨勬寚閽堛傜敤浜庡畾涔夊唴瀛樻鐨勮〃鏈変袱縐嶏細鍏ㄥ眬鎻忚堪絎﹁〃
(GDT)
鍜屽眬閮ㄦ弿榪扮琛?/span>
(LDT)
銆?/span>
GDT
鏄竴涓鎻忚堪絎︽暟緇勶紝鍏朵腑鍖呭惈鎵鏈夊簲鐢ㄧ▼搴忛兘鍙互浣跨敤鐨勫熀鏈弿榪扮銆傚湪瀹炴ā寮忎腑錛屾闀挎槸鍥哄畾鐨?/span>
(
涓?/span>
64KB)
錛岃屽湪淇濇姢妯″紡涓紝孌甸暱鏄彲鍙樼殑錛屽叾鏈澶у彲杈?/span>
4GB
銆?/span>
LDT
涔熸槸孌墊弿榪扮鐨勪竴涓暟緇勩備笌
GDT
涓嶅悓錛?/span>
LDT
鏄竴涓錛屽叾涓瓨鏀劇殑鏄眬閮ㄧ殑銆佷笉闇瑕佸叏灞鍏變韓鐨勬鎻忚堪絎︺傛瘡涓涓搷浣滅郴緇熼兘蹇呴』瀹氫箟涓涓?/span>
GDT
錛岃屾瘡涓涓鍦ㄨ繍琛岀殑浠誨姟閮戒細鏈変竴涓浉搴旂殑
LDT
銆傛瘡涓涓弿榪扮鐨勯暱搴︽槸
8
涓瓧鑺傦紝鏍煎紡濡傚浘
3
鎵紺恒傚綋孌靛瘎瀛樺櫒琚姞杞界殑鏃跺欙紝孌靛熀鍦板潃灝變細浠庣浉搴旂殑琛ㄥ叆鍙h幏寰椼傛弿榪扮鐨勫唴瀹逛細琚瓨鍌ㄥ湪涓涓▼搴忓憳涓嶅彲瑙佺殑褰卞儚瀵勫瓨鍣?/span>
(shadow register)
涔嬩腑錛屼互渚夸笅涓嬈″悓涓涓鍙互浣跨敤璇ヤ俊鎭屼笉鐢ㄦ瘡嬈¢兘鍒拌〃涓彁鍙栥傜墿鐞嗗湴鍧鐢?/span>
16
浣嶆垨鑰?/span>
32
浣嶇殑鍋忕Щ鍔犱笂褰卞儚瀵勫瓨鍣ㄤ腑鐨勫熀鍧緇勬垚銆傚疄妯″紡鍜屼繚鎶ゆā寮忕殑涓嶅悓鍙互浠庝笅鍥懼緢娓呮鍦扮湅鍑烘潵銆?/span>
瀹炴ā寮忎笅瀵誨潃鏂瑰紡
聽
淇濇姢妯″紡涓嬪鍧鏂瑰紡
Boot Sector
緇撴瀯銆佺郴緇熷惎鍔ㄨ繃紼嬬畝浠?/b>
浜? 緋葷粺鍚姩榪囩▼綆浠?
錛堟敞4錛氬湪鍒嗗尯琛ㄧ殑鍥涗釜璁板綍涓紝涓鑸潵璇存湁涓斿彧鏈変竴涓褰曠殑鏍囪鏄椿鍔ㄧ殑錛孧BR錛堜富瑕佽礋璐d粠媧誨姩鍒嗗尯涓杞藉茍榪愯緋葷粺寮曞紼嬪簭錛変細鍘繪壘鍒拌繖涓垎鍖鴻褰曪紝鏍規嵁璁板綍鐨勮搗濮嬫墖鍖哄姞杞借鍒嗗尯鐨勯昏緫 0 鎵囧尯錛堣搗濮嬫墖鍖猴級鐨勫唴瀹瑰埌 0x
]]>
0FFFFH = 1FFFFH 鍦板潃鍗曞厓
銆傞氳繃榪欑鏂規硶鏉ュ疄鐜頒嬌鐢?/span>16浣嶅瘎瀛樺櫒璁塊棶1M鐨勫湴鍧絀洪棿錛岃繖縐嶆妧鏈槸澶勭悊鍣ㄥ唴閮ㄥ疄鐜扮殑錛岄氳繃涓婅堪鍒嗘鎶鏈ā寮忥紝鑳藉琛ㄧず鐨勬渶澶у唴瀛樹負錛?/span>
FFFFh: FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes錛?/span>1M澶氫綑鍑烘潵鐨勯儴鍒嗚縐板仛楂樼鍐呭瓨鍖?/span>HMA錛?span style="color: black;">銆備絾8086/8088鍙湁20浣嶅湴鍧綰匡紝鍙兘澶熻闂?/span>1M鍦板潃鑼冨洿鐨勬暟鎹紝鎵浠ュ鏋滆闂?/span>100000h~10FFEFh涔嬮棿鐨勫唴瀛橈紙澶т簬1M絀洪棿錛夛紝鍒欏繀欏繪湁絎?/span>21鏍瑰湴鍧綰挎潵鍙備笌瀵誨潃錛?/span>8086/8088娌℃湁錛夈傚洜姝わ紝褰撶▼搴忓憳緇欏嚭瓚呰繃1M錛?/span>100000H-10FFEFH錛夌殑鍦板潃鏃訛紝鍥犱負閫昏緫涓婃甯革紝緋葷粺騫朵笉璁や負鍏惰闂秺鐣岃屼駭鐢熷紓甯革紝鑰屾槸鑷姩浠?/span>0寮濮嬭綆楋紝涔熷氨鏄緋葷粺璁$畻瀹為檯鍦板潃鐨勬椂鍊欐槸鎸夌収瀵?/span>1M姹傛ā鐨勬柟寮忚繘琛岀殑錛岃繖縐嶆妧鏈縐頒負wrap-around銆?/span>
286鏄?/span>Intel 80286鐨勫彟涓縐嶅彨娉曪級
瀹冨張琚О浣滀負铏氭嫙鍦板潃淇濇姢妯″紡銆傜粡綆″湪Intel 80286鎵嬪唽涓凡緇忔彁鍑轟簡铏氬湴鍧淇濇姢妯″紡錛屼絾瀹為檯涓婂畠鍙槸涓涓寚寮曪紝鐪熸鐨?/span>32浣嶅湴鍧鍑虹幇鍦?/span>Intel 80386涓娿備繚鎶ゆā寮忔湰韜槸80286鍙婁互鍚庡吋瀹瑰鐞嗗櫒搴忓垪涔嬪悗浜ф垚鐨勪竴縐嶆搷浣滄ā寮忥紝瀹冨叿鏈夎澶氱壒鎬ц璁′負鎻愰珮緋葷粺鐨勫閬撲換鍔″拰緋葷粺鐨勭ǔ瀹氭с備緥濡傚唴瀛樼殑淇濇姢錛屽垎欏墊満鍒跺拰紜歡铏氭嫙瀛樺偍鐨勬敮鎸併傜幇浠e鏁扮殑x86澶勭悊鍣ㄦ搷浣滅郴緇熼兘榪愯鍦ㄤ繚鎶ゆā寮忎笅錛屽寘鎷?/span>Linux, Free BSD, 鍜?/span>Windows
3.0錛堝畠涔熻繍琛屽湪瀹炴ā寮忎笅錛屼負浜嗗拰Windows 2.x搴旂敤紼嬪簭鍏煎錛夊強浠ュ悗鐨勭増鏈?/span>
Gate瀵逛簬鍐呭瓨璁塊棶鏈変粈涔堝獎鍝嶅憿錛?/font>
Gate琚姝€傚垯鍏剁A20鍦?/span>CPU鍋氬湴鍧璁塊棶鐨勬椂鍊欐槸鏃犳晥鐨勶紝姘歌繙鍙兘琚綔涓?/span>0銆傛墍浠ワ紝鍦ㄤ繚鎶ゆā寮忎笅錛屽鏋?/span>A20
Gate琚姝紝鍒欏彲浠ヨ闂殑鍐呭瓨鍙兘鏄鏁?/span>1M孌碉紝鍗?/span>1M,3M,5M鈥?span lang="ZH-CN">錛屼篃灝辨槸00000-FFFFF, 200000-2FFFFF,300000-3FFFFF鈥?/font>
]]>
涓. Boot Sector 鐨勭粍鎴?
聽 聽Boot Sector 涔熷氨鏄‖鐩樼殑絎竴涓墖鍖猴紙娉?font face="Times New Roman">1錛?font face="Times New Roman">0鏌遍潰錛?font face="Times New Roman">0紓侀亾錛?font face="Times New Roman">1鎵囧尯錛?錛堟敞2錛?font face="Times New Roman"> 1紓侀亾=16鎵囧尯錛?font face="Times New Roman">1鎵囧尯=512瀛楄妭錛? 瀹冪敱 MBR (Master Boot Record), DPT (Disk Partition Table) 鍜?Boot Record ID 聽涓夐儴鍒嗙粍鎴?
聽 聽MBR 鍙堢О浣滀富寮曞璁板綍鍗犵敤 Boot Sector 鐨勫墠 446 涓瓧鑺?( 0 to 0x1BD ),
瀛樻斁緋葷粺涓誨紩瀵肩▼搴?(瀹冭礋璐f鏌ョ‖鐩樺垎鍖鴻〃銆佸鎵懼彲寮曞鍒嗗尯騫惰礋璐e皢鍙紩瀵煎垎鍖虹殑寮曞鎵囧尯錛圖BR錛夎鍏ュ唴瀛?.
聽 聽DPT 鍗充富鍒嗗尯琛ㄥ崰鐢?64 涓瓧鑺?(0x1BE to 0x1FD), 璁板綍浜嗙鐩樼殑鍩烘湰鍒嗗尯
淇℃伅. 涓誨垎鍖鴻〃鍒嗕負鍥涗釜鍒嗗尯欏? 姣忛」 16 瀛楄妭, 鍒嗗埆璁板綍浜嗘瘡涓富鍒嗗尯鐨勪俊鎭?
(鍥犳鏈澶氬彲浠ユ湁鍥涗釜涓誨垎鍖?.
聽 聽Boot Record ID 鍗沖紩瀵煎尯鏍囪鍗犵敤涓や釜瀛楄妭 (0x1FE and 0x1FF), 瀵逛簬鍚堟硶
寮曞鍖? 瀹冪瓑浜?0xAA55, 榪欐槸鍒ゅ埆寮曞鍖烘槸鍚﹀悎娉曠殑鏍囧織.
聽 聽Boot Sector 鐨勫叿浣撶粨鏋勫涓嬪浘鎵紺?
聽 聽 聽0000 聽|------------------------------------------------|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 Master Boot Record 聽 聽 聽 聽 聽 聽 聽 聽 |
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 涓誨紩瀵艱褰?446瀛楄妭) 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01BD 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01BE 聽|------------------------------------------------|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01CD 聽| 聽 聽 聽 聽 聽 聽 鍒嗗尯淇℃伅 聽1(16瀛楄妭) 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01CE 聽|------------------------------------------------|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01DD 聽| 聽 聽 聽 聽 聽 聽 鍒嗗尯淇℃伅 聽2(16瀛楄妭) 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01DE 聽|------------------------------------------------|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01ED 聽| 聽 聽 聽 聽 聽 聽 鍒嗗尯淇℃伅 聽3(16瀛楄妭) 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01EE 聽|------------------------------------------------|
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽01FD 聽| 聽 聽 聽 聽 聽 聽 鍒嗗尯淇℃伅 聽4(16瀛楄妭) 聽 聽 聽 聽 聽 聽 聽 聽|
聽 聽 聽 聽 聽 聽|------------------------------------------------|
聽 聽 聽 聽 聽 聽| 01FE 聽 聽 聽 聽 聽 聽 聽 聽| 01FF 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 |
聽 聽 聽 聽 聽 聽| 聽 聽 聽 聽 55 聽 聽 聽 聽 聽| 聽 聽 聽 聽 聽 AA 聽 聽 聽 聽 聽 聽 |
聽 聽 聽 聽 聽 聽|------------------------------------------------|
聽 聽緋葷粺鍚姩榪囩▼涓昏鐢變竴涓嬪嚑姝ョ粍鎴?浠ョ‖鐩樺惎鍔ㄤ負渚?:
聽 聽1. 寮鏈?br />聽 聽2. BIOS 鍔犵數鑷 ( Power On Self Test -- POST )
聽 聽 聽 鍐呭瓨鍦板潃涓?0ffff:0000
聽 聽3. 灝嗙‖鐩樼涓涓墖鍖?(0澶?閬?鎵囧尯, 涔熷氨鏄疊oot Sector)
聽 聽 聽 璇誨叆鍐呭瓨鍦板潃 0000:
聽 聽4. 媯鏌?(WORD) 0000:7dfe 鏄惁絳変簬 0xaa55, 鑻ヤ笉絳変簬
聽 聽 聽 鍒欒漿鍘誨皾璇曞叾浠栧惎鍔ㄤ粙璐? 濡傛灉娌℃湁鍏朵粬鍚姩浠嬭川鍒欐樉紺?
聽 聽 聽 "No ROM BASIC" 鐒跺悗姝繪満.
聽 聽5. 璺寵漿鍒?0000:
聽 聽6. MBR 棣栧厛灝嗚嚜宸卞鍒跺埌 0000:0600 澶? 鐒跺悗緇х畫鎵ц.
聽 聽7. 鍦ㄤ富鍒嗗尯琛ㄤ腑鎼滅儲鏍囧織涓烘椿鍔ㄧ殑鍒嗗尯. 濡傛灉鍙戠幇娌℃湁媧誨姩
聽 聽 聽 鍒嗗尯鎴栨湁涓嶆涓涓椿鍔ㄥ垎鍖? 鍒欒漿鍋滄.
聽 聽8. 灝嗘椿鍔ㄥ垎鍖虹殑絎竴涓墖鍖鴻鍏ュ唴瀛樺湴鍧 0000:
聽 聽9. 媯鏌?(WORD) 0000:7dfe 鏄惁絳変簬 0xaa55, 鑻ヤ笉絳変簬鍒?
聽 聽 聽 鏄劇ず "Missing Operating System" 鐒跺悗鍋滄, 鎴栧皾璇?
聽 聽 聽 杞洏鍚姩.
聽 聽10. 璺寵漿鍒?0000:
聽 聽11. 鍚姩緋葷粺 ...
聽 聽浠ヤ笂姝ラ涓?2,3,4,5 姝ユ槸鐢?BIOS 鐨勫紩瀵肩▼搴?/b>瀹屾垚. 6,7,8,9,10
姝ョ敱MBR涓殑寮曞紼嬪簭瀹屾垚.
聽 聽涓鑸緋葷粺寮曞紼嬪簭 (濡?SmartFDISK, BootStar, PQBoot 絳?
閮芥槸灝嗘爣鍑嗕富寮曞璁板綍鏇挎崲鎴愯嚜宸辯殑寮曞紼嬪簭, 鍦ㄨ繍琛岀郴緇熷惎鍔ㄧ▼搴?
涔嬪墠璁╃敤鎴烽夋嫨瑕佸惎鍔ㄧ殑鍒嗗尯.
聽 聽鑰屾煇浜涚郴緇熻嚜甯︾殑澶氱郴緇熷紩瀵肩▼搴?(濡?lilo, NT Loader 絳?
鍒欏彲浠ュ皢鑷繁鐨勫紩瀵肩▼搴忔斁鍦ㄧ郴緇熸墍澶勫垎鍖虹殑絎竴涓墖鍖轟腑, 鍦?Linux
涓嵆涓?SuperBlock (鍏跺疄 SuperBlock 鏄袱涓墖鍖?.
聽 聽娉? 浠ヤ笂鍚勬楠や腑浣跨敤鐨勬槸鏍囧噯 MBR, 鍏朵粬澶氱郴緇熷紩瀵肩▼搴忕殑寮曞榪囩▼涓庢涓嶅悓.
]]>
<linux-2.4.20/kernel/fork.c> |
鍏朵腑鐨刢lone_flags鍙栬嚜浠ヤ笅瀹忕殑"鎴?鍊鹼細
<linux-2.4.20/include/linux/sched.h> |
鍦╠o_fork()涓紝涓嶅悓鐨? clone_flags灝嗗鑷翠笉鍚岀殑琛屼負錛屽浜嶭inuxThreads錛屽畠浣跨敤錛圕LONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND錛夊弬鏁版潵璋冪敤clone()鍒涘緩"綰跨▼"錛岃〃紺哄叡浜唴瀛樸佸叡浜枃浠剁郴緇熻闂鏁般佸叡浜枃浠舵弿榪扮琛紝浠ュ強鍏變韓淇″彿澶勭悊鏂瑰紡銆傛湰 鑺傚氨閽堝榪欏嚑涓弬鏁幫紝鐪嬬湅Linux鍐呮牳鏄浣曞疄鐜拌繖浜涜祫婧愮殑鍏變韓鐨勩?/p>
1.CLONE_VM
do_fork ()闇瑕佽皟鐢╟opy_mm()鏉ヨ緗畉ask_struct涓殑mm鍜宎ctive_mm欏癸紝榪欎袱涓猰m_struct鏁版嵁涓庤繘紼嬫墍鍏寵仈鐨勫唴瀛樼┖闂寸浉瀵? 搴斻傚鏋渄o_fork()鏃舵寚瀹氫簡CLONE_VM寮鍏籌紝copy_mm()灝嗘妸鏂扮殑task_struct涓殑mm鍜宎ctive_mm璁劇疆鎴愪笌 current鐨勭浉鍚岋紝鍚屾椂鎻愰珮璇m_struct鐨勪嬌鐢ㄨ呮暟鐩紙mm_struct::mm_users錛夈備篃灝辨槸璇達紝杞婚噺綰ц繘紼嬩笌鐖惰繘紼嬪叡浜唴瀛樺湴 鍧絀洪棿錛岀敱涓嬪浘紺烘剰鍙互鐪嬪嚭mm_struct鍦ㄨ繘紼嬩腑鐨勫湴浣嶏細
2.CLONE_FS
task_struct 涓埄鐢╢s錛坰truct fs_struct *錛夎褰曚簡榪涚▼鎵鍦ㄦ枃浠剁郴緇熺殑鏍圭洰褰曞拰褰撳墠鐩綍淇℃伅錛宒o_fork()鏃惰皟鐢╟opy_fs()澶嶅埗浜嗚繖涓粨鏋勶紱鑰屽浜庤交閲忕駭榪涚▼鍒欎粎澧炲姞fs- >count璁℃暟錛屼笌鐖惰繘紼嬪叡浜浉鍚岀殑fs_struct銆備篃灝辨槸璇達紝杞婚噺綰ц繘紼嬫病鏈夌嫭绔嬬殑鏂囦歡緋葷粺鐩稿叧鐨勪俊鎭紝榪涚▼涓換浣曚竴涓嚎紼嬫敼鍙樺綋鍓嶇洰褰曘? 鏍圭洰褰曠瓑淇℃伅閮藉皢鐩存帴褰卞搷鍒板叾浠栫嚎紼嬨?/p>
3.CLONE_FILES
涓 涓繘紼嬪彲鑳芥墦寮浜嗕竴浜涙枃浠訛紝鍦ㄨ繘紼嬬粨鏋則ask_struct涓埄鐢╢iles錛坰truct files_struct *錛夋潵淇濆瓨榪涚▼鎵撳紑鐨勬枃浠剁粨鏋勶紙struct file錛変俊鎭紝do_fork()涓皟鐢ㄤ簡copy_files()鏉ュ鐞嗚繖涓繘紼嬪睘鎬э紱杞婚噺綰ц繘紼嬩笌鐖惰繘紼嬫槸鍏變韓璇ョ粨鏋勭殑錛宑opy_files() 鏃朵粎澧炲姞files->count璁℃暟銆傝繖涓鍏變韓浣垮緱浠諱綍綰跨▼閮借兘璁塊棶榪涚▼鎵緇存姢鐨勬墦寮鏂囦歡錛屽瀹冧滑鐨勬搷浣滀細鐩存帴鍙嶆槧鍒拌繘紼嬩腑鐨勫叾浠栫嚎紼嬨?/p>
4.CLONE_SIGHAND
姣? 涓涓狶inux榪涚▼閮藉彲浠ヨ嚜琛屽畾涔夊淇″彿鐨勫鐞嗘柟寮忥紝鍦╰ask_struct涓殑sig錛坰truct signal_struct錛変腑浣跨敤涓涓猻truct k_sigaction緇撴瀯鐨勬暟緇勬潵淇濆瓨榪欎釜閰嶇疆淇℃伅錛宒o_fork()涓殑copy_sighand()璐熻矗澶嶅埗璇ヤ俊鎭紱杞婚噺綰ц繘紼嬩笉榪涜澶嶅埗錛岃屼粎 浠呭鍔爏ignal_struct::count璁℃暟錛屼笌鐖惰繘紼嬪叡浜緇撴瀯銆備篃灝辨槸璇達紝瀛愯繘紼嬩笌鐖惰繘紼嬬殑淇″彿澶勭悊鏂瑰紡瀹屽叏鐩稿悓錛岃屼笖鍙互鐩鎬簰鏇存敼銆?/p>
do_fork()涓墍鍋氱殑宸ヤ綔寰堝錛屽湪姝や笉璇︾粏鎻忚堪銆傚浜嶴MP緋葷粺錛屾墍鏈夌殑榪涚▼fork鍑烘潵鍚庯紝閮借鍒嗛厤鍒頒笌鐖惰繘紼嬬浉鍚岀殑cpu涓婏紝涓鐩村埌璇ヨ繘紼嬭璋冨害鏃舵墠浼氳繘琛宑pu閫夋嫨銆?/p>
灝?
綆inux鏀寔杞婚噺綰ц繘紼嬶紝浣嗗茍涓嶈兘璇村畠灝辨敮鎸佹牳蹇冪駭綰跨▼錛屽洜涓篖inux鐨?綰跨▼"鍜?榪涚▼"瀹為檯涓婂浜庝竴涓皟搴﹀眰嬈★紝鍏變韓涓涓繘紼嬫爣璇嗙絀洪棿錛岃繖縐?
闄愬埗浣垮緱涓嶅彲鑳藉湪Linux涓婂疄鐜板畬鍏ㄦ剰涔変笂鐨凱OSIX綰跨▼鏈哄埗錛屽洜姝や紬澶氱殑Linux綰跨▼搴撳疄鐜板皾璇曢兘鍙兘灝藉彲鑳藉疄鐜癙OSIX鐨勭粷澶ч儴鍒嗚涔夛紝騫跺湪
鍔熻兘涓婂敖鍙兘閫艱繎銆?/p>
|
|
|
LinuxThreads 鏄洰鍓峀inux騫沖彴涓婁嬌鐢ㄦ渶涓哄箍娉涚殑綰跨▼搴擄紝鐢盭avier Leroy (Xavier.Leroy@inria.fr)璐熻矗寮鍙戝畬鎴愶紝騫跺凡緇戝畾鍦℅LIBC涓彂琛屻傚畠鎵瀹炵幇鐨勫氨鏄熀浜庢牳蹇冭交閲忕駭榪涚▼鐨?涓瀵逛竴"綰跨▼妯″瀷錛屼竴 涓嚎紼嬪疄浣撳搴斾竴涓牳蹇冭交閲忕駭榪涚▼錛岃岀嚎紼嬩箣闂寸殑綆$悊鍦ㄦ牳澶栧嚱鏁板簱涓疄鐜般?/p>
LinuxThreads 瀹氫箟浜嗕竴涓猻truct _pthread_descr_struct鏁版嵁緇撴瀯鏉ユ弿榪扮嚎紼嬶紝騫朵嬌鐢ㄥ叏灞鏁扮粍鍙橀噺__pthread_handles鏉ユ弿榪板拰寮曠敤榪涚▼鎵杈栫嚎紼嬨傚湪 __pthread_handles涓殑鍓嶄袱欏癸紝LinuxThreads瀹氫箟浜嗕袱涓叏灞鐨勭郴緇熺嚎紼嬶細__pthread_initial_thread 鍜宊_pthread_manager_thread錛屽茍鐢╛_pthread_main_thread琛ㄥ緛 __pthread_manager_thread鐨勭埗綰跨▼錛堝垵濮嬩負__pthread_initial_thread錛夈?/p>
struct _pthread_descr_struct鏄竴涓弻鐜摼琛ㄧ粨鏋勶紝__pthread_manager_thread鎵鍦ㄧ殑閾捐〃浠呭寘鎷畠涓涓厓绱狅紝瀹為檯 涓婏紝__pthread_manager_thread鏄竴涓壒孌婄嚎紼嬶紝LinuxThreads浠呬嬌鐢ㄤ簡鍏朵腑鐨別rrno銆乸_pid銆? p_priority絳変笁涓煙銆傝宊_pthread_main_thread鎵鍦ㄧ殑閾懼垯灝嗚繘紼嬩腑鎵鏈夌敤鎴風嚎紼嬩覆鍦ㄤ簡涓璧楓傜粡榪囦竴緋誨垪 pthread_create()涔嬪悗褰㈡垚鐨刜_pthread_handles鏁扮粍灝嗗涓嬪浘鎵紺猴細
鏂板垱寤虹殑綰跨▼灝嗛鍏堝湪__pthread_handles鏁扮粍涓崰鎹竴欏癸紝鐒跺悗閫氳繃鏁版嵁緇撴瀯涓殑閾炬寚閽堣繛鍏ヤ互__pthread_main_thread涓洪鎸囬拡鐨勯摼琛ㄤ腑銆傝繖涓摼琛ㄧ殑浣跨敤鍦ㄤ粙緇嶇嚎紼嬬殑鍒涘緩鍜岄噴鏀劇殑鏃跺欏皢鎻愬埌銆?/p>
LinuxThreads 閬靛驚POSIX1003.1c鏍囧噯錛屽叾涓綰跨▼搴撶殑瀹炵幇榪涜浜嗕竴浜涜寖鍥撮檺鍒訛紝姣斿榪涚▼鏈澶х嚎紼嬫暟錛岀嚎紼嬬鏈夋暟鎹尯澶у皬絳夌瓑銆傚湪LinuxThreads鐨? 瀹炵幇涓紝鍩烘湰閬靛驚榪欎簺闄愬埗錛屼絾涔熻繘琛屼簡涓瀹氱殑鏀瑰姩錛屾敼鍔ㄧ殑瓚嬪娍鏄斁鏉炬垨鑰呰鎵╁ぇ榪欎簺闄愬埗錛屼嬌緙栫▼鏇村姞鏂逛究銆傝繖浜涢檺瀹氬畯涓昏闆嗕腑鍦? sysdeps/unix/sysv/linux/bits/local_lim.h錛堜笉鍚屽鉤鍙頒嬌鐢ㄧ殑鏂囦歡浣嶇疆涓嶅悓錛変腑錛屽寘鎷涓嬪嚑涓細
姣? 榪涚▼鐨勭鏈夋暟鎹甼ey鏁幫紝POSIX瀹氫箟_POSIX_THREAD_KEYS_MAX涓?28錛孡inuxThreads浣跨敤 PTHREAD_KEYS_MAX錛?024錛涚鏈夋暟鎹噴鏀炬椂鍏佽鎵ц鐨勬搷浣滄暟錛孡inuxThreads涓嶱OSIX涓鑷達紝瀹氫箟 PTHREAD_DESTRUCTOR_ITERATIONS涓?錛涙瘡榪涚▼鐨勭嚎紼嬫暟錛孭OSIX瀹氫箟涓?4錛孡inuxThreads澧炲ぇ鍒?024 錛圥THREAD_THREADS_MAX錛夛紱綰跨▼榪愯鏍堟渶灝忕┖闂村ぇ灝忥紝POSIX鏈寚瀹氾紝LinuxThreads浣跨敤 PTHREAD_STACK_MIN錛?6384錛堝瓧鑺傦級銆?/p>
" 涓瀵逛竴"妯″瀷鐨勫ソ澶勪箣涓鏄嚎紼嬬殑璋冨害鐢辨牳蹇冨畬鎴愪簡錛岃屽叾浠栬濡傜嚎紼嬪彇娑堛佺嚎紼嬮棿鐨勫悓姝ョ瓑宸ヤ綔錛岄兘鏄湪鏍稿綰跨▼搴撲腑瀹屾垚鐨勩傚湪LinuxThreads涓紝 涓撻棬涓烘瘡涓涓繘紼嬫瀯閫犱簡涓涓鐞嗙嚎紼嬶紝璐熻矗澶勭悊綰跨▼鐩稿叧鐨勭鐞嗗伐浣溿傚綋榪涚▼絎竴嬈¤皟鐢╬thread_create()鍒涘緩涓涓嚎紼嬬殑鏃跺欏氨浼氬垱寤? 錛坃_clone()錛夊茍鍚姩綆$悊綰跨▼銆?/p>
鍦ㄤ竴涓繘紼嬬┖闂村唴錛岀鐞嗙嚎紼嬩笌鍏朵粬綰跨▼涔嬮棿閫氳繃涓瀵?綆$悊綆¢亾 錛坢anager_pipe[2]錛?鏉ラ氳錛岃綆¢亾鍦ㄥ垱寤虹鐞嗙嚎紼嬩箣鍓嶅垱寤猴紝鍦ㄦ垚鍔熷惎鍔ㄤ簡綆$悊綰跨▼涔嬪悗錛岀鐞嗙閬撶殑璇葷鍜屽啓绔垎鍒祴緇欎袱涓叏灞鍙橀噺 __pthread_manager_reader鍜宊_pthread_manager_request錛屼箣鍚庯紝姣忎釜鐢ㄦ埛綰跨▼閮介氳繃 __pthread_manager_request鍚戠鐞嗙嚎紼嬪彂璇鋒眰錛屼絾綆$悊綰跨▼鏈韓騫舵病鏈夌洿鎺ヤ嬌鐢? __pthread_manager_reader錛岀閬撶殑璇葷錛坢anager_pipe[0]錛夋槸浣滀負__clone()鐨勫弬鏁頒箣涓浼犵粰綆$悊綰跨▼鐨勶紝 綆$悊綰跨▼鐨勫伐浣滀富瑕佸氨鏄洃鍚閬撹绔紝騫跺浠庝腑鍙栧嚭鐨勮姹備綔鍑哄弽搴斻?/p>
鍒涘緩綆$悊綰跨▼鐨勬祦紼嬪涓嬫墍紺猴細
錛堝叏灞鍙橀噺pthread_manager_request鍒濆間負-1錛?
鍒? 濮嬪寲緇撴潫鍚庯紝鍦╛_pthread_manager_thread涓褰曚簡杞婚噺綰ц繘紼嬪彿浠ュ強鏍稿鍒嗛厤鍜岀鐞嗙殑綰跨▼id錛? 2*PTHREAD_THREADS_MAX+1榪欎釜鏁板間笉浼氫笌浠諱綍甯歌鐢ㄦ埛綰跨▼id鍐茬獊銆傜鐞嗙嚎紼嬩綔涓簆thread_create()鐨勮皟鐢ㄨ呯嚎紼嬬殑 瀛愮嚎紼嬭繍琛岋紝鑰宲thread_create()鎵鍒涘緩鐨勯偅涓敤鎴風嚎紼嬪垯鏄敱綆$悊綰跨▼鏉ヨ皟鐢╟lone()鍒涘緩錛屽洜姝ゅ疄闄呬笂鏄鐞嗙嚎紼嬬殑瀛愮嚎紼嬨傦紙姝ゅ瀛? 綰跨▼鐨勬蹇靛簲璇ュ綋浣滃瓙榪涚▼鏉ョ悊瑙c傦級
__pthread_manager()灝辨槸綆$悊綰跨▼鐨勪富寰幆鎵鍦紝鍦ㄨ繘琛屼竴緋誨垪鍒濆 鍖栧伐浣滃悗錛岃繘鍏hile(1)寰幆銆傚湪寰幆涓紝綰跨▼浠?縐掍負timeout鏌ヨ錛坃_poll()錛夌鐞嗙閬撶殑璇葷銆傚湪澶勭悊璇鋒眰鍓嶏紝媯鏌ュ叾鐖剁嚎紼嬶紙涔熷氨 鏄垱寤簃anager鐨勪富綰跨▼錛夋槸鍚﹀凡閫鍑猴紝濡傛灉宸查鍑哄氨閫鍑烘暣涓繘紼嬨傚鏋滄湁閫鍑虹殑瀛愮嚎紼嬮渶瑕佹竻鐞嗭紝鍒欒皟鐢╬thread_reap_children ()娓呯悊銆?/p>
鐒跺悗鎵嶆槸璇誨彇綆¢亾涓殑璇鋒眰錛屾牴鎹姹傜被鍨嬫墽琛岀浉搴旀搷浣滐紙switch-case錛夈傚叿浣撶殑璇鋒眰澶勭悊錛屾簮鐮佷腑姣旇緝娓呮錛岃繖閲屽氨涓嶈禈榪頒簡銆?/p>
鍦↙inuxThreads涓紝綆$悊綰跨▼鐨勬爤鍜岀敤鎴風嚎紼嬬殑鏍堟槸鍒嗙鐨勶紝綆$悊綰跨▼鍦ㄨ繘紼嬪爢涓氳繃malloc()鍒嗛厤涓涓猅HREAD_MANAGER_STACK_SIZE瀛楄妭鐨勫尯鍩熶綔涓鴻嚜宸辯殑榪愯鏍堛?/p>
鐢? 鎴風嚎紼嬬殑鏍堝垎閰嶅姙娉曢殢鐫浣撶郴緇撴瀯鐨勪笉鍚岃屼笉鍚岋紝涓昏鏍規嵁涓や釜瀹忓畾涔夋潵鍖哄垎錛屼竴涓槸NEED_SEPARATE_REGISTER_STACK錛岃繖涓睘鎬т粎 鍦↖A64騫沖彴涓婁嬌鐢紱鍙︿竴涓槸FLOATING_STACK瀹忥紝鍦╥386絳夊皯鏁板鉤鍙頒笂浣跨敤錛屾鏃剁敤鎴風嚎紼嬫爤鐢辯郴緇熷喅瀹氬叿浣撲綅緗茍鎻愪緵淇濇姢銆備笌姝ゅ悓鏃訛紝 鐢ㄦ埛榪樺彲浠ラ氳繃綰跨▼灞炴х粨鏋勬潵鎸囧畾浣跨敤鐢ㄦ埛鑷畾涔夌殑鏍堛傚洜綃囧箙鎵闄愶紝榪欓噷鍙兘鍒嗘瀽i386騫沖彴鎵浣跨敤鐨勪袱縐嶆爤緇勭粐鏂瑰紡錛欶LOATING_STACK鏂瑰紡 鍜岀敤鎴瘋嚜瀹氫箟鏂瑰紡銆?/p>
鍦‵LOATING_STACK鏂瑰紡涓嬶紝LinuxThreads鍒╃敤mmap()浠庡唴鏍哥┖闂翠腑鍒嗛厤
8MB絀洪棿錛坕386緋葷粺緙虹渷鐨勬渶澶ф爤絀洪棿澶у皬錛屽鏋滄湁榪愯闄愬埗錛坮limit錛夛紝鍒欐寜鐓ц繍琛岄檺鍒惰緗級錛屼嬌鐢╩protect()璁劇疆鍏朵腑絎竴欏典負闈炶
闂尯銆傝8M絀洪棿鐨勫姛鑳藉垎閰嶅涓嬪浘錛?/p>
浣庡湴鍧琚繚鎶ょ殑欏甸潰鐢ㄦ潵鐩戞祴鏍堟孩鍑恒?/p>
瀵逛簬鐢ㄦ埛鎸囧畾鐨勬爤錛屽湪鎸夌収鎸囬拡瀵圭晫鍚庯紝璁劇疆綰跨▼鏍堥《錛屽茍璁$畻鍑烘爤搴曪紝涓嶅仛淇濇姢錛屾紜х敱鐢ㄦ埛鑷繁淇濊瘉銆?/p>
涓嶈鍝緇勭粐鏂瑰紡錛岀嚎紼嬫弿榪扮粨鏋勬繪槸浣嶄簬鏍堥《绱ч偦鍫嗘爤鐨勪綅緗?/p>
姣忎釜LinuxThreads綰跨▼閮藉悓鏃跺叿鏈夌嚎紼媔d鍜岃繘紼媔d錛屽叾涓繘紼媔d灝辨槸鍐呮牳鎵緇存姢鐨勮繘紼嬪彿錛岃岀嚎紼媔d鍒欑敱LinuxThreads鍒嗛厤鍜岀淮鎶ゃ?/p>
__pthread_initial_thread 鐨勭嚎紼媔d涓篜THREAD_THREADS_MAX錛宊_pthread_manager_thread鐨勬槸 2*PTHREAD_THREADS_MAX+1錛岀涓涓敤鎴風嚎紼嬬殑綰跨▼id涓篜THREAD_THREADS_MAX+2錛屾鍚庣n涓敤鎴風嚎紼嬬殑綰跨▼ id閬靛驚浠ヤ笅鍏紡錛?/p>
tid=n*PTHREAD_THREADS_MAX+n+1 |
榪欑鍒嗛厤鏂瑰紡淇濊瘉浜嗚繘紼嬩腑鎵鏈夌殑綰跨▼錛堝寘鎷凡緇忛鍑猴級閮戒笉浼氭湁鐩稿悓鐨勭嚎紼媔d錛岃岀嚎紼媔d鐨勭被鍨媝thread_t瀹氫箟涓烘棤絎﹀彿闀挎暣鍨嬶紙unsigned long int錛夛紝涔熶繚璇佷簡鏈夌悊鐢辯殑榪愯鏃墮棿鍐呯嚎紼媔d涓嶄細閲嶅銆?/p>
浠庣嚎紼媔d鏌ユ壘綰跨▼鏁版嵁緇撴瀯鏄湪pthread_handle()鍑芥暟涓畬鎴愮殑錛屽疄闄呬笂鍙槸灝嗙嚎紼嬪彿鎸塒THREAD_THREADS_MAX鍙栨ā錛屽緱鍒扮殑灝辨槸璇ョ嚎紼嬪湪__pthread_handles涓殑绱㈠紩銆?/p>
鍦╬thread_create ()鍚戠鐞嗙嚎紼嬪彂閫丷EQ_CREATE璇鋒眰涔嬪悗錛岀鐞嗙嚎紼嬪嵆璋冪敤pthread_handle_create()鍒涘緩鏂扮嚎紼嬨傚垎閰嶆爤銆佽緗畉hread 灞炴у悗錛屼互pthread_start_thread()涓哄嚱鏁板叆鍙h皟鐢╛_clone()鍒涘緩騫跺惎鍔ㄦ柊綰跨▼銆俻thread_start_thread ()璇誨彇鑷韓鐨勮繘紼媔d鍙峰瓨鍏ョ嚎紼嬫弿榪扮粨鏋勪腑錛屽茍鏍規嵁鍏朵腑璁板綍鐨勮皟搴︽柟娉曢厤緗皟搴︺備竴鍒囧噯澶囧氨緇悗錛屽啀璋冪敤鐪熸鐨勭嚎紼嬫墽琛屽嚱鏁幫紝騫跺湪姝ゅ嚱鏁拌繑鍥炲悗璋冪敤 pthread_exit()娓呯悊鐜板満銆?/p>
鐢變簬Linux鍐呮牳鐨勯檺鍒朵互鍙婂疄鐜伴毦搴︾瓑絳夊師鍥狅紝LinuxThreads騫朵笉鏄畬鍏≒OSIX鍏煎鐨勶紝鍦ㄥ畠鐨勫彂琛孯EADME涓湁璇存槑銆?/p>
1)榪涚▼id闂
榪欎釜涓嶈凍鏄渶鍏抽敭鐨勪笉瓚籌紝寮曡搗鐨勫師鍥犵壍娑夊埌LinuxThreads鐨?涓瀵逛竴"妯″瀷銆?/p>
Linux 鍐呮牳騫朵笉鏀寔鐪熸鎰忎箟涓婄殑綰跨▼錛孡inuxThreads鏄敤涓庢櫘閫氳繘紼嬪叿鏈夊悓鏍峰唴鏍歌皟搴﹁鍥劇殑杞婚噺綰ц繘紼嬫潵瀹炵幇綰跨▼鏀寔鐨勩傝繖浜涜交閲忕駭榪涚▼鎷ユ湁鐙珛鐨勮繘 紼媔d錛屽湪榪涚▼璋冨害銆佷俊鍙峰鐞嗐両O絳夋柟闈韓鏈変笌鏅氳繘紼嬩竴鏍風殑鑳藉姏銆傚湪婧愮爜闃呰鑰呯湅鏉ワ紝灝辨槸Linux鍐呮牳鐨刢lone()娌℃湁瀹炵幇瀵? CLONE_PID鍙傛暟鐨勬敮鎸併?/p>
鍦ㄥ唴鏍竏o_fork()涓CLONE_PID鐨勫鐞嗘槸榪欐牱鐨勶細
if (clone_flags & CLONE_PID) {
|
榪欐浠g爜琛ㄦ槑錛岀洰鍓嶇殑Linux鍐呮牳浠呭湪pid涓?鐨勬椂鍊欒鍙疌LONE_PID鍙傛暟錛屽疄闄呬笂錛屼粎鍦⊿MP鍒濆鍖栵紝鎵嬪伐鍒涘緩榪涚▼鐨勬椂鍊欐墠浼氫嬌鐢–LONE_PID鍙傛暟銆?/p>
鎸夌収POSIX瀹氫箟錛屽悓涓榪涚▼鐨勬墍鏈夌嚎紼嬪簲璇ュ叡浜竴涓繘紼媔d鍜岀埗榪涚▼id錛岃繖鍦ㄧ洰鍓嶇殑"涓瀵逛竴"妯″瀷涓嬫槸鏃犳硶瀹炵幇鐨勩?/p>
2)淇″彿澶勭悊闂
鐢變簬寮傛淇″彿鏄唴鏍鎬互榪涚▼涓哄崟浣嶅垎鍙戠殑錛岃孡inuxThreads鐨勬瘡涓嚎紼嬪鍐呮牳鏉ヨ閮芥槸涓涓繘紼嬶紝涓旀病鏈夊疄鐜?綰跨▼緇?錛屽洜姝わ紝鏌愪簺璇箟涓嶇鍚圥OSIX鏍囧噯錛屾瘮濡傛病鏈夊疄鐜板悜榪涚▼涓墍鏈夌嚎紼嬪彂閫佷俊鍙鳳紝README瀵規浣滀簡璇存槑銆?/p>
濡? 鏋滄牳蹇冧笉鎻愪緵瀹炴椂淇″彿錛孡inuxThreads灝嗕嬌鐢⊿IGUSR1鍜孲IGUSR2浣滀負鍐呴儴浣跨敤鐨剅estart鍜宑ancel淇″彿錛岃繖鏍峰簲鐢ㄧ▼搴忓氨 涓嶈兘浣跨敤榪欎袱涓師鏈負鐢ㄦ埛淇濈暀鐨勪俊鍙蜂簡銆傚湪Linux kernel 2.1.60浠ュ悗鐨勭増鏈兘鏀寔鎵╁睍鐨勫疄鏃朵俊鍙鳳紙浠巁SIGRTMIN鍒癬SIGRTMAX錛夛紝鍥犳涓嶅瓨鍦ㄨ繖涓棶棰樸?/p>
鏌愪簺淇″彿鐨勭己鐪佸姩浣滈毦浠ュ湪鐜拌浣撶郴涓婂疄鐜幫紝姣斿SIGSTOP鍜孲IGCONT錛孡inuxThreads鍙兘灝嗕竴涓嚎紼嬫寕璧鳳紝鑰屾棤娉曟寕璧鋒暣涓繘紼嬨?/p>
3)綰跨▼鎬繪暟闂
LinuxThreads灝嗘瘡涓繘紼嬬殑綰跨▼鏈澶ф暟鐩畾涔変負1024錛屼絾瀹為檯涓婅繖涓暟鍊艱繕鍙楀埌鏁翠釜緋葷粺鐨勬昏繘紼嬫暟闄愬埗錛岃繖鍙堟槸鐢變簬綰跨▼鍏跺疄鏄牳蹇冭繘紼嬨?/p>
鍦╧ernel 2.4.x涓紝閲囩敤涓濂楀叏鏂扮殑鎬昏繘紼嬫暟璁$畻鏂規硶錛屼嬌寰楁昏繘紼嬫暟鍩烘湰涓婁粎鍙楅檺浜庣墿鐞嗗唴瀛樼殑澶у皬錛岃綆楀叕寮忓湪kernel/fork.c鐨刦ork_init()鍑芥暟涓細
max_threads = mempages / (THREAD_SIZE/PAGE_SIZE) / 8 |
鍦╥386 涓婏紝THREAD_SIZE=2*PAGE_SIZE錛孭AGE_SIZE=2^12錛?KB錛夛紝mempages=鐗╃悊鍐呭瓨澶у皬/PAGE_SIZE錛? 瀵逛簬256M鐨勫唴瀛樼殑鏈哄櫒錛宮empages=256*2^20/2^12=256*2^8錛屾鏃舵渶澶х嚎紼嬫暟涓?096銆?/p>
浣嗕負浜嗕繚璇佹瘡涓敤鎴鳳紙闄や簡root錛夌殑榪涚▼鎬繪暟涓嶈嚦浜庡崰鐢ㄤ竴鍗婁互涓婄墿鐞嗗唴瀛橈紝fork_init()涓戶緇寚瀹氾細
init_task.rlim[RLIMIT_NPROC].rlim_cur = max_threads/2; |
榪欎簺榪涚▼鏁扮洰鐨勬鏌ラ兘鍦╠o_fork()涓繘琛岋紝鍥犳錛屽浜嶭inuxThreads鏉ヨ錛岀嚎紼嬫繪暟鍚屾椂鍙楄繖涓変釜鍥犵礌鐨勯檺鍒躲?/p>
4)綆$悊綰跨▼闂
綆$悊綰跨▼瀹規槗鎴愪負鐡墮錛岃繖鏄繖縐嶇粨鏋勭殑閫氱梾錛涘悓鏃訛紝綆$悊綰跨▼鍙堣礋璐g敤鎴風嚎紼嬬殑娓呯悊宸ヤ綔錛屽洜姝わ紝灝界綆$悊綰跨▼宸茬粡灞忚斀浜嗗ぇ閮ㄥ垎鐨勪俊鍙鳳紝浣嗕竴鏃︾鐞嗙嚎紼嬫浜★紝鐢ㄦ埛綰跨▼灝變笉寰椾笉鎵嬪伐娓呯悊浜嗭紝鑰屼笖鐢ㄦ埛綰跨▼騫朵笉鐭ラ亾綆$悊綰跨▼鐨勭姸鎬侊紝涔嬪悗鐨勭嚎紼嬪垱寤虹瓑璇鋒眰灝嗘棤浜哄鐞嗐?/p>
5)鍚屾闂
LinuxThreads涓殑綰跨▼鍚屾寰堝ぇ紼嬪害涓婃槸寤虹珛鍦ㄤ俊鍙峰熀紜涓婄殑錛岃繖縐嶉氳繃鍐呮牳澶嶆潅鐨勪俊鍙峰鐞嗘満鍒剁殑鍚屾鏂瑰紡錛屾晥鐜囦竴鐩存槸涓棶棰樸?/p>
6錛夊叾浠朠OSIX鍏煎鎬ч棶棰?/b>
Linux涓緢澶氱郴緇熻皟鐢紝鎸夌収璇箟閮芥槸涓庤繘紼嬬浉鍏崇殑錛屾瘮濡俷ice銆乻etuid銆乻etrlimit絳夛紝鍦ㄧ洰鍓嶇殑LinuxThreads涓紝榪欎簺璋冪敤閮戒粎浠呭獎鍝嶈皟鐢ㄨ呯嚎紼嬨?/p>
7錛夊疄鏃舵ч棶棰?/b>
綰跨▼鐨勫紩鍏ユ湁涓瀹氱殑瀹炴椂鎬ц冭檻錛屼絾LinuxThreads鏆傛椂涓嶆敮鎸侊紝姣斿璋冨害閫夐」錛岀洰鍓嶈繕娌℃湁瀹炵幇銆備笉浠匧inuxThreads濡傛錛屾爣鍑嗙殑Linux鍦ㄥ疄鏃舵т笂鑰冭檻閮藉緢灝戙?/p>
|
|
|
LinuxThreads 鐨勯棶棰橈紝鐗瑰埆鏄吋瀹規т笂鐨勯棶棰橈紝涓ラ噸闃葷浜哃inux涓婄殑璺ㄥ鉤鍙板簲鐢紙濡侫pache錛夐噰鐢ㄥ綰跨▼璁捐錛屼粠鑰屼嬌寰桳inux涓婄殑綰跨▼搴旂敤涓鐩翠繚鎸佸湪姣旇緝浣? 鐨勬按騫熾傚湪Linux紺懼尯涓紝宸茬粡鏈夊緢澶氫漢鍦ㄤ負鏀硅繘綰跨▼鎬ц兘鑰屽姫鍔涳紝鍏朵腑鏃㈠寘鎷敤鎴風駭綰跨▼搴擄紝涔熷寘鎷牳蹇冪駭鍜岀敤鎴風駭閰嶅悎鏀硅繘鐨勭嚎紼嬪簱銆傜洰鍓嶆渶涓轟漢鐪嬪ソ鐨勬湁 涓や釜欏圭洰錛屼竴涓槸RedHat鍏徃鐗靛ご鐮斿彂鐨凬PTL錛圢ative Posix Thread Library錛夛紝鍙︿竴涓垯鏄疘BM鎶曡祫寮鍙戠殑NGPT錛圢ext Generation Posix Threading錛夛紝浜岃呴兘鏄洿緇曞畬鍏ㄥ吋瀹筆OSIX 1003.1c錛屽悓鏃跺湪鏍稿唴鍜屾牳澶栧仛宸ヤ綔浠ヨ屽疄鐜板瀵瑰綰跨▼妯″瀷銆傝繖涓ょ妯″瀷閮藉湪涓瀹氱▼搴︿笂寮ヨˉ浜哃inuxThreads鐨勭己鐐癸紝涓旈兘鏄噸璧風倝鐏跺叏鏂拌 璁$殑銆?/p>
1.NPTL
NPTL鐨勮璁$洰鏍囧綊綰沖彲褰掔撼涓轟互涓嬪嚑鐐癸細
鍦? 鎶鏈疄鐜頒笂錛孨PTL浠嶇劧閲囩敤1:1鐨勭嚎紼嬫ā鍨嬶紝騫墮厤鍚坓libc鍜屾渶鏂扮殑Linux Kernel2.5.x寮鍙戠増鍦ㄤ俊鍙峰鐞嗐佺嚎紼嬪悓姝ャ佸瓨鍌ㄧ鐞嗙瓑澶氭柟闈㈣繘琛屼簡浼樺寲銆傚拰LinuxThreads涓嶅悓錛孨PTL娌℃湁浣跨敤綆$悊綰跨▼錛屾牳蹇冪嚎紼? 鐨勭鐞嗙洿鎺ユ斁鍦ㄦ牳鍐呰繘琛岋紝榪欎篃甯︿簡鎬ц兘鐨勪紭鍖栥?/p>
涓昏鏄洜涓烘牳蹇冪殑闂錛孨PTL浠嶇劧涓嶆槸100%POSIX鍏煎鐨勶紝浣嗗氨鎬ц兘鑰岃█鐩稿LinuxThreads宸茬粡鏈夊緢澶х▼搴︿笂鐨勬敼榪涗簡銆?/p>
2.NGPT
IBM鐨勫紑鏀炬簮鐮侀」鐩甆GPT鍦?003騫?鏈?0鏃ユ帹鍑轟簡紼沖畾鐨?.2.0鐗堬紝浣嗙浉鍏崇殑鏂囨。宸ヤ綔榪樺樊寰堝銆傚氨鐩墠鎵鐭ワ紝NGPT鏄熀浜嶨NU Pth錛圙NU Portable Threads錛夐」鐩屽疄鐜扮殑M:N妯″瀷錛岃孏NU Pth鏄竴涓粡鍏哥殑鐢ㄦ埛綰х嚎紼嬪簱瀹炵幇銆?/p>
鎸夌収2003騫?鏈圢GPT瀹樻柟緗戠珯涓婄殑閫氱煡錛孨GPT鑰冭檻鍒癗PTL鏃ョ泭騫挎硾鍦頒負浜烘墍鎺ュ彈錛屼負閬垮厤涓嶅悓鐨勭嚎紼嬪簱鐗堟湰寮曡搗鐨勬販涔憋紝浠婂悗灝嗕笉鍐嶈繘琛岃繘涓姝ュ紑鍙戯紝鑰屼粖榪涜鏀寔鎬х殑緇存姢宸ヤ綔銆備篃灝辨槸璇達紝NGPT宸茬粡鏀懼純涓嶯PTL绔炰簤涓嬩竴浠inux POSIX綰跨▼搴撴爣鍑嗐?/p>
3.鍏朵粬楂樻晥綰跨▼鏈哄埗
姝?
澶勪笉鑳戒笉鎻愬埌Scheduler
Activations銆傝繖涓?991騫村湪ACM涓婂彂琛ㄧ殑澶氱嚎紼嬪唴鏍哥粨鏋勫獎鍝嶄簡寰堝澶氱嚎紼嬪唴鏍哥殑璁捐錛屽叾涓寘鎷琈ach3.0銆丯etBSD鍜屽晢涓氱増鏈?
Digital Unix錛堢幇鍦ㄥ彨Compaq True64
Unix錛夈傚畠鐨勫疄璐ㄦ槸鍦ㄤ嬌鐢ㄧ敤鎴風駭綰跨▼璋冨害鐨勫悓鏃訛紝灝藉彲鑳藉湴鍑忓皯鐢ㄦ埛綰у鏍稿績鐨勭郴緇熻皟鐢ㄨ姹傦紝鑰屽悗鑰呭線寰鏄繍琛屽紑閿鐨勯噸瑕佹潵婧愩傞噰鐢ㄨ繖縐嶇粨鏋勭殑綰跨▼鏈?
鍒訛紝瀹為檯涓婃槸緇撳悎浜嗙敤鎴風駭綰跨▼鐨勭伒媧婚珮鏁堝拰鏍稿績綰х嚎紼嬬殑瀹炵敤鎬э紝鍥犳錛屽寘鎷琇inux銆丗reeBSD鍦ㄥ唴鐨勫涓紑鏀炬簮鐮佹搷浣滅郴緇熻璁$ぞ鍖洪兘鍦ㄨ繘琛岀浉鍏崇爺
絀訛紝鍔涘浘鍦ㄦ湰緋葷粺涓疄鐜癝cheduler Activations銆?/p>
|
|
||
|
|
|
鏉ㄦ矙媧詫紝鐩墠鍦ㄥ浗闃茬鎶澶у璁$畻鏈哄闄㈡敾璇昏蔣浠舵柟鍚戝崥澹浣嶃?/p> |
鎸夌収鏁欑涔︿笂鐨勫畾涔夛紝榪涚▼鏄祫婧愮鐞嗙殑鏈灝忓崟浣嶏紝綰跨▼鏄▼搴忔墽琛岀殑鏈灝忓崟浣嶃傚湪鎿嶄綔緋葷粺璁捐涓婏紝浠庤繘紼嬫紨鍖栧嚭綰跨▼錛屾渶涓昏鐨勭洰鐨勫氨鏄洿濂界殑鏀寔SMP浠ュ強鍑忓皬錛堣繘紼?綰跨▼錛変笂涓嬫枃鍒囨崲寮閿銆?/b>
鏃? 璁烘寜鐓ф庢牱鐨勫垎娉曪紝涓涓繘紼嬭嚦灝戦渶瑕佷竴涓嚎紼嬩綔涓哄畠鐨勬寚浠ゆ墽琛屼綋錛岃繘紼嬬鐞嗙潃璧勬簮錛堟瘮濡俢pu銆佸唴瀛樸佹枃浠剁瓑絳夛級錛岃屽皢綰跨▼鍒嗛厤鍒版煇涓猚pu涓婃墽琛屻備竴涓? 榪涚▼褰撶劧鍙互鎷ユ湁澶氫釜綰跨▼錛屾鏃訛紝濡傛灉榪涚▼榪愯鍦⊿MP鏈哄櫒涓婏紝瀹冨氨鍙互鍚屾椂浣跨敤澶氫釜cpu鏉ユ墽琛屽悇涓嚎紼嬶紝杈懼埌鏈澶х▼搴︾殑騫惰錛屼互鎻愰珮鏁堢巼錛涘悓鏃訛紝鍗充嬌 鏄湪鍗昪pu鐨勬満鍣ㄤ笂錛岄噰鐢ㄥ綰跨▼妯″瀷鏉ヨ璁$▼搴忥紝姝e褰撳勾閲囩敤澶氳繘紼嬫ā鍨嬩唬鏇垮崟榪涚▼妯″瀷涓鏍鳳紝浣胯璁℃洿綆媧併佸姛鑳芥洿瀹屽錛岀▼搴忕殑鎵ц鏁堢巼涔熸洿楂橈紝渚嬪閲? 鐢ㄥ涓嚎紼嬪搷搴斿涓緭鍏ワ紝鑰屾鏃跺綰跨▼妯″瀷鎵瀹炵幇鐨勫姛鑳藉疄闄呬笂涔熷彲浠ョ敤澶氳繘紼嬫ā鍨嬫潵瀹炵幇錛岃屼笌鍚庤呯浉姣旓紝綰跨▼鐨勪笂涓嬫枃鍒囨崲寮閿灝辨瘮榪涚▼瑕佸皬澶氫簡錛屼粠璇箟涓? 鏉ヨ錛屽悓鏃跺搷搴斿涓緭鍏ヨ繖鏍風殑鍔熻兘錛屽疄闄呬笂灝辨槸鍏變韓浜嗛櫎cpu浠ュ鐨勬墍鏈夎祫婧愮殑銆?/p>
閽堝綰跨▼妯″瀷鐨勪袱澶ф剰涔夛紝鍒嗗埆寮鍙戝嚭浜嗘牳 蹇冪駭綰跨▼鍜岀敤鎴風駭綰跨▼涓ょ綰跨▼妯″瀷錛屽垎綾葷殑鏍囧噯涓昏鏄嚎紼嬬殑璋冨害鑰呭湪鏍稿唴榪樻槸鍦ㄦ牳澶栥傚墠鑰呮洿鍒╀簬騫跺彂浣跨敤澶氬鐞嗗櫒鐨勮祫婧愶紝鑰屽悗鑰呭垯鏇村鑰冭檻鐨勬槸涓婁笅鏂囧垏鎹? 寮閿銆?/b>鍦ㄧ洰鍓嶇殑鍟嗙敤緋葷粺涓紝閫氬父閮藉皢涓よ呯粨鍚堣搗鏉ヤ嬌鐢紝鏃㈡彁渚涙牳蹇冪嚎紼嬩互婊¤凍smp緋葷粺鐨勯渶瑕侊紝涔熸敮鎸佺敤綰跨▼搴撶殑鏂瑰紡鍦ㄧ敤鎴鋒佸疄鐜板彟涓濂楃嚎紼嬫満鍒訛紝姝ゆ椂涓 涓牳蹇冪嚎紼嬪悓鏃舵垚涓哄涓敤鎴鋒佺嚎紼嬬殑璋冨害鑰呫傛濡傚緢澶氭妧鏈竴鏍鳳紝"娣峰悎"閫氬父閮借兘甯︽潵鏇撮珮鐨勬晥鐜囷紝浣嗗悓鏃朵篃甯︽潵鏇村ぇ鐨勫疄鐜伴毦搴︼紝鍑轟簬"綆鍗?鐨勮璁℃濊礬錛? Linux浠庝竴寮濮嬪氨娌℃湁瀹炵幇娣峰悎妯″瀷鐨勮鍒掞紝浣嗗畠鍦ㄥ疄鐜頒笂閲囩敤浜嗗彟涓縐嶆濊礬鐨?娣峰悎"銆?/p>
鍦ㄧ嚎紼嬫満鍒剁殑鍏蜂綋瀹炵幇涓婏紝鍙互鍦? 鎿嶄綔緋葷粺鍐呮牳涓婂疄鐜扮嚎紼嬶紝涔熷彲浠ュ湪鏍稿瀹炵幇錛屽悗鑰呮樉鐒惰姹傛牳鍐呰嚦灝戝疄鐜頒簡榪涚▼錛岃屽墠鑰呭垯涓鑸姹傚湪鏍稿唴鍚屾椂涔熸敮鎸佽繘紼嬨傛牳蹇冪駭綰跨▼妯″瀷鏄劇劧瑕佹眰鍓嶈呯殑鏀? 鎸侊紝鑰岀敤鎴風駭綰跨▼妯″瀷鍒欎笉涓瀹氬熀浜庡悗鑰呭疄鐜般傝繖縐嶅樊寮傦紝姝e鍓嶆墍榪幫紝鏄袱縐嶅垎綾繪柟寮忕殑鏍囧噯涓嶅悓甯︽潵鐨勩?/p>
褰撴牳鍐呮棦鏀寔榪涚▼涔? 鏀寔綰跨▼鏃訛紝灝卞彲浠ュ疄鐜扮嚎紼?榪涚▼鐨?澶氬澶?妯″瀷錛屽嵆涓涓繘紼嬬殑鏌愪釜綰跨▼鐢辨牳鍐呰皟搴︼紝鑰屽悓鏃跺畠涔熷彲浠ヤ綔涓虹敤鎴風駭綰跨▼姹犵殑璋冨害鑰咃紝閫夋嫨鍚堥傜殑鐢ㄦ埛綰х嚎紼嬪湪 鍏剁┖闂翠腑榪愯銆傝繖灝辨槸鍓嶉潰鎻愬埌鐨?娣峰悎"綰跨▼妯″瀷錛屾棦鍙弧瓚沖澶勭悊鏈虹郴緇熺殑闇瑕侊紝涔熷彲浠ユ渶澶ч檺搴︾殑鍑忓皬璋冨害寮閿銆傜粷澶у鏁板晢涓氭搷浣滅郴緇燂紙濡侱igital Unix銆丼olaris銆両rix錛夐兘閲囩敤鐨勮繖縐嶈兘澶熷畬鍏ㄥ疄鐜癙OSIX1003.1c鏍囧噯鐨勭嚎紼嬫ā鍨嬨傚湪鏍稿瀹炵幇鐨勭嚎紼嬪張鍙互鍒嗕負"涓瀵逛竴"銆?澶氬 涓"涓ょ妯″瀷錛屽墠鑰呯敤涓涓牳蹇冭繘紼嬶紙涔熻鏄交閲忚繘紼嬶級瀵瑰簲涓涓嚎紼嬶紝灝嗙嚎紼嬭皟搴︾瓑鍚屼簬榪涚▼璋冨害錛屼氦緇欐牳蹇冨畬鎴愶紝鑰屽悗鑰呭垯瀹屽叏鍦ㄦ牳澶栧疄鐜板綰跨▼錛岃皟搴︿篃鍦ㄧ敤 鎴鋒佸畬鎴愩傚悗鑰呭氨鏄墠闈㈡彁鍒扮殑鍗曠函鐨勭敤鎴風駭綰跨▼妯″瀷鐨勫疄鐜版柟寮忥紝鏄劇劧錛岃繖縐嶆牳澶栫殑綰跨▼璋冨害鍣ㄥ疄闄呬笂鍙渶瑕佸畬鎴愮嚎紼嬭繍琛屾爤鐨勫垏鎹紝璋冨害寮閿闈炲父灝忥紝浣嗗悓鏃跺洜 涓烘牳蹇冧俊鍙鳳紙鏃犺鏄悓姝ョ殑榪樻槸寮傛鐨勶級閮芥槸浠ヨ繘紼嬩負鍗曚綅鐨勶紝鍥犺屾棤娉曞畾浣嶅埌綰跨▼錛屾墍浠ヨ繖縐嶅疄鐜版柟寮忎笉鑳界敤浜庡澶勭悊鍣ㄧ郴緇燂紝鑰岃繖涓渶姹傛鍙樺緱瓚婃潵瓚婂ぇ錛屽洜 姝わ紝鍦ㄧ幇瀹炰腑錛岀函鐢ㄦ埛綰х嚎紼嬬殑瀹炵幇錛岄櫎綆楁硶鐮旂┒鐩殑浠ュ錛屽嚑涔庡凡緇忔秷澶變簡銆?/p>
Linux鍐呮牳鍙彁渚涗簡杞婚噺榪涚▼鐨勬敮鎸侊紝闄愬埗浜?
鏇撮珮鏁堢殑綰跨▼妯″瀷鐨勫疄鐜幫紝浣哃inux鐫閲嶄紭鍖栦簡榪涚▼鐨勮皟搴﹀紑閿錛屼竴瀹氱▼搴︿笂涔熷譏琛ヤ簡榪欎竴緙洪櫡銆傜洰鍓嶆渶嫻佽鐨勭嚎紼嬫満鍒禠inuxThreads鎵閲囩敤鐨勫氨
鏄嚎紼?榪涚▼"涓瀵逛竴"妯″瀷錛岃皟搴︿氦緇欐牳蹇冿紝鑰屽湪鐢ㄦ埛綰у疄鐜頒竴涓寘鎷俊鍙峰鐞嗗湪鍐呯殑綰跨▼綆$悊鏈哄埗銆侺inux-LinuxThreads鐨勮繍琛屾満鍒舵鏄湰
鏂囩殑鎻忚堪閲嶇偣銆?/p>