官术网_书友最值得收藏!

2.4.1 任務(wù)數(shù)據(jù)結(jié)構(gòu)

內(nèi)核程序通過(guò)進(jìn)程表對(duì)進(jìn)程進(jìn)行管理,每個(gè)進(jìn)程在進(jìn)程表中占有一項(xiàng)。在Linux系統(tǒng)中,進(jìn)程表項(xiàng)是一個(gè)task_struct任務(wù)結(jié)構(gòu)指針。任務(wù)數(shù)據(jù)結(jié)構(gòu)定義在頭文件sched.h中。有些書(shū)上稱(chēng)其為進(jìn)程控制塊(Process Control Block,PCB)或進(jìn)程描述符(Process Descriptor,PD)。其中保存著用于控制和管理進(jìn)程的所有信息。主要包括進(jìn)程當(dāng)前運(yùn)行的狀態(tài)信息、信號(hào)、進(jìn)程號(hào)、父進(jìn)程號(hào)、運(yùn)行時(shí)間累計(jì)值、正在使用的文件和本任務(wù)的局部描述符以及任務(wù)狀態(tài)段信息。該結(jié)構(gòu)每個(gè)字段的具體含義參見(jiàn)頭文件sched.h。

當(dāng)一個(gè)進(jìn)程在執(zhí)行時(shí),CPU的所有寄存器中的值、進(jìn)程的狀態(tài)以及堆棧中的內(nèi)容被稱(chēng)為該進(jìn)程的上下文。當(dāng)內(nèi)核需要切換(switch)至另一個(gè)進(jìn)程時(shí),它需要保存當(dāng)前進(jìn)程的所有狀態(tài),即保存當(dāng)前進(jìn)程的上下文,以便在再次執(zhí)行該進(jìn)程時(shí),能夠恢復(fù)到切換時(shí)的狀態(tài)執(zhí)行下去。在Linux中,當(dāng)前進(jìn)程上下文均保存在進(jìn)程的任務(wù)數(shù)據(jù)結(jié)構(gòu)中。在發(fā)生中斷時(shí),內(nèi)核就在被中斷進(jìn)程的上下文中,在內(nèi)核態(tài)下執(zhí)行中斷服務(wù)例程。但同時(shí)會(huì)保留所有需要用到的資源,以便中斷服務(wù)結(jié)束時(shí)能恢復(fù)被中斷進(jìn)程的執(zhí)行。

主站蜘蛛池模板: 博野县| 招远市| 大邑县| 安化县| 巧家县| 峡江县| 平罗县| 巴林右旗| 和平县| 呼图壁县| 竹山县| 轮台县| 拉萨市| 东丽区| 潞西市| 繁昌县| 梓潼县| 松桃| 翁牛特旗| 秦安县| 内丘县| 行唐县| 丹凤县| 达拉特旗| 隆昌县| 梅州市| 连山| 崇义县| 仁寿县| 达日县| 梁山县| 盈江县| 且末县| 习水县| 荆门市| 湘西| 阿城市| 玛多县| 金寨县| 惠水县| 南部县|