亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2222 | 回復(fù): 4
打印 上一主題 下一主題

關(guān)于進(jìn)程的thread_info [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-12-18 19:56 |只看該作者 |倒序?yàn)g覽
ULK 第三章中:(為了不被翻譯誤解,特找了原文)

For each
process, Linux packs two different data structures in a single per-process memory area: a small data
structure linked to the process descriptor, namely the thread_info structure, and the Kernel Mode
process stack. The length of this memory area is usually 8,192 bytes (two page frames). For reasons
of efficiency the kernel stores the 8-KB memory area in two consecutive page frames with the first
page frame aligned to a multiple of 213;

第一次看的時(shí)候沒覺得這里有什么問題,后來覺得這里還是不太理解。
問題如下:
1.這里說的內(nèi)核堆棧和thread_info結(jié)構(gòu)放在連續(xù)的兩個(gè)頁框中,那么即是處在內(nèi)核態(tài)專用的存儲(chǔ)區(qū)域了。為什么例子上給出
   的地址是0x015fa000~0x015fbfff,難道是物理地址,不是線性地址?

2.內(nèi)存尋址一章好像有說:進(jìn)程的頁目錄項(xiàng)前3/4是用戶態(tài)空間,后1/4的頁目錄項(xiàng)所有進(jìn)程都應(yīng)該相同,那么內(nèi)核態(tài)的1G空
  間應(yīng)該是所有進(jìn)程共享的。 但是這里又說進(jìn)程自己的內(nèi)核棧和thread_info相鄰,那就是每個(gè)進(jìn)程一個(gè)內(nèi)核棧。

  究竟每個(gè)進(jìn)程(非內(nèi)核線程)是否都有自己獨(dú)立的內(nèi)核棧,內(nèi)核數(shù)據(jù)段?

  這段話如下:

  The content of the first entries of the Page Global Directory that map linear addresses lower than
  0xc0000000 (the first 768 entries with PAE disabled, or the first 3 entries with PAE enabled) depends
  on the specific process. Conversely, the remaining entries should be the same for all processes and
  equal to the corresponding entries of the master kernel Page Global Directory (see the following
section)

3.內(nèi)核線程一直工作在內(nèi)核態(tài),都有自己獨(dú)立的堆棧,數(shù)據(jù)段嗎?

4.我們自己寫的中斷服務(wù)程序,以及設(shè)備驅(qū)動(dòng)程序又是工作在用戶態(tài)還是內(nèi)核態(tài)呢?

[ 本帖最后由 wliang511 于 2009-12-18 20:58 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-12-18 20:47 |只看該作者
有點(diǎn)誤解了,所謂代碼段應(yīng)該沒有獨(dú)立不獨(dú)立一說,只不過是一個(gè)只讀的IP指針,指哪里運(yùn)行哪里罷了。我吧代碼段的問題刪掉了

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-12-19 01:49 |只看該作者
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è)運(yùn)行的進(jìn)程有自己的內(nèi)核棧. 當(dāng)KERNEL切換到另外一個(gè)進(jìn)程的時(shí)候,內(nèi)核棧也會(huì)發(fā)生切換.

3. 棧和數(shù)據(jù)段是完全不同的2個(gè)觀念. 數(shù)據(jù)段是靜態(tài)的,棧是動(dòng)態(tài)的. 我覺得每個(gè)內(nèi)核線程應(yīng)該有自己的內(nèi)核棧 .但是不確定.

4.一般都是在內(nèi)核態(tài). 不過LINUX支持用戶態(tài)的驅(qū)動(dòng),但是他們有限制.

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-12-19 12:51 |只看該作者
原帖由 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:


  1.   struct thread_struct {
  2. /* cached TLS descriptors. */
  3.         struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES];
  4.         unsigned long        esp0;
  5.         unsigned long        sysenter_cs;
  6.         unsigned long        eip;
  7.         unsigned long        esp;
  8.         unsigned long        fs;
  9.         unsigned long        gs;
  10. /* Hardware debugging registers */
  11.         unsigned long        debugreg[8];  /* %%db0-7 debug registers */
  12. /* fault info */
  13.         unsigned long        cr2, trap_no, error_code;
  14. /* floating point info */
  15.         union i387_union        i387;
  16. /* virtual 86 mode info */
  17.         struct vm86_struct __user * vm86_info;
  18.         unsigned long                screen_bitmap;
  19.         unsigned long                v86flags, v86mask, saved_esp0;
  20.         unsigned int                saved_fs, saved_gs;
  21. /* IO permissions */
  22.         unsigned long        *io_bitmap_ptr;
  23. /* max allowed port in the bitmap, in bytes: */
  24.         unsigned long        io_bitmap_max;
  25. };
復(fù)制代碼

[ 本帖最后由 wliang511 于 2009-12-19 13:02 編輯 ]

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-12-19 13:22 |只看該作者
關(guān)于2。 我覺得你說得對(duì)。
至于其中ESP0是否指向內(nèi)核棧就不太清楚了。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP