国产精品一区三区在线观看_91在线国内在线播放直播_天天操天天视频免费看_一区二区视频免费_日本最新的免费的视频_老汉私人影院永久入口_66夜色_伦理片一区二区三区_成人网络电影欧美日韩国人在线观看_欧洲亚洲日产精zzzzz桃色

咨詢熱線:

18929371983

昊林pcb全國服務熱線

全國服務熱線

18929371983

如果您有任何疑問或是問題, 請隨時與我們聯(lián)系

查看聯(lián)系方式>>
pcb問題解答 當前位置: 首頁 > pcb問題解答

每個進程的pcb和內核放占用多大的內存

時間:2017/5/24 9:17:19

問題描述:linux驅動程序一般工作在內核空間,但也可以工作在用戶空間。下面我們將詳細解析,什么是內核空間,什么是用戶空間,以及如何判斷他們。   Linux簡化了分段機制,使得虛擬地址與線性地址總是一致,因此,Linux的虛擬地址空間也為0~4G.Linux內核將這4G字節(jié)的空間分為兩部分。將最高的1G字節(jié)(從虛擬地址0xC0000000到0xFFFFFFFF),供內核使用,稱為"內核空間".而將較低的3G字節(jié)(從虛擬地址 0x00000000到0xBFFFFFFF),供各個進程使用,稱為"用戶空間)。因為每個進程可以通過系統(tǒng)調用進入內核,因此,Linux內核由系統(tǒng)內的所有進程共享。于是,從具體進程的角度來看,每個進程可以擁有4G字節(jié)的虛擬空間。   Linux使用兩級保護機制:0級供內核使用,3級供用戶程序使用。從圖中可以看出(這里無法表示圖),每個進程有各自的私有用戶空間(0~3G),這個空間對系統(tǒng)中的其他進程是不可見的。最高的1GB字節(jié)虛擬內核空間則為所有進程以及內核所共享。   內核空間中存放的是內核代碼和數(shù)據,而進程的用戶空間中存放的是用戶程序的代碼和數(shù)據。不管是內核空間還是用戶空間,它們都處于虛擬空間中。   雖然內核空間占據了每個虛擬空間中的最高1GB字節(jié),但映射到物理內存卻總是從最低地址(0x00000000)開始。對內核空間來說,其地址映射是很簡單的線性映射,0xC0000000就是物理地址與線性地址之間的位移量,在Linux代碼中就叫做PAGE_OFFSET.   內核空間和用戶空間之間如何進行通訊?   內核空間和用戶空間一般通過系統(tǒng)調用進行通信。   如何判斷一個驅動是用戶模式驅動還是內核模式驅動? 判斷的標準是什么?   用戶空間模式的驅動一般通過系統(tǒng)調用來完成對硬件的訪問,如通過系統(tǒng)調用將驅動的io空間映射到用戶空間等。因此,主要的判斷依據就是系統(tǒng)調用。   內核空間和用戶空間上不同太多了,說不完,比如用戶態(tài)的鏈表和內核鏈表不一樣;用戶態(tài)用printf,內核態(tài)用printk;用戶態(tài)每個應用程序空間是虛擬的,相對獨立的,內核態(tài)中卻不是獨立的,所以編程要非常小心。等等。   還有用戶態(tài)和內核態(tài)程序通訊的方法很多,不單單是系統(tǒng)調用,實際上系統(tǒng)調用是個不好的選擇,因為需要系統(tǒng)調用號,這個需要統(tǒng)一分配。   可以通過ioctl、sysfs、proc等來完成。 在進行設備驅動程序,內核功能模塊等系統(tǒng)級開發(fā)時,通常需要在內核和用戶程序之間交換信息。Linux提供了多種方法可以用來完成這些任務。本文總結了各種常用的信息交換方法,并用簡單的例子演示這些方法各自的特點及用法。其中有大家非常熟悉的方法,也有特殊條件下方可使用的手段。通過對比明確這些方法,可以加深我們對Linux內核的認識,更重要的是,可以讓我們更熟練駕御linux內核級的應用開發(fā)技術。 內核空間(kernel-space) VS 用戶空間(user-space) 作為一個Linux開發(fā)者,首先應該清楚內核空間和用戶空間的區(qū)別。關于這個話題,已經有很多相關資料,我們在這里簡單描述如下: 現(xiàn)代的計算機體系結構中存儲管理通常都包含保護機制。提供保護的目的,是要避免系統(tǒng)中的一個任務訪問屬于另外的或屬于操作系統(tǒng)的存儲區(qū)域。如在IntelX86體系中,就提供了特權級這種保護機制,通過特權級別的區(qū)別來限制對存儲區(qū)域的訪問。 基于這種構架,Linux操作系統(tǒng)對自身進行了劃分:一部分核心軟件獨立于普通應用程序,運行在較高的特權級別上,(Lin......

回答(1).Linux 系統(tǒng) 當前進程使用的內存堆?梢詮膖ask_struct->mm_struct->total_vm中獲得虛擬內存使用總量. . 每個進程都有完全屬于自己的,獨立的,不被干擾的內存空間。此空間,被分成幾個段(Segment),分別是Text, Data, BSS, Heap, Stack。用戶進程內存空間,也是系統(tǒng)內核分配給該進程的VM(虛擬內存),但并不表示這個進程占用了這么多的RAM(物理內存)。這個空間有多大?命令top輸出的VIRT值告訴了我們各個進程內存空間的大。ㄟM程內存空間隨著程序的執(zhí)行會增大或者縮。。你還可以通過/proc//maps,或者pmap –d 了解某個進程內存空間都分布,比如: #cat /proc/1449/maps … 0012e000-002a4000 r-xp 00000000 08:07 3539877 /lib/i386-linux-gnu/libc-2.13.so 002a4000-002a6000 r--p 00176000 08:07 3539877 /lib/i386-linux-gnu/libc-2.13.so 002a6000-002a7000 rw-p 00178000 08:07 3539877 /lib/i386-linux-gnu/libc-2.13.so 002a7000-002aa000 rw-p 00000000 00:00 0 … 08048000-0875b000 r-xp 00000000 08:07 4072287 /usr/local/mysql/libexec/mysqld 0875b000-0875d000 r--p 00712000 08:07 4072287 /usr/local/mysql/libexec/mysqld 0875d000-087aa000 rw-p 00714000 08:07 4072287 /usr/local/mysql/libexec/mysqld … 當前任務的task_struct中有兩個結構,utime和stime分別描述了當前任務在用戶態(tài)和內核態(tài)所消耗的CPU時間,start_time描述了當前任務的起始運行時間,通過單位換算和計算,就可以獲得當前任務的CPU率了! . 參考資料: Windows 獲取進程內存占用大小 .

回答(2).我們知道現(xiàn)在操作系統(tǒng)都是采用虛擬存儲器,那么對32位操作系統(tǒng)而言,它的尋址空間(虛擬存儲空間)為4G(2的32次方)。操心系統(tǒng)的核心是內核,獨立于普通的應用程序,可以訪問受保護的內存空間,也有訪問底層硬件設備的所有權限。為了保證用戶進程不能直接操作內核,保證內核的安全,操心系統(tǒng)將虛擬空間劃分為兩部分,一部分為內核空間,一部分為用戶空間。針對linux操作系統(tǒng)而言,將最高的1G字節(jié)(從虛擬地址0xC0000000到0xFFFFFFFF),供內核使用,稱為內核空間,而將較低的3G字節(jié)(從虛擬地址0x00000000到0xBFFFFFFF),供各個進程使用,稱為用戶空間。每個進程可以通過系統(tǒng)調用進入內核,因此,Linux內核由系統(tǒng)內的所有進程共享。于是,從具體進程的角度來看,每個進程可以擁有4G字節(jié)的虛擬空間 需要注意的細節(jié)問題: (1) 內核空間中存放的是內核代碼和數(shù)據,而進程的用戶空間中存放的是用戶程序的代碼和數(shù)據。不管是內核空間還是用戶空間,它們都處于虛擬空間中。 (2) Linux使用兩級保護機制:0級供內核使用,3級供用戶程序使用。 內核態(tài)與用戶態(tài): (1)當一個任務(進程)執(zhí)行系統(tǒng)調用而陷入內核代碼中執(zhí)行時,稱進程處于內核運行態(tài)(內核態(tài))。此時處理器處于特權級最高的(0級)內核代碼中執(zhí)行。當進程處于內核態(tài)時,執(zhí)行的內核代碼會使用當前進程的內核棧。每個進程都有自己的內核棧。 (2)當進程在執(zhí)行用戶自己的代碼時,則稱其處于用戶運行態(tài)(用戶態(tài))。此時處理器在特權級最低的(3級)用戶代碼中運行。當正在執(zhí)行用戶程序而突然被中斷程序中斷時,此時用戶程序也可以象征性地稱為處于進程的內核態(tài)。因為中斷處理程序將使用當前進程的內核棧。

回答(3).PCB(Process Control Block的縮寫)意思為進程控制塊。進程的靜態(tài)描述由三部分組成PCB、有關程序段和該程序段對其進行操作的數(shù)據結構集。在Unix或類Unix系統(tǒng)中,進程是由進程控制塊,進程執(zhí)行的程序,進程執(zhí)行時所用數(shù)據,進程運行使用的工作區(qū)組成。其中進程控制塊是最重要的一部分。進程控制塊是用來描述進程的當前狀態(tài),本身特性的數(shù)據結構,是進程中組成的最關鍵部分,其中含有描述進程信息和控制信息,是進程的集中特性反映,是操作系統(tǒng)對進程具體進行識別和控制的依據。PCB一般包括:1.程序ID(PID、進程句柄):它是唯一的,一個進程都必須對應一個PID。PID一般是整型數(shù)字2.特征信息:一般分系統(tǒng)進程、用戶進程、或者內核進程等3.進程狀態(tài):運行、就緒、阻塞,表示進程現(xiàn)的運行情況4.優(yōu)先級:表示獲得CPU控制權的優(yōu)先級大小5.通信信息:進程之間的通信關系的反映,由于操作系統(tǒng)會提供通信信道6.現(xiàn)場保護區(qū):保護阻塞的進程用7.資源需求、分配控制信息8.進程實體信息,指明程序路徑和名稱,進程數(shù)據在物理內存還是在交換分區(qū)(分頁)中9.其他信息:工作單位,工作區(qū),文件信息等

回答(4).課本58頁第三段 用戶級和內核級的區(qū)別樓下補充

回答(5).進程控制塊(PCB,Process Control Block),臺灣譯作行程控制表,亦有譯作任務控制表,是操作系統(tǒng)內核中一種數(shù)據結構,主要表示進程狀態(tài)。   雖各實際情況不盡相同,PCB通常記載進程之相關信息,包括:   進程狀態(tài):可以是new、ready、running、waiting或halted等。當新建一個進程時,系統(tǒng)分配資源及PCB給它。而當其完成了特定的任務后,系統(tǒng)收回這個進程所占的資源和取消該進程的PCB就撤消了該進程。程序計數(shù)器:接著要運行的指令地址。CPU寄存器:如累加器、索引寄存器(en:Index register)、堆棧指針以及一般用途寄存器、狀況代碼等,主要用途在于中斷時暫時存儲數(shù)據,以便稍后繼續(xù)利用;其數(shù)量及類因計算機架構有所差異。CPU排班法:優(yōu)先級、排班隊列等指針以及其他參數(shù)。存儲器管理:如標簽頁表(en:Page table)等。會計信息:如CPU與實際時間之使用數(shù)量、時限、帳號、工作或進程號碼。輸入輸出狀態(tài):配置進程使用I/O設備,如磁帶機?傃灾琍CB如其名,內容不脫離各進程相關信息。

回答(6).一般是電源模塊 ,控制模塊, 驅動模塊 ,端口模塊

回答(7).每個進程在內核中都有一個task_struct結構體來維護進程的相關信息,如在Linux內核中稱為進程描述符,在操作系統(tǒng)理論中,稱為PCB。它包含該進程當前打開的所有文件的信息,稱為文件描述符表。在內核中,用files_struct結構體表示,每個表項稱為文件描述符,每個表項都包含一個指向已打開文件的指針。 在用戶程序中,文件描述符指的是文件描述符表的索引(0,1,2,3,·······),用int型變量來保存。

回答(8).簡單理解為:內核空間是內核使用,用戶空間是應用程序使用;除非編譯內核要考慮內核空間,其余情況都可以按照用戶空間處理

【返回列表頁】
榮譽證書
  • 2小時快速報價
  • 生產層數(shù)高達48層
  • 工廠地址:廣東省深圳市寶安區(qū)沙井
  • 24小時單、雙單、加急
  • 生產銅厚高達20oz
  • 詳細地址:新和大道西基達利工業(yè)園六棟
  • 2-10層加急2-3天
  • 軟硬結合線路板
  • 咨詢電話:18929371983
  • 12-20層加急4-7天
  • 各類混壓線路板
  • 公司座機:0755-29125566
  • 12-20層加急4-7天
  • 特殊工藝線路板
  • Mail郵箱:haolinpcb@163.com
  • 大于≥22層加急7天以上
  • 特殊材料線路板
  • 在線QQ:1301093580
  • 深圳昊林電路有限公司 Copyright ©2016-2017 版權所有 備案圖標粵ICP備17023075號   網站XML地圖

    展開