操作系統-進程管理4(線程)

操作系统-进程管理(线程)

  1. 线程
  • 线程的基本概念

    线程是比进程更小的、能够独立运行的基本单位,线程比进程能更好地提高程序的并行执行速度,充分利用多处理机的优越性。引用线程主要是为了提高系统的处理效率,减少处理机的空转时间和进行调度时因保护CPU现场浪费的时间。

    线程是进程中执行运算的最小单位,即执行处理机调度的基本单位。在引入线程的操作系统中,可以在一个进程内部进行线程的切换。

    进程是资源分配的基本单位,同一进程的所有线程共享该进程的所有资源。线程是分配处理机的基本单位,真正在处理机上运行的是线程。

    Linux系统中没有区分进程和线程,它们都使用相同的描述方法,使用相同的调度和管理策略。

  • 线程的状态与转换操作

    线程只有三种基本状态:执行、阻塞和就绪。针对线程的三种状态,存在五种操作来转换线程的状态。

    • 派生(Spawn)

      线程在进程中派生出来,也可再派生线程。用户可以通过相关的系统调用来派生自己的线程。Linux系统中,库函数clonc()和create_thread()分别用来派生不同执行模式的线程。

      一个新派生出的线程具有相应的数据结构指针和变量,这些指针和变量作为寄存器上下文放在本线程的寄存器和堆栈中。新派生出来的线程被放入就绪队列。

    • 调度(Schedule)

      选择一条就绪线程进入执行状态。

    • 阻塞(Block)

      如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。阻塞时,寄存器上下文,程序计数器,及堆栈指针都会得到保证。

    • 激活(Unblock)

      如果阻塞线程所等待的事件发生,则该线程被激活进入就绪队列。

    • 结束(Finish)

      一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放。

  • 引入线程的好处
    • 易于调度。由于线程只作为独立调度的基本单位,同一进程的多个线程共享进程的资源,所以进程易于切换。
    • 提高了系统的效率。通过线程可以有效地实现并发性,进程可创建多个线程执行同一个程序的不同部分。
    • 创建一个线程比创建一个进程的开销少,创建速度快。
  • 多线程的实现

    线程分为用户级线程和内核级线程(也称核心级线程)。

    • 用户级线程ULT(User Level Thread)。是由用户应用程序建立的,并由用户应用程序进行调度和管理。操作系统内核并不知道这些线程的存在,只对进程进行管理。因此这种线程与内核无关。

      ULT的优点如下:

      (1)应用程序中线程开关的时空开销远小于内核级线程的开销。

      (2)线程的调度算法与操作系统的调度算法无关。

      (3)因为与操作系统内核无关,所以适用于任何操作系统。

      缺点为:

      (1)在一个典型的操作系统中,有许多的系统请求正在被阻塞着,因此当一个线程执行一个系统请求时,不禁本线程被阻塞,该进程所有线程都被阻塞。

      (2)在该方法的系统中,因为每个进程每次只能由一个线程在CPU运行,因此无法利用多处理器的优点。

    • 内核级线程KLT(Kernel Level Thread)。内核级线程中所有线程的创建、管理与调度都由操作系统内核完成。一个应用程序可以按多线程的方式编写程序,当它提交给一个多线程的操作系统执行时,内核会为它创建一个进程和一个线程,线程可以创建新的线程。操作系统内核会为应用程序提供相应的系统调用和应用程序接口,以便用户程序可以创建、执行和撤销线程。Windows NT便是此类。

      内核级线程优点:

      (1) 内核可调度一个进程中的多个线程,使其在多个处理机上并行运行,从而提高系统的效率。

      (2) 一个线程被阻塞时,其它线程仍可运行。

      (3) 内核本身可以以线程方式运行

      缺点:

      由于线程调度程序运行在内核态,而用户程序运行在内核态,因此同一进程中的线程切换要经过从用户态到内核态,再从内核态到用户态的两次模式的切换。于是催生了用户级线程与内核级线程相结合的模式

  • Linux系统的线程

    Linux的内核级线程也称为系统级线程。Linux可以同时支持内核级线程和用户级线程。大多数操作系统对于线程单独定义数据结构,采用单独的线程管理方式。而Linux将线程定义为“执行上下文”,它实际上只是进程的另外一个执行上下文而已,和进程享有相同的表示、管理和调度方式。执行上下文的定义可参考下面这个

    用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递 很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。

    那么什么是内核空间用户空间呢?它们的一个主要的区别就是两者所能访问到的资源不同。

    内核空间具有最高的权限,可以访问到所有资源。而用户空间只能访问受限权限,不能直接访问内存等硬件设备,必须通过系统调入到内核中才能访问这些特权资源。进程既可以在用户空间运行,又可以在内核空间中运行。进程在用户空间运行时,被称为进程的用户态,而陷入内核空间的时候,被称为进程的内核态。

    要想从用户态转到内核态,需要通过系统调用来完成。

    比如,当我们查看文件内容时,就需要多次系统调用来完成:首先调用 open() 打开文件,然后调用 read() 读取文件内容,并调用 write() 将内容写到标准输出,最后再调用 close() 关闭文件。

    在这个过程中就发生了 CPU 上下文切换,整个过程是这样的:
    1、保存 CPU 寄存器里原来用户态的指令位
    2、为了执行内核态代码,CPU 寄存器需要更新为内核态指令的新位置。
    3、跳转到内核态运行内核任务。
    4、当系统调用结束后,CPU 寄存器需要恢复原来保存的用户态,然后再切换到用户空间,继续运行进程。

    所以,一次系统调用的过程,其实是发生了两次 CPU 上下文切换。(用户态-内核态-用户态)



    本文引用部分的文字来自知乎文章:一文让你明白CPU上下文切换

原文地址:https://www.cnblogs.com/lunar-ubuntu/p/12233519.html

时间: 2024-08-01 19:38:21

操作系統-進程管理4(線程)的相关文章

操作系統3-內存管理(分區存儲和頁式存儲)

操作系統3-內存管理(分區存儲和頁式存儲) 2. 分區存儲管理方式 分區管理的基本思想是:將內存空間氛圍一個或若干個連續的區域,稱為分區.每個分區可以存放一個獨立的用戶程序.分區的特點是一個程序可以連續地加載內存. 分區可以分為:單一分區.固定分區.可變分區和重定位分區. 2.1 單道程序的連續分配 單道程序的連續分配方式將內存分為系統區和用戶區,只能用於單用戶.單任務的操作系統. 系統區 系統區僅供操作系統使用,一般駐留在內存的低地址區,其中包括中斷向量.中斷向量是操作系統的核心功能模塊加載內

操作系統3-內存管理(頁面置換算法)

操作系統3-內存管理(頁面置換算法) 7. 頁面置換算法 在上一節講過, 換入換出頁面要根據特定的算法來執行, 這種算法就是頁面置換算法. 不合適的算法可能會使系統發生抖動,所謂抖動即指剛剛換出的頁面又要換回來,換回來不久又要換出去,這樣就導致系統的大部分工作時間都花在了頁面調度上,導致效率不高. 下面是幾種常見的頁面置換算法: 7.1 先入先出頁面置換算法 顧名思義,根據隊列的數據結構的思想,總是將內存存在最久的頁面先換出. 7.2 最近最久未使用頁面置換算法(Least Recently U

操作系統-進程管理2(進程的互斥與同步)

操作系统-进程管理2(进程的同步与互斥) 进程的同步与互斥 两个或两个以上的进程不能同时使用的资源称为临界资源.临界资源的存在带来了进程之间的互斥访问的问题. 进程互斥:逻辑上完全独立.毫无关系的两个进程因为竞争同一块资源而相互制约,称为进程互斥. 进程同步:有协作关系的进程不断调整它们之间的相对速度或执行过程,以保证临界资源的合理利用和进程的顺利执行.一般借由中间媒体实现:如信号量操作.加锁操作等.同步机制应遵循的规则: 空闲让进 忙则等待 有限等待:进程等待进入临界区的时间必须是有限的,避免

操作系統3-處理機調度與死鎖(死鎖)

操作系統-處理機調度與死鎖3(死鎖) 7.死鎖問題 死鎖是指多個進程等待其它進程佔有的資源,因而無限期等待下去的局面. 系統發生死鎖時,一定具備以下四個條件: 互斥條件.對於一個排他性資源,某一時刻最多允許一個進程佔有. 佔有且申請條件.進程至少已佔有一個資源,又要申請新的資源.此時該進程阻塞,且在等待過程中不釋放已經佔有的資源. 不可搶佔條件.進程獲得的資源在未使用之前,其他進程不得搶佔該資源. 環路條件.若干個進程相互要佔有彼此的資源,形成一個環路. 8.死鎖的避免 要避免死鎖,分為靜態策略

幾個步驟輕鬆在windows操作系統上搭建GO語言開發環境

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

第三章 進程管理

可以參考<深入Linux內核架構>第二章閱讀筆記. 1. 進程 process 程序本身並不是進程,進程是處於執行期的程序以及相關的資源的總稱.如:可執行代碼段.打開的文件.掛起的信號.內核內部數據.處理器狀態.一個或多個具有內存映射的內存地址空間以及一個或多個執行線程.存放全局變量的數據段等等. 實際上,進程就是正在執行的程序代碼的實時結果. 進程的另一個名字是任務(task) 2. 現代操作系統提供的兩種虛擬機制 虛擬處理器:讓正在分享同一個處理器的多個進程都覺着自己在獨享處理器 虛擬內存

作業系統的類型

依處理方式而分 整批處理作業系統(Batch processing OS) 處理方式:將欲處理的資料或程式整批集中,置於如卡片.紙帶.磁帶.磁碟等儲存在媒體內,當要處理時,CPU才會到媒體中讀取資料後加以處理. 優點:整批處理作業系統是第一代作業系統,比起沒有作業系統時,更有效地改進了電腦的作業效率,減少大部份人工操作的比率. 缺點:因為CPU速度遠較存取資料的I/O為快,所以此方式CPU常被閒置,效率低. 分時作業系統(Time-sharing OS) 處理方式:CPU每次分配給各程序式(pr

用FineReport報表系統構建財政資金和公共資金監管系統

一.應用背景 在電子化的社會,政府作為國家的權力中心和社會管理機構,在加入WTO後,將實現從管理型到管理服務型的轉變.政府機構在管理和規範國家政治經濟活動之外,將藉助強大的網路技術,把更多的時間和精力,投入到社會公眾服務中去.社會信息資源和各種政策法規不再會塵封庫中或者層層傳達,而將通過網路在第一時間與公眾會面,通過網路,政府可以廣納賢言,迅速了解社會政治經濟的發展動態,甚至是來自社會最底層的信息,並以此做出及時準確的決策,這對更好的促進經濟建設和社會穩定,好處不言而喻.按照地方政府機關提出推進

使用 NIO.2 操作檔案系統

Java 一直到 JDK 1.3 為止,都是使用 java.io 下的類別進行 I/O 的處理,對這有興趣的鄉民,可以參考「Java I/O」,那是我 13 年前整理的 ... XD.JDK 1.4 之後提供了 NIO,到了 JDK 1.7 又加上些新的功能,稱為 NIO.2,這些類別都被放在 java.nio 下,一般來說,使用 java.nio 類別操作檔案系統,會比使用 java.io 效率來的高且方便. 在進入主題前,各位不妨先看一下我之前整理的「Working with the Pat