以下內容**於
上面的面試題可以看出,其實都是一回事,只是換了一種提問方式,只要我們能掌握核心要點,隨便面試官怎麼提問,我們都能輕鬆應對!所以我們可以說「程序」是包含「執行緒」的,「執行緒」是「程序」的乙個子集。
程序(process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。 在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。程式是指令、資料及其組織形式的描述,程序是程式的實體。
執行緒(thread)是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。
我們簡單總結下:程序:指在系統中正在執行的乙個應用程式;程式一旦執行就是程序;程序——資源分配的最小單位。
執行緒:系統分配處理器時間資源的基本單元,或者說程序之內獨立執行的乙個單元執行流。執行緒——程式執行的最小單位。
「記憶體」:「檔案/網路控制代碼」:
它們是所有的程序所共有的,例如開啟同乙個檔案,去搶同乙個網路的埠這樣的操作是被允許的。
「執行緒」:
接下來,我們就要介紹一下我們的「執行緒」有關知識
2.2.1 棧:
我們通常都是說呼叫堆疊,其實這裡的堆是沒有含義的,呼叫堆疊就是呼叫棧的意思。
那麼我們的棧裡面有什麼呢?
我們從主線程的入口main函式,會不斷的進行函式呼叫,
每次呼叫的時候,會把所有的引數和返回位址壓入到棧中。
2.2.2 pc:
program counter 程式計數器,作業系統真正執行的是乙個個的執行緒,
而我們的程序只是它的乙個容器。pc就是指向當前的指令,而這個指令是放在記憶體中。
每個執行緒都有一串自己的指標,去指向自己當前所在記憶體的指標。
計算機絕大部分是儲存程式性的,說的就是我們的資料和程式是儲存在同一片記憶體裡的
這個記憶體中既有我們的資料變數又有我們的程式。所以我們的pc指標就是指向我們的記憶體的。
2.2.2.1 緩衝區溢位
例如我們經常聽到乙個漏洞:緩衝區溢位
這是什麼意思呢?
例如:我們有個地方要輸入使用者名稱,本來是用來存資料的地方。
然後黑客把資料輸入的特別長。這個長度超出了我們給資料儲存的記憶體區,這時候跑到了
我們給程式分配的一部分記憶體中。黑客就可以通過這種辦法將他所要執行的**
寫入到使用者名稱框中,來植入進來。我們的解決方法就是,用使用者名稱的長度來限制不要超過
使用者名稱的緩衝區的大小來解決。
2.3 tls:
全稱:thread local storage
之前我們看到每個程序都有自己獨立的記憶體,這時候我們想,我們的執行緒有沒有一塊獨立的記憶體呢?答案是有的,就是tls。
可以用來儲存我們執行緒所獨有的資料。
可以看到:執行緒才是我們作業系統所真正去執行的,而程序呢,則是像容器一樣他把需要的一些東西放在了一起,而把不需要的東西做了一層隔離,進行隔離開來。
通過tcp/ip的埠來實現
執行緒的通訊就比較簡單,有一大塊共享的記憶體,只要大家的指標是同乙個就可以看到各自的記憶體。
1.程序要分配一大部分的記憶體,而執行緒只需要分配一部分棧就可以了.
2.乙個程式至少有乙個程序,乙個程序至少有乙個執行緒.
3.程序是資源分配的最小單位,執行緒是程式執行的最小單位。
4.乙個執行緒可以建立和撤銷另乙個執行緒,同乙個程序中的多個執行緒之間可以併發執行.
理解作業系統之程序和執行緒
在作業系統中,設定了程序和執行緒的概念去描述程式併發執行邏輯。本文屬於研究程序和執行緒的入門級文章。主要從以下五個方面介紹程序以及執行緒的相關概念。一丶程序和執行緒的定義 二丶作業系統中對程序和執行緒的描述 1.程序和執行緒實體描述程序和執行緒均是os中的執行實體,都是排程和分派的基本單位。2.程序...
作業系統 程序和執行緒
從處理機只能執行單一程式,到處理機可以通過不停的切換所執行的程式,達到看似同時處理多個程序的過程,經歷了很長一段時間。從單道程式設計到多道程式設計,主要解決了在執行過程中需要頻繁等待資源或者i o操作的問題,因為這類操作通常都是很耗時間的 相對於cpu的快速執行來說 進而提高了整個cpu執行的效率和...
初探 作業系統之程序執行緒
2016.11.1補充 1.18 fork後,子程序繼承父程序的什麼,父 子程序區別?執行緒 引入的狀態 狀態間的轉換 核心模式到使用者模式 將當前工作目錄更改為根目錄 因為從父程序繼承過來的目錄可能在乙個掛載的檔案系統中,如果不更改為根目錄,則所掛載的檔案系統不能解除安裝 關閉不需要的檔案描述符 ...