- 論壇徽章:
- 0
|
原帖由 accessory 于 2009-12-19 01:49 發(fā)表 ![]()
1,你說的那個(gè)地址在原書中哪里?怎么寫的?
看上去應(yīng)該是物理地址.
2. 所有進(jìn)程共享1G 內(nèi)核空間 和每個(gè)進(jìn)程一個(gè)內(nèi)核棧并不矛盾. 在某一個(gè)時(shí)刻,只有一個(gè)當(dāng)前進(jìn)程在執(zhí)行. 其他的都在休息或等待. 在這個(gè)時(shí)刻,這個(gè) ...
1.那個(gè)地址在3.2.2.1節(jié)
2.是不是這樣理解的?
頁目錄中屬于用戶態(tài)空間的映射方式是不固定的,所以不同進(jìn)程中的同一個(gè)線性地址(頁目錄前3/4目錄項(xiàng)所覆蓋區(qū)域)指向的物理內(nèi)存地址不一定相同。
但是頁目錄中屬于內(nèi)核態(tài)空間的映射方式是固定的,不同進(jìn)程的同一個(gè)線性地址(頁目錄最后1/4目錄項(xiàng)所覆蓋區(qū)域)指向的必然是相同的物理地址,
所以內(nèi)核態(tài)的1G空間是共享的。
這個(gè)內(nèi)核態(tài)堆棧的SP是不是這個(gè)結(jié)構(gòu)體中的esp0,因?yàn)橛凶约簝?nèi)核態(tài)堆棧的話,我覺得從內(nèi)核態(tài)切換到用戶態(tài)的時(shí)候必須保存相應(yīng)的SP:
- struct thread_struct {
- /* cached TLS descriptors. */
- struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES];
- unsigned long esp0;
- unsigned long sysenter_cs;
- unsigned long eip;
- unsigned long esp;
- unsigned long fs;
- unsigned long gs;
- /* Hardware debugging registers */
- unsigned long debugreg[8]; /* %%db0-7 debug registers */
- /* fault info */
- unsigned long cr2, trap_no, error_code;
- /* floating point info */
- union i387_union i387;
- /* virtual 86 mode info */
- struct vm86_struct __user * vm86_info;
- unsigned long screen_bitmap;
- unsigned long v86flags, v86mask, saved_esp0;
- unsigned int saved_fs, saved_gs;
- /* IO permissions */
- unsigned long *io_bitmap_ptr;
- /* max allowed port in the bitmap, in bytes: */
- unsigned long io_bitmap_max;
- };
復(fù)制代碼
[ 本帖最后由 wliang511 于 2009-12-19 13:02 編輯 ] |
|