版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
版權聲明:本課件及其印刷物、視頻的版權歸成都國嵌信息技術有限公司所有,并保留所有權力:任何單位或個人未經成都國嵌信息技術有限公司書面授權,不得使用該課件及其印刷物、視頻從事商業(yè)、教學活版權聲明:本課件及其印刷物、視頻的版權歸成都國嵌信息技術有限公司所有,并保留所有權力:任何單位或個人未經成都國嵌信息技術有限公司書面授權,不得使用該課件及其印刷物、視頻從事商業(yè)、教學活動。已經取得書面授權的,應在授權范圍內使用,并注明來源:國嵌。違反上述聲明者,我們將追究其Linux進程Linux進程LinuxLinux進程Linux進程Linux系統(tǒng)Proc文件Linux內核Linux進程Linux進程LinuxLinux進程Linux進程Linux系統(tǒng)Proc文件Linux內核定定定程序是存放在磁盤上的一系列定程序是存放在磁盤上的一系列的可執(zhí)行映像,是一個靜止的實體進程是一個執(zhí)行中的程序。它是動態(tài)的體進程四要進程四要進程四要有獨立的Y有獨進程四要有獨立的Y有獨立的用戶空有用戶空間YN進程描進程描pid_t進程狀volatile進程狀volatilelong/*進程進程正在被CPU執(zhí)行,或者已經準備就緒,隨以執(zhí)行。當一個進程剛被創(chuàng)建時TASK_RUNNING狀態(tài)進程狀處于等待中的進程,待資源有效時喚醒,但不可以進程狀處于等待中的進程,待資源有效時喚醒,但不可以進程中止執(zhí)行。當接收到SIGSTOP和SIGTSTP等信號時,進程進入該狀態(tài),接收到SIGCOT信號后,進程重新回到TSK_RUNNING。進程狀進程狀進程狀進程狀進程狀int/*進程狀int/*進程退出時的狀態(tài)EXIT_ZOMBIE(僵死進程waitpid()系統(tǒng)調用來收集有關死亡的進程的信EXIT_DEAD(僵死撤銷狀態(tài)表示進程的最終狀態(tài)。父進程已經使用wait4()waitpid()系統(tǒng)調用來收集了信息,因此進程將由系進程狀進程狀進程描structmm_struct進程用戶空間描述指針,進程描structmm_struct進程用戶空間描述指針,內核線程該指針為空unsignedint該進程的調度策略int優(yōu)先級,2.4goodness的計算結果,0--(MAX_PRIO-1)之間取值定義 140),其0—(MAX_RT_PRIO-1(MAX_RT_PRIO定義為100)屬于實時進程范圍,MAX_RT_PRIO-MX_PRIO-1屬于非實時進程。數(shù)值越大,表示進程優(yōu)先級越小進程描int進程描int靜態(tài)優(yōu)先級,與2.4的nice值意義相同。nice值仍沿用Linux的傳-2019之間變動,數(shù)值越大,進程的優(yōu)先級越小。nice是用樣,不過實時進程的static_prio不參與優(yōu)先級計算。nice與static_prio的關系如下:static_prio=MAX_RT_PRIO+nice+內核定義了兩個宏用來完成這一轉換:PRIO_TO_NICE()進程描struct進程描structsched_rt_entityrt-中是nice值)相關,使用如下公式得出:MIN_TIMESLICE+((MAX_TIMESLICE-MIN_TIMESLICE)(MAX_PRIO-1-(p)->static_prio)/(MAX_USER_PRIO-進程描內核將100-139進程描內核將100-139的優(yōu)先級映射200ms-Task_struct位置Task_struct位置Task_struct位置Task_struct位置可以是4K字節(jié)(1個頁面)也可以是8K字節(jié)(2個頁面)在Linux中用在Linux中用current運行的進程的task_struct進程結束、通過信號或是通過對exit函數(shù)的調進程結束、通過信號或是通過對exit函數(shù)的調do_exitLinux進程Linux進程LinuxLinux進程Linux進程Linux系統(tǒng)Proc文件Linux內核SCHED_FIFO:SCHED_IDLE只在系統(tǒng)空閑時才能夠被調度執(zhí)調度調度類的引入增調度調度類的引入增強了內核調度程序的可擴展類(調度程序模塊)封裝了調度策略,并將調度模塊CFS調度類(kernel/sched_fair.c中實現(xiàn))用于SCHED_BATCH和SCHED_IDLE實時調度類( 中實現(xiàn))用SCHED_RR和SCHED_FIFO策略struct{struct{structvoid(*enqueue_task)(structrq*rq,structtask_struct*p,intwakeup);void(*dequeue_task)(structrq*rq,structtask_struct*p,intsleep);void(*yield_task)(structrq*rq,structtask_struct*p);void(*check_preempt_curr)(structrq*rq,structtask_struct*p);structtask_struct*(*pick_next_task)(structrq*rq);void(*put_prev_task)(structrq*rq,structtask_structunsignedlong(*load_balance)(structrq*this_rq,intthis_cpu,structrq*busiest,unsignedlongmax_nr_move,unsignedlongmax_load_move,structsched_domain*sd,enumcpu_idle_typeidle,int*all_pinned,int*this_best_prio);void(*set_curr_task)(structrq*rq);void(*task_tick)(structrq*rq,structtask_structvoid(*task_new)(structrq*rq,structtask_structpick_next_task:選擇下一個要運行的調度時調度時調度時調度時調度時2、被調度時2、被動式(搶占用戶搶占(Linux2.4、內核搶占get_thread_infobwhy, get_thread_infobwhy, b@@disableldrr1,[tsk,bnework_pendingtstr1,tstr1,bne在不支持內在不支持內核搶占的系統(tǒng)中,進程/線程一旦運行內核空間,就可以一直執(zhí)行,直到它主動放棄或時在支持內核搶占的系統(tǒng)中,更高優(yōu)先級的進程/線可以搶占正在內核空間運行的低優(yōu)先級進程/線程內核正進行中斷處內核正進行中斷處理。進程調度函數(shù)schedule()會對此作出判斷,如果是內核正在進行中斷上下文的BottomHalf(中斷的底半部)前會執(zhí)行軟中斷,此時仍然處于中斷上下文中進程正持有spinlock自旋鎖、writelock/readlock讀寫鎖等,當持有時,不應該被搶占,否則由于搶占將導致其他CPU長期不能獲得鎖而死等內核正在執(zhí)行調度程序Scheduler。搶占的原因就是為了進行新的調/*內核態(tài)接收到中斷 /*/*內核態(tài)接收到中斷 /*進入中斷,搶占計數(shù)加#ifdefget_thread_infor7,r8,#1r7,[tsk,@getpreempt@increment/*中斷處理#ifdefr0,[tsk,#TI_FLAGS]r8,#0r0,r0,@getflags@ifpreemptcount!=@forceflagstomovr8,lr1:movr8,lr1:bl/*調度r0,[tsk,r0,moveqpc,內核搶占(解鎖 {spin_release(&lock->dep_map,內核搶占(解鎖 {spin_release(&lock->dep_map,}內核搶占(解鎖define內核搶占(解鎖definepreempt_enable()\do{\barrier();\preempt_check_resched();\}while 內核搶占(解鎖內核搶占(解鎖#definepreempt_enable_no_resched()\do{\barrier();\dec_preempt_count();\}while內核搶占(解鎖#define內核搶占(解鎖#definepreempt_check_resched()\do{\CHED)))\preempt_schedule();}while內內核提供了一個need_resched標志來表明是否需要重Schedule函數(shù)清理當前運行中的進程Schedule函數(shù)清理當前運行中的進程(pick_next_task分析。Linux進程Linux進程LinuxLinux進程Linux進程Linux系統(tǒng)Proc文件Linux內核Linux內Linux內核中設置了一組用于實Linux系Linux系統(tǒng)還提供了一些C語言函在2.6.29在2.6.29版內核中,共有系統(tǒng)調用332在arch/arm/include/asm/unistd.h中找到 {time_t{time_tthe_time=time((time_t*)0*調用time系統(tǒng)調用*/printf("Thetimeis%ld\n",the_time);}從格林尼治時間1970年1月1日0:00開始到現(xiàn)在的秒數(shù)在IntelCPU中,這個指令由中斷0x80在ARM中,這個指令是SWIENTRY(vector_swi)<entry-common.S>。這程工作原理(應用#define "swi\t" NR_##name工作原理(應用#define "swi\t" NR_##nameintopen(constchar*pathname,int{。。。 。。。}轉化intopen(constchar*pathname,int{。。。swi\t 。。。}工作原理(內核入口arch/arm/kernel/entry-adrtbl,@load工作原理(內核入口arch/arm/kernel/entry-adrtbl,@loadsyscalltablepc,[tbl,scno,lsl@callsys_*#include工作原理(內核入口/*arch/arm/kernel/calls.S工作原理(內核入口/*arch/arm/kernel/calls.S/*0/*5………………/*36033更新頭文件在kernel/sys.casmlinkage在kernel/sys.casmlinkageintsysMul(inta,int{intc=a*b;}/*asmlinkage:在arch/arm/include/asm/unistd.h中在arch/arm/include/asm/unistd.h中NR_sysMul3.在3.在arch/arm/kernel/calls.S#include#include#include#include{intresult=syscall(361,1,printf("result=",}Linux進程Linux進程LinuxLinux進程Linux進程Linux系統(tǒng)Proc文件Linux內核定什么是定什么是proc文件系統(tǒng)/proc/meminfo結論:proc文件系統(tǒng)是一種在用戶態(tài)Proc文Proc文特每特每個文件都規(guī)定了嚴格的可讀?可寫?哪個用戶可讀?哪個可以用文本編輯程序讀?。╩o命令,at命程序等等)不僅可以有文件,還可以有子目可以自己編寫程序添加一個/proc目錄下文件的內容都是動態(tài)創(chuàng)建的,并不存在于磁盤structproc_dir_entry{structproc_dir_entry{。。read_proc_t}structproc_dir_entry*structproc_dir_entry*create_proc_entry(const*name,mode_tmode,structproc_dir_entrynamemodeparentstructproc_dir_entrystructproc_dir_entry*proc_mkdir(constcharproc_dir_entry創(chuàng)建proc參數(shù)nameparentvoidvoidremove_proc_entry(constcharproc_dir_entrynameparent為了能讓用戶讀寫添加的proc為了能讓用戶讀寫添加的procintread_func(charintread_func(char*buffer,char**stat,off_toff,intcount,int*peof,void*data)buffer把要返回給用戶的信息寫在buffer大不超過statoffcountpeof:讀到文件尾時,需要把*peof置dataintwrite_func(structfileintwrite_func(structfile*file,const*buffer,unsignedlongco
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO 20679:2025 EN Ships and marine technology - Marine environment protection - Testing of ship biofouling in-water cleaning systems
- 我的家鄉(xiāng)敘事課程設計
- 弦樂小夜曲課程設計
- 中西醫(yī)執(zhí)業(yè)醫(yī)師模擬試卷16
- 礦井灌漿設計課程設計
- 站姿坐姿課程設計
- 花藝烘焙課程設計
- 藥品驗收入門課程設計
- 互聯(lián)網行業(yè)安全管理實踐
- 領導班子與教學院校協(xié)調計劃
- 儲能系統(tǒng)技術服務合同
- GB/T 1094.7-2024電力變壓器第7部分:油浸式電力變壓器負載導則
- 電大西方行政學說
- 2024-2025學年人教版數(shù)學七年級上冊期末復習卷(含答案)
- 2024年度中國PE、VC基金行業(yè)CFO白皮書
- 2023年南京市江寧區(qū)招聘教師考試真題
- 《中國民族史》重點筆記(期末)
- 中南大學《物聯(lián)網原理及應用》2022-2023學年第一學期期末試卷
- 抓斗課件教學課件
- 第三方物流供應商準入與考核制度
- 基于Python的去哪兒網酒店數(shù)據采集與分析
評論
0/150
提交評論