免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Linux進(jìn)程編程1
1.為什么計算機操作系統(tǒng)要引進(jìn)進(jìn)程
       在操作系統(tǒng)中引入進(jìn)程的目的是為了使多個程序并發(fā)執(zhí)行 ,以改善資源利用率及提高系統(tǒng)吞吐量。

2.進(jìn)程的概念
       進(jìn)程是程序的一次執(zhí)行,進(jìn)程是擁有資源的最小單位和調(diào)度單位(在引入線程的操作系統(tǒng)中,線程是最小的調(diào)度單位)
       進(jìn)程又稱任務(wù),是一個動態(tài)的使用系統(tǒng)資源、處于活動狀態(tài)的應(yīng)用程序。

3.進(jìn)程由什么組成
       進(jìn)程由進(jìn)程控制塊(PCB),數(shù)據(jù),程序3部分組成。其中PCB是進(jìn)程的靈魂。
       進(jìn)程控制塊PCB中包含了進(jìn)程的所有信息,主要包括進(jìn)程PID、進(jìn)程所占有的內(nèi)存區(qū)域、文件描述符和進(jìn)程環(huán)境等信息。

4.進(jìn)程的狀態(tài)
       進(jìn)程的三種最基本的狀態(tài)是:運行態(tài)(running),等待態(tài)(readying), 阻塞態(tài)(block)
       #define TASK_RUNNING 0 //運行狀態(tài)
       #define TASK_INTERRUPTIBLE 1 //等待狀態(tài)(可被中斷)
       #define TASK_UNINTERRUPTIBLE 2  //等待狀態(tài)(不可被中斷)
       #define TASK_STOPPED 4  //停止?fàn)顟B(tài)
       #define TASK_ZOMBIE 8  //睡眠狀態(tài)
       #define TASK_DEAD 16  //僵死狀態(tài)

5.進(jìn)程和程序的區(qū)別
       進(jìn)程是動態(tài)的,程序是靜態(tài)的。
       進(jìn)程時運行中的程序,程序是一些保存在硬盤上的可執(zhí)行的代碼。

6.進(jìn)程的優(yōu)缺點
優(yōu)點
       使多個程序并發(fā)執(zhí)行
缺點
       程序并發(fā)執(zhí)行時付出了巨大的時空開銷,每個進(jìn)程在進(jìn)行切換時身上帶了過多的“累贅”導(dǎo)致系統(tǒng)效率降低。
      于是人們?yōu)榱私鉀Q這個缺點想到讓進(jìn)程在并行時不擁有資源---從而引入了線程的概念:即線程本身不擁有資源或者是很少的資源,進(jìn)程只是擁有資源的基本單位,線程是調(diào)度的基本單位

       引入線程減少程序并發(fā)執(zhí)行時所付出的時空開銷,使操作系統(tǒng)具有更好的并發(fā)性。

7.進(jìn)程的表示
       在 Linux 內(nèi)核內(nèi),進(jìn)程是由相當(dāng)大的一個稱為 task_struct 的結(jié)構(gòu)表示的。此結(jié)構(gòu)包含所有表示此進(jìn)程所必需的數(shù)據(jù),此外,還包含了大量的其他數(shù)據(jù)用來統(tǒng)計(accounting)和維護與其他進(jìn)程的關(guān)系(父和子)。對 task_struct 的完整介紹超出了本文的范圍,以下代碼給出了 task_struct 的一小部分。這些代碼包含了本文所要探索的這些特定元素。task_struct 位于 ./linux/include/linux/sched.h。

task_struct 的一小部分
  1. struct task_struct {
  2.     volatile long state;
  3.     void *stack;
  4.     unsigned int flags;

  5.     int prio, static_prio;

  6.     struct list_head tasks;

  7.     struct mm_struct *mm, *active_mm;

  8.     pid_t pid;
  9.     pid_t tgid;

  10.     struct task_struct *real_parent;

  11.     char comm[TASK_COMM_LEN];

  12.     struct thread_struct thread;

  13.     struct files_struct *files;
  14.     ...
  15. };
詳見《Linux2.25進(jìn)程結(jié)構(gòu)task_struct

8.進(jìn)程分配
       Linux 內(nèi)所有進(jìn)程的分配有兩種方式。第一種方式是通過一個哈希表,由 PID 值進(jìn)行哈希計算得到;第二種方式是通過雙鏈循環(huán)表。循環(huán)表非常適合于對任務(wù)列表進(jìn)行迭代。由于列表是循環(huán)的,沒有頭或尾;但是由于 init_task 總是存在,所以可以將其用作繼續(xù)向前迭代的一個錨點。讓我們來看一個遍歷當(dāng)前任務(wù)集的例子。
       任務(wù)列表無法從用戶空間訪問,解決方法詳見《文獻(xiàn)3》。

9.程序轉(zhuǎn)化為進(jìn)程
通常需要經(jīng)過以下步驟:
       內(nèi)核將程序讀入內(nèi)存,為程序分配內(nèi)存空間
       內(nèi)核為該進(jìn)程分配進(jìn)程標(biāo)識符(PID)和其他資源
       內(nèi)核為該進(jìn)程保存PID及相應(yīng)的狀態(tài)信息,把進(jìn)程放到運行隊列中等待執(zhí)行。程序轉(zhuǎn)化為進(jìn)程后就可以 被操作系統(tǒng)的調(diào)度程序執(zhí)行了。

10.進(jìn)程的內(nèi)存映像
       進(jìn)程的內(nèi)存映像是指內(nèi)核在內(nèi)存中如何存放可執(zhí)行程序文件 。在將程序轉(zhuǎn)化為進(jìn)程的過程中,操作系統(tǒng)將可執(zhí)行程序由硬盤復(fù)制到內(nèi)存中。
linux下程序映像的一般布局如下:(從低地址到高地址)
       1>代碼段:代碼段是只讀的,可被多個進(jìn)程共享。
       2>數(shù)據(jù)段: 存儲已被初始化的變量,包括全局變量和已被初始化的靜態(tài)變量。
       3>未初始化數(shù)據(jù)段:存儲未被初始化的靜態(tài)變量,它也被稱為bss段
       4>堆:用于存放程序運行中動態(tài)分配的變量
       5>棧:用戶函數(shù)調(diào)用,保存函數(shù)的返回地址,函數(shù)的參數(shù),函數(shù)內(nèi)部定義的局部變量。


參考文獻(xiàn)
1.Linux進(jìn)程學(xué)習(xí)總結(jié).http://www.linuxidc.com/Linux/2011-02/32125.htm
2.linux獲取進(jìn)程信息函數(shù).http://blog.csdn.net/jpcfei/article/details/6288467
3.Linux 進(jìn)程管理剖析.http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux2.4內(nèi)核說明文檔(進(jìn)程與中斷管理篇)
一次fork引發(fā)的慘案!
zz關(guān)于linux線程
干貨
圖說Linux進(jìn)程
linux 線程 進(jìn)程經(jīng)典文章
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服