深入理解linux核心第三版(二)程序

2022-10-08 20:33:19 字數 1205 閱讀 2709

程序是程式的執行的乙個例項。從核心的角度看,程序的目的就是擔當分配系統資源(cpu時間片和記憶體)的實體。

普通執行緒,指的是,在乙個應用中,有多個執行緒在執行。但是cpu對該應用的排程是以程序為單位進行排程的,這個程序中的多個執行緒不能夠併發的執行。

輕量級程序實現多執行緒,情況則不一樣,在cpu分配時間片時,各個輕量級程序和其他程序一樣,都有相同的機會獲得cpu時間片。這樣乙個程序中的多個執行緒才能夠真正實現併發執行。

linux使用輕量級程序對多執行緒應用提供支援。每乙個執行緒(輕量級程序)都可以由核心獨立排程。

核心執行緒:執行緒切換由核心控制。執行緒參與cpu時間片的分配,windows系統就是核心執行緒。

使用者執行緒:執行緒切換由程序自己控制,不需要核心的參與,核心感知不到多執行緒的存在,只能感知到程序,所以cpu時間片切換是按照程序來切換的。乙個執行緒的阻塞將導致整個程序的阻塞。

使用者執行緒執行在乙個中間系統上,也就是說執行在乙個程序上。比如python中的執行緒就是使用者級執行緒,它執行在python程序中,作業系統只能感知到python程序的存在,感知不到執行緒的存在,所以python執行緒不能充分利用多核cpu的優勢。而j**a則不一樣,j**a天然支援多執行緒,因為j**a建立執行緒的時候,實際上是呼叫核心clone()函式,傳遞特定引數使其建立的是輕量級程序,因此,j**a多執行緒直接參與cpu時間片的分配,且能充分利用多核cpu的優勢

為了描述和控制程序的執行,我們引入pcb(程序控制塊)。它是程序管理和控制最重要的資料結構。每乙個程序均有乙個pcb,在建立程序時,建立pcb,並伴隨著程序的整個生命週期。在linux中我們用結構體task_struct來表示pcb,也叫程序描述符。程序描述符包含了程序所有相關資訊,所以它相當複雜,見下圖

程序描述符的state欄位描述了程序當前所處的狀態。

可執行狀態:程序要麼在cpu上執行,要麼等待獲取cpu執行

可中斷等待狀態:程序被掛起,等待某個條件為真

不可中斷等待狀態:與可中斷等待狀態類似,但是有乙個例外,把訊號傳遞到睡眠程序不能改變它的狀態。

暫停狀態:程序的執行被暫停

跟蹤狀態:比如程序受到debugger程序的監控,則處於跟蹤狀態

僵死狀態:程序的執行被終止,但是還要等父程序返回一些資訊

死亡狀態:僵死狀態中,父程序處理完,程序被標記為exit_dead狀態。

待補充

程序 深入理解Linux核心(第三版)

寫在前面的話,因為只看不思考真的很睏,所以把一些疑惑和重要的地方記下來。1.程序與執行緒的區別 程序是系統進行資源分配和排程的乙個獨立單位.執行緒是程序的乙個實體,是cpu排程和分派的基本單位。2.父子程序 共享含有程式 的頁,但是各自擁有獨立的資料拷貝,因此子程序對乙個記憶體單元的修改對父程序是不...

UnixShell程式設計 第三版 二章

這本書寫的真的很好,讓人欲罷不能的讀下去。1,可以簡單的將命令看做類似函式的東西,而後面跟的是所傳的引數。echo hello word hi 將字串hello wrod 寫入檔案hi。2.ed 像vim,乙個文字編輯工具。正則我已做過筆記,這裡略過了。3,cut 從資料或檔案中減出自己想要的內容。...

Python核心程式設計 第三版 練習

目錄 1.6 練習 1 16 1 17 1 16 為gendata.py更新 使資料直接輸出一redata.txtm而不是螢幕。user bin env python from random import randrange,choice from string import ascii lower...