溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

操作系統(tǒng)筆記之進程與線程

發(fā)布時間:2020-08-05 20:28:16 來源:網(wǎng)絡 閱讀:1426 作者:hiubuntu 欄目:系統(tǒng)運維

背景

操作系統(tǒng)設計的7個主題:
1. 進程描述和控制
2. 內(nèi)存管理
3. 調(diào)度
4. I/O和文件管理
5. 并發(fā)和分布式系統(tǒng)
6. 嵌入式系統(tǒng)
7. 安全

操作系統(tǒng)利用一個或多個處理器的硬件資源,為系統(tǒng)用戶提供一組服務,還代表用戶來管理輔助存儲器和I/O設備。

CPU中斷的分類:
1. 程序中斷
2. 時鐘中斷
3. I/O中斷
4. 硬件失效中斷

DMA:直接內(nèi)存存取

概述

典型計算機系統(tǒng)的三個重要接口:
1. 指令系統(tǒng)體系結(jié)構(gòu)ISA
2. 應用程序二進制接口ABI
3. 應用程序編程接口API

進程

三個部分:
1. 一段可執(zhí)行的程序,
2. 程序所需要的相關(guān)數(shù)據(jù)(變量,工作空間,緩沖區(qū)等),
3. 程序的執(zhí)行上下文,又稱進程狀態(tài)。上下文包括操作系統(tǒng)管理進程和處理器正確執(zhí)行進程所需要的所有信息,包括:

1. 處理器寄存器的內(nèi)容,2. 進程的優(yōu)先級

多線程技術(shù)

把執(zhí)行一個應用程序的進程劃分成可以同時運行的多個線程。
線程
可分派的工作單元,他包括處理器上下文環(huán)境和棧中自己的數(shù)據(jù)區(qū)域。順序執(zhí)行,并且可中斷。
進程
一個或多個線程和 相關(guān)系統(tǒng)資源的集合。

多線程切換涉及的處理器開銷比不同進程間切換開銷少。

微軟

81年基于MS-DOS開發(fā)的window 3.0, 雇傭戴夫.卡特勒89年基于VAX/VMS操作系統(tǒng)開發(fā)NT內(nèi)核。

UNix

主要的內(nèi)核組件的簡要介紹:

  • 信號(Signal):內(nèi)核通過信號通知進程。

  • 系統(tǒng)調(diào)用(System Call):進程通過系統(tǒng)調(diào)用來請求系統(tǒng)服務。一共有幾百個系統(tǒng)調(diào)用,可以粗略的分為6類:文件系統(tǒng),進程,調(diào)度,進程間通信,套接字和其他。

  • 進程和調(diào)度器:創(chuàng)建、管理、調(diào)度進程。

  • 虛擬內(nèi)存

  • 文件系統(tǒng)

  • 網(wǎng)絡協(xié)議

  • 字符設備驅(qū)動

  • 塊設備驅(qū)動

  • 網(wǎng)絡設備驅(qū)動

  • 陷阱和錯誤

  • 物理內(nèi)存

  • 中斷

Linux Vserver

chroot提供文件系統(tǒng)隔離。
chcontext分配一個新的安全上下文,提供進程隔離
chbind把產(chǎn)生的進程及其子進程鎖定到一個特定的IP地址,提供網(wǎng)絡隔離。
capability,提供根的隔離。

進程

進程可以唯一的表征為以下元素:

  • 標識符

  • 狀態(tài)

  • 優(yōu)先級

  • 程序計數(shù)器

  • 內(nèi)存指針

  • 上下文數(shù)據(jù)

  • I/O狀態(tài)信息

  • 記賬信息
    一個處理器在任何時間最多只有一個進程在執(zhí)行。

進程的五個狀態(tài):
- 新建,環(huán)境準備,但未進入內(nèi)存
- 就緒
- 運行
- 阻塞/等待,I/O阻塞,等待資源或另一個進程信息
- 退出
- 針對虛擬內(nèi)存的:掛起態(tài)

操作系統(tǒng)維護四種不同類型的表

  • 內(nèi)存 :跟蹤內(nèi)外存

  • I/O: I/O狀態(tài)

  • 文件:文件狀態(tài),大部分狀態(tài)可能由文件管理系統(tǒng)維護和使用

  • 進程:

Unix的進程狀態(tài)

  • 用戶態(tài)運行

  • 內(nèi)核態(tài)運行

  • 就緒,駐留在內(nèi)存

  • 睡眠,駐留在內(nèi)存,等待某時間,一種阻塞態(tài)

  • 就緒,被交換

  • 睡眠,被交換

  • 被搶占 進程從內(nèi)核態(tài)返回到用戶態(tài),但是被內(nèi)核搶占

  • 創(chuàng)建

  • 僵死

Unix中有兩個獨特進程,進程0是系統(tǒng)啟動時創(chuàng)建,預定義的數(shù)據(jù)結(jié)構(gòu),是交換進程,啟動時進程0產(chǎn)生進程1,進程1稱為初始進程。
Unix中創(chuàng)建進程是通過內(nèi)核系統(tǒng)調(diào)用fork()實現(xiàn)的,fork請求時,系統(tǒng)執(zhí)行以下功能:
1. 為新進程在進程表中分配一個空項。
2. 為紫禁城賦一個唯一的進程標識符
3. 聲場一個父進程上下文的邏輯副本,不包括共享內(nèi)存區(qū)
4. 增加父進程所有的文件的計數(shù)器
5. 把子進程置為就緒態(tài)
6. 向父進程返回子進程的進程號,對子進程返回零。

所有操作在父進程的內(nèi)核態(tài)下完成。

線程

在之前提出的進程概念包含兩個特點:

  • 資源所有權(quán):一個進程包括一個存放進程映像的虛擬地址空間。

  • 調(diào)度/執(zhí)行:一個進程沿著可以通過一個或多個程序的執(zhí)行路徑執(zhí)行。一個進程具有一個執(zhí)行狀態(tài)和一個被分配的優(yōu)先級。它是一個可被操作系統(tǒng)調(diào)度和分派的實體。
    為了區(qū)分這兩個特點,分派的單位成為線程或輕量級進程,而擁有資源所有權(quán)的單位稱為進程process或task。

多線程

指在單個進程內(nèi)支持多個并發(fā)執(zhí)行路徑的能力。
進程是操作系統(tǒng)的最小調(diào)度單位,線程是CPU的最小調(diào)度單位。

線程的優(yōu)點:

  • 線程創(chuàng)建比Unix中進程創(chuàng)建快10倍。

  • 終止線程比進程快

  • 線程切換比進程塊

  • 縣城提高了不同執(zhí)行程序間通信的效率。進程間通信需要內(nèi)核的介入,同進程中的線程共享內(nèi)存和文件。

多線程的特性在多處理器機器上才能生效,單處理器中主要簡化在邏輯上完成若干項不同功能的程序的結(jié)構(gòu)。

線程的分類

線程可以分為兩大類:
1. 用戶級線程
2. 內(nèi)核級縣城

操作系統(tǒng)筆記之進程與線程
用戶級線程

有關(guān)線程管理都有應用程序完成,內(nèi)核意識不到。任何應用程序都可以使用線程庫pthread設計多線程程序。該程序在執(zhí)行時從但縣城開始運行被分配給一內(nèi)核管理的進程。該程序的線程狀態(tài)受限于內(nèi)核進程狀態(tài)。由此其線程狀態(tài)也將影響進程狀態(tài)。
優(yōu)點:
1. 該程序所有線程在用戶地址空間中,無需內(nèi)核態(tài)特權(quán),不需切換狀態(tài)。
2. 自定義調(diào)度算法
3. 跨系統(tǒng),可移植
缺點:
1. 線程阻塞導致進程阻塞
2. 無法使用多核性能,內(nèi)核一次只把一個進程分配給一個處理器

內(nèi)核級線程

所有線程管理都有內(nèi)核完成。
優(yōu)點:
1. 同時調(diào)度線程到多核處理器
2. 進程中一個線程堵塞時,內(nèi)核可以調(diào)度該進程中另外一個線程
缺點:
1. 把控制從一個線程傳到同一個進程的另外一個線程時,需要內(nèi)核的狀態(tài)切換。

多核與多線程

多處理器系統(tǒng)中使用線程的例子:

  • 前臺和后臺工作:電子表格處理,一個線程顯示并讀取輸入,一個線程執(zhí)行命令更新表格。

  • 異步處理:

  • 執(zhí)行速度:在一個線程I/O被阻塞時,另外一個線程可以繼續(xù)運行。

Linux的進程和線程管理

Linux的進程或任務有一個task_struct數(shù)據(jù)結(jié)構(gòu)表示。包含了以下信息:

  • 狀態(tài)

  • 調(diào)度信息

  • 標識符

  • 進程間通信

  • 鏈接

  • 時間和計時器

  • 文件系統(tǒng)

  • 地址空間

  • 處理器專用上下文

進程的執(zhí)行狀態(tài)有:

  • 運行

  • 可中斷,阻塞狀態(tài),此狀態(tài)等待一個事件(如I/O操作的結(jié)束),一個可用資源或另一個進程的信號

  • 不可中斷,阻塞狀態(tài),此狀態(tài)等待一個硬件條件,不接受任何信號

  • 停止

  • 僵死

Linux中復制當前進程的屬性創(chuàng)建一個新進程。使用clone命令代替fork命令創(chuàng)建進程。沒有為線程單獨定義數(shù)據(jù)結(jié)構(gòu),當兩個進程共享相同的虛擬內(nèi)存時,它們可以當作是一個進程中的線程。clone()調(diào)用為每個進程創(chuàng)建獨立的??臻g,共享同一內(nèi)存空間。
當Linux內(nèi)核執(zhí)行進程切換時,它將檢查當前進程的頁目錄地址是否和將被調(diào)度的進程相同,如果相同,此時上下文切換僅僅是從代碼的一處跳到代碼的另外一處。

總結(jié)

某些操作系統(tǒng)區(qū)分進程和線程的概念,前者涉及資源的所有權(quán),后者涉及程序執(zhí)行。
用戶級的線程對操作系統(tǒng)是未知的,它們在用戶空間的線程庫創(chuàng)建并管理,此時線程的切換不需要狀態(tài)轉(zhuǎn)換,非常高效,但一個進程一次只有一個用戶級線程可以執(zhí)行,如果某一個線程阻塞,整個進程都被阻塞。
內(nèi)核級線程由內(nèi)核維護,由此同一個進程中的線程可以在多個處理器上并發(fā)執(zhí)行,不會被某一個線程阻塞而阻塞整個進程,但當線程切換時需要進行模式轉(zhuǎn)換。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI