freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux操作系統(tǒng)原理與應(yīng)用-資料下載頁

2025-05-12 13:53本頁面
  

【正文】 程 ?沒事閑逛的 0號進(jìn)程-從無到有誕生的第一個(gè)線程,執(zhí)行 cpu_idle()函數(shù)(省電又少熱)。 ? 既是內(nèi)核線程也是 1號用戶進(jìn)程的 init。 Init進(jìn)程誕生后就不愿意死亡了,它創(chuàng)建和監(jiān)控操作系統(tǒng)外層所有進(jìn)程的活動。 還有另外四個(gè)線程: ?kflushd (即 bdflush)線程:刷新 “ 臟 ” 緩沖區(qū)中的內(nèi)容到磁盤以歸還內(nèi)存。 ?Kupdate線程:刷新舊的 “ 臟 ” 緩沖區(qū)中的內(nèi)容到磁盤以減少文件系統(tǒng)不一致的風(fēng)險(xiǎn)。 ?Kpiod線程:把屬于共享內(nèi)存映射的頁面交換出去。 ?Kswapd線程:執(zhí)行內(nèi)存回收功能。 進(jìn)程的系統(tǒng)調(diào)用 ?Fork()-父親克隆一個(gè)兒子。執(zhí)行 fork()之后,兵分兩路,兩個(gè)進(jìn)程并發(fā)執(zhí)行。 ?Exec()-新進(jìn)程脫胎換骨,離家獨(dú)立,開始了獨(dú)立工作的職業(yè)生涯。 ?Wait()-等待不僅僅是阻塞自己,還準(zhǔn)備對僵死的子進(jìn)程進(jìn)行善后處理。 ?Exit()-終止進(jìn)程,把進(jìn)程的狀態(tài)置為 “ 僵死 ” ,并把其所有的子進(jìn)程都托付給 init進(jìn)程,最后調(diào)用 schedule()函數(shù),選擇一個(gè)新的進(jìn)程運(yùn)行。 進(jìn)程的一生 ?隨著一句 fork,一個(gè)新進(jìn)程呱呱落地,但這時(shí)它只是老進(jìn)程的一個(gè)克隆。然后,隨著 exec,新進(jìn)程脫胎換骨,離家獨(dú)立,開始了獨(dú)立工作的職業(yè)生涯。 ?人有生老病死,進(jìn)程也一樣,它可以是自然死亡,即運(yùn)行到 main函數(shù)的最后一個(gè) },從容地離我們而去;也可以是中途退場,退場有 2種方式,一種是調(diào)用 exit函數(shù),一種是在 main函數(shù)內(nèi)使用 return,無論哪一種方式,它都可以留下留言,放在返回值里保留下來;甚至它還可能被謀殺,被其它進(jìn)程通過另外一些方式結(jié)束它的生命。 ?進(jìn)程死掉以后,會留下一個(gè)空殼, wait站好最后一班崗,打掃戰(zhàn)場,使其最終歸于無形。這就是進(jìn)程完整的一生。 與調(diào)度相關(guān)的系統(tǒng)調(diào)用 系統(tǒng)調(diào)用 描述 nice( ) 改變一個(gè)普通進(jìn)程的優(yōu)先級 getpriority( ) 取得一組普通進(jìn)程的最大優(yōu)先級 setpriority( ) 設(shè)置一組普通進(jìn)程的優(yōu)先級 sched_getscheduler( ) 取得一個(gè)進(jìn)程的調(diào)度策略 sched_setscheduler( ) 設(shè)置一個(gè)進(jìn)程的調(diào)度策略和優(yōu)先級 sched_getparam( ) 取得一個(gè)進(jìn)程的調(diào)度優(yōu)先級 sched_setparam( ) 設(shè)置一個(gè)進(jìn)程的優(yōu)先級 sched_yield( ) 不阻塞的情況下自愿放棄處理機(jī) sched_get_ priority_min( ) 取得某種策略的最小優(yōu)先級 sched_get_ priority_max( ) 取得某種策略的最大優(yōu)先級 小節(jié) 進(jìn)程是一個(gè)抽象概念,是對程序執(zhí)行過程的抽象 進(jìn)程控制塊是進(jìn)程這一抽象概念在計(jì)算機(jī)中的描述 進(jìn)程的組織采用了樹、鏈表,哈希表,隊(duì)列等。 Linux采用了時(shí)間片輪轉(zhuǎn)的優(yōu)先級調(diào)度方式 進(jìn)程采用 “ 寫時(shí)復(fù)制 ” 技術(shù)創(chuàng)建一個(gè)新進(jìn)程 程序開發(fā)人員可以改變進(jìn)程的優(yōu)先級,甚至調(diào)度策略 進(jìn)程從誕生到死亡涉及四種系統(tǒng)調(diào)用 第四章 內(nèi)存管理 Linux的內(nèi)存管理 進(jìn)程的用戶空間管理 請頁機(jī)制 物理內(nèi)存的分配與回收 交換機(jī)制 內(nèi)存管理示例 內(nèi)存的層次結(jié)構(gòu) ?虛擬內(nèi)存的 基本思想 :在計(jì)算機(jī)中運(yùn)行的程序,其代碼、數(shù)據(jù)和堆棧的總量可以超過實(shí)際內(nèi)存的大小,操作系統(tǒng)只將當(dāng)前使用的程序塊保留在內(nèi)存中,其余的程序塊則保留在磁盤上。必要時(shí),操作系統(tǒng)負(fù)責(zé)在磁盤和內(nèi)存之間交換程序塊。 擴(kuò)大了的記憶-虛擬內(nèi)存 虛地址到實(shí)地址轉(zhuǎn)換 虛擬地址 虛擬內(nèi)存 、 內(nèi)核空間和用戶空間 內(nèi)核空間( 1GB) 進(jìn)程 1的用戶空間(3GB) 進(jìn)程 2的用戶空間(3GB) ? 進(jìn)程 n的用戶空間(3GB) 虛擬地址空 間 ?虛擬內(nèi)存-共 4G字節(jié),分為 內(nèi)核空間(最高的 1G字節(jié))和 用戶空間 (較低的3G字節(jié))兩部分,每個(gè)進(jìn)程最大擁有 3G字節(jié) 私有虛存空間 ?地址轉(zhuǎn)換-通過頁表把虛存空間的一個(gè)地址轉(zhuǎn)換為物理空間中的實(shí)際地址。 虛擬內(nèi)存 、 內(nèi)核空間和用戶空間 ?內(nèi)核空間由所有進(jìn)程共享,其中存放的是內(nèi)核代碼和數(shù)據(jù),即 “ 內(nèi)核映象 ” ?進(jìn)程的用戶空間中存放的是用戶程序的 代碼和數(shù)據(jù) ?內(nèi)核空間映射到物理內(nèi)存總是從最低地址( 0x00000000)開始,使之在內(nèi)核空間與物理內(nèi)存之間建立簡單的線性映射關(guān)系。 內(nèi)核空間到物理內(nèi)存的映射 0 3G 4G 0 X 虛擬地址空間 物理內(nèi)存 圖 內(nèi)核的虛擬地址空間到物理地址空間的映射 內(nèi)核空間到物理內(nèi)存的映射 ? Linux虛擬內(nèi)存的實(shí)現(xiàn)需要多種機(jī)制的支持 – 地址映射機(jī)制 – 請頁機(jī)制 – 內(nèi)存分配和回收機(jī)制 – 交換機(jī)制 – 緩存和刷新機(jī)制 虛擬內(nèi)存實(shí)現(xiàn)機(jī)制 地址映射 圖 虛擬內(nèi)存實(shí)現(xiàn)機(jī)制及之間的關(guān)系 虛擬內(nèi)存實(shí)現(xiàn)機(jī)制及之間的關(guān)系 ? 每個(gè)進(jìn)程經(jīng)編譯、鏈接后形成的二進(jìn)制映像文件有一個(gè)代碼段和數(shù)據(jù)段 ? 進(jìn)程運(yùn)行時(shí)須有獨(dú)占的堆棧空間 進(jìn)程的用戶空間管理 堆棧段 空洞 數(shù)據(jù)段 代碼段 進(jìn)程的用戶空間( 3G) ? Linux把進(jìn)程的用戶空間劃分為一個(gè)個(gè)區(qū)間,便于管理 ? 一個(gè)進(jìn)程的用戶地址空間主要由 mm_struct結(jié)構(gòu)和 vm_area_structs結(jié)構(gòu)來描述。 ? mm_struct結(jié)構(gòu) 它對進(jìn)程整個(gè)用戶空間進(jìn)行描述 ? vm_area_structs結(jié)構(gòu)對用戶空間中各個(gè)區(qū)間 (簡稱 虛存區(qū) )進(jìn)行描述 進(jìn)程用戶空間 struct mm_struct { atomic_t count。 pgd_t * pgd。 int map_count。 struct semaphore mmap_sem。 unsigned long start_code,end_code,start_data,end_data。 unsigned long start_brk, brk, start_stack。 unsigned long arg_start, arg_end, env_start, env_end。 unsigned long rss, total_vm, locked_vm。 unsigned long def_flags。 struct vm_area_struct *mmap, *mmap_avl, *mmap_cache。 unsigned long swap_t。 unsigned long swap_address。 }。 mm_struct 結(jié)構(gòu) 域名 說 明 count 對 mm_struct結(jié)構(gòu)的引用進(jìn)行計(jì)數(shù)。為了在 Linux中實(shí)現(xiàn)線程,內(nèi)核調(diào)用 clone派生一個(gè)線程,線程和調(diào)用進(jìn)程共享用戶空間,即 mm_struct結(jié)構(gòu),派生后系統(tǒng)會累加 mm_struct中的引用計(jì)數(shù)。 pgd 進(jìn)程的頁目錄基地址,當(dāng)調(diào)度程序調(diào)度一個(gè)進(jìn)程運(yùn)行時(shí),就將這個(gè)地址轉(zhuǎn)成物理地址,并寫入控制寄存器( CR3) map_count 在進(jìn)程的整個(gè)用戶空間中虛存區(qū)的個(gè)數(shù) semaphore 對 mm_struct結(jié)構(gòu)進(jìn)行串行訪問所使用的信號量 Start_code,end_code, start_data, end_data 進(jìn)程的代碼段和數(shù)據(jù)段的起始地址和終止地址 start_brk, brk, start_stack。 每個(gè)進(jìn)程都有一個(gè)特殊的地址區(qū)間,這個(gè)區(qū)間就是所謂的 堆 ,也就是圖 洞。前兩個(gè)域分別描述堆的起始地址和終止的地址,最后一個(gè)域描述堆棧段的起始地址。 arg_start, arg_end, env_start, env_end 命令行參數(shù)所在的堆棧部分的起始地址和終止地址; 環(huán)境串所在的堆棧部分的起始地址和終止地址 rss, total_vm, locked_vm 進(jìn)程貯留在物理內(nèi)存中的頁面數(shù),進(jìn)程所需的總頁數(shù),被鎖定在物理內(nèi)存中的頁數(shù)。 mmap vm_area_struct虛存區(qū)結(jié)構(gòu)形成一個(gè)單鏈表,其基址由小到大排列 mmap_avl vm_area_struct虛存區(qū)結(jié)構(gòu)形成一個(gè)顆 AVL平衡樹 mmap_cache 最近一次用到的虛存區(qū)很可能下一次還要用到,因此,把最近用到的虛存區(qū)結(jié)構(gòu)放入高速緩存,這個(gè)虛存區(qū)就由 mmap_cache指向。 struct vm_area_struct { struct mm_struct * vm_mm。 unsigned long vm_start。 unsigned long vm_end。 pgprot_t vm_page_prot。 unsigned short vm_flags。 struct vm_area_struct *vm_next。 short vm_avl_height。 struct vm_area_struct *vm_avl_left, *vm_avl_right。 struct vm_operations_struct * vm_ops。 struct vm_area_struct *vm_next_share, **vm_pprev_share。 unsigned long vm_offset。 struct file * vm_file。 unsigned long vm_pte。 }。 VM_AREA_STRUCT 結(jié)構(gòu) 域名 說 明 Vm_mm 指向虛存區(qū)所在的 mm_struct結(jié)構(gòu)的指針。 Vm_start, vm_end 虛存區(qū)的起始地址和終止地址。 Vm_page_prot 虛存區(qū)的保護(hù)權(quán)限。 Vm_flags 虛存區(qū)的標(biāo)志。 Vm_next 構(gòu)成線性鏈表的指針,按虛存區(qū)基址從小到大排列。 vm_avl_height,vm_avl_left, vm_avl_right 這 3個(gè)域在一起構(gòu)成 AVL樹,其中 vm_avl_height是該節(jié)點(diǎn)距根節(jié)點(diǎn)的高度 , vm_avl_left和 vm_avl_right分 別是該節(jié)點(diǎn)的左右兩個(gè)子樹。 Vm_ops 對虛存區(qū)進(jìn)行操作的函數(shù)。這些給出了可以對虛存區(qū)中的頁所進(jìn)行的操作。 ? 進(jìn)程控制塊是內(nèi)核中的核心數(shù)據(jù)結(jié)構(gòu)。 ? 在進(jìn)程的 task_struct 結(jié)構(gòu)中包含一個(gè) mm域,它是指向 mm_struct 結(jié)構(gòu)的指針。 ? 而進(jìn)程的 mm_struct結(jié)構(gòu)則包含進(jìn)程的可執(zhí)行映像信息以及進(jìn)程的頁目錄指針 pgd等。 ? 該結(jié)構(gòu)還包含有指向 vm_area_struct 結(jié)構(gòu)的幾個(gè)指針,每個(gè) vm_area_struct 代表進(jìn)程的一個(gè)虛擬地址區(qū)間。 相關(guān)數(shù)據(jù)結(jié)構(gòu)間的關(guān)系 相關(guān)數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系示意圖 ? fork()系統(tǒng)調(diào)用在創(chuàng)建新進(jìn)程時(shí)也為該進(jìn)程創(chuàng)建完整的用戶空間 ? 具體而言,是 通過拷貝或共享父進(jìn)程的用戶空間來實(shí)現(xiàn)的,即 內(nèi)核調(diào)用copy_mm( )函數(shù),為新進(jìn)程建立所有頁表和 mm_struct結(jié)構(gòu) ? Linux利用“寫時(shí)復(fù)制”技術(shù)來快速創(chuàng)建進(jìn)程 創(chuàng)建進(jìn)程用戶空間 ? 執(zhí)行一個(gè)進(jìn)程時(shí),其可執(zhí)行映像必須裝入進(jìn)程的用戶地址空間 ? 虛存映射:即把文件從磁盤映射到進(jìn)程的用戶空間,對文件的訪問轉(zhuǎn)化為對虛存區(qū)的訪問 ? 有共享的、私有的虛存映射和匿名映射 ? 當(dāng)可執(zhí)行映像映射到進(jìn)程的用戶空間時(shí),將產(chǎn)生一組 vm_area_struct 結(jié)構(gòu)來描述各虛擬區(qū)間的起始點(diǎn)和終止點(diǎn) 虛存映射 例: int main() { printf(“virtual area test!”)。 } 進(jìn)程的虛存區(qū)舉例 地址范圍 許可權(quán) 偏移量 所映射的文件 0804800008049000 rxp 00000000 /home/t
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1