日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Solaris內(nèi)核目錄( 七 )


是為了發(fā)出某些控制消息寫進(jìn)程或LWP控制文件 。控制消息(參看proc(1))包括stop/start消息,信號跟蹤和控制,故障管理,執(zhí)行控制(比如進(jìn)入/退出某個系統(tǒng)調(diào)用時暫停)以及地址空間訪問監(jiān)視 。

迄今為止,我們討論的都是用標(biāo)準(zhǔn)系統(tǒng)調(diào)用對procfs文件進(jìn)行I/O操作,目前從
普通應(yīng)用級程序員編程訪問/proc文件來說這是唯一的辦法 。然而另外有一組特定針對procfs的訪問接口,proc(1)中介紹的/usr/proc/bin/下的命令(隨Solaris分發(fā))使用了這組接口 。這組接口位于libproc.so動態(tài)鏈接庫,屬于未公開的接口 。Sun公司正在著手準(zhǔn)備關(guān)于這組接口的文檔,做為標(biāo)準(zhǔn)Solaris APIs提供出來 。圖5展示了以前討論過的內(nèi)核中procfs模塊與各層之間的接口關(guān)系 。

--------------------------------------------------------------------------

--------------------- --------------------------
| custom /proc code | /usr/proc/bin/ |
------------------|-----------------------
| stdio interfaces | | |libproc|
------------------ -- -- -------------- |
| system calls || user
-----------------------------------------------------------------
--------------------------------------- | kernel
| vnode layer ||
--------------------------------------- --------
| procfs |
------------------------------------------------

圖5. procfs模塊與各層之間的接口關(guān)系

--------------------------------------------------------------------------

圖5演示了多條到達(dá)procfs內(nèi)核例程的路徑 。開發(fā)者通常通過系統(tǒng)調(diào)用進(jìn)入vnode層,這是前面過介紹的方式 。而proc(1)命令更多構(gòu)建在libproc.so提供的接口上 。為什么需要這組動態(tài)鏈接庫接口呢,提供一組簡單易用的例程用于應(yīng)用程序開發(fā),減少直接使用內(nèi)核機(jī)制帶來的復(fù)雜性 。控制一個進(jìn)程的執(zhí)行,尤其是多線程進(jìn)程,非常復(fù)雜,需要一組真正屬于API層的編碼接口,而不是內(nèi)核層的編碼接口 。

向控制文件的頭8個字節(jié)(如果是LP64內(nèi)核,就是頭16個字節(jié))寫入一個操作碼和
可選的操作數(shù),完成進(jìn)程控制 。寫進(jìn)程控制文件的路徑也要經(jīng)過vnode層,最終調(diào)用了procfs的prwritectl()函數(shù) 。允許在一次寫調(diào)用中向控制文件寫入多個控制消息(操作碼和操作數(shù)),prwritectl()會將一次寫入的多個控制消息分成獨(dú)立的操作碼/操作數(shù)對,順序提交給內(nèi)核的pr_control()函數(shù),pr_control()函數(shù)將設(shè)置進(jìn)程或LWP相應(yīng)的標(biāo)志,以指明控制機(jī)制啟動,比如某一事件發(fā)生時暫停 ??刂坪瘮?shù)在proc(4)手冊頁中介紹 。

進(jìn)程/LWP控制的實(shí)現(xiàn)與內(nèi)核中進(jìn)程/LWP子系統(tǒng)緊密結(jié)合,P區(qū)、U區(qū)、LWP和內(nèi)核線程結(jié)構(gòu)中各種域一起協(xié)作完成通過procfs進(jìn)行的進(jìn)程管理和控制 。建立進(jìn)程控制包括設(shè)置標(biāo)志和位掩碼字段,用于跟蹤那些導(dǎo)致進(jìn)程、線程進(jìn)入、離開內(nèi)核的事件,包括信號、系統(tǒng)調(diào)用、故障情形 。對應(yīng)這些事件的進(jìn)入、離開內(nèi)核的點(diǎn)定義得比較充分,為進(jìn)程狀態(tài)改變提供了自然的控制機(jī)制 。

系統(tǒng)調(diào)用、信號和故障分別對應(yīng)數(shù)據(jù)類型sysset_t、sigset_t和fltset_t 。如果
指定發(fā)生某系統(tǒng)調(diào)用時暫停,此時尚未從進(jìn)程讀取提供給該系統(tǒng)調(diào)用的參數(shù) 。如果指定離開某系統(tǒng)調(diào)用時暫停,此時來自系統(tǒng)調(diào)用的返回值已經(jīng)提交給進(jìn)程 。可以指定發(fā)生某種故障時進(jìn)入內(nèi)核陷門處理程序 。可以指定接收到某個信號時暫?;蛘邚南到y(tǒng)調(diào)用、內(nèi)核陷門處理程序返回,可以通過信號喚醒進(jìn)程 。

可以在進(jìn)程虛擬地址空間中指定一片區(qū)域處在監(jiān)視中,當(dāng)針對這片區(qū)域進(jìn)行被監(jiān)
視類型的操作(比如讀、寫訪問),也就是監(jiān)視事件發(fā)生時,產(chǎn)生一次監(jiān)視點(diǎn)陷入,典型地導(dǎo)致進(jìn)程、LWP暫停,這通過跟蹤FLTWATCH故障或者捕捉非阻塞的SIGTRAP信號實(shí)現(xiàn) 。

推薦閱讀