史上最精简的操作系统教程|3线程

c65e0196949e154168f9fa21b5905ccd.png

操作系统学习架构图

本文目录:

  1. 线程的基本概念

  2. 线程的引入

  3. 线程的理解和定义

  4. 线程的实现

  5. 进程和线程

  6. 线程和进程的比较


1 线程的基本概念

1.1 线程的引入

在传统的操作系统中,进程是系统进行资源分配、处理器调度的基本单位。进程在任一时刻只有一个执行控制流。

传统进程给并发程序设计带了的问题:

  • 进程切换开销大,在对进程进行切换时,由于要保留当前进程的CPU环境和设置新选中进程的CPU环境,为此需花费不少处理机时间。

  • 进程通信代价大,每次通信均要涉及通信进程之间或通信进程与操作系统之间的信息传递。

  • 进程之间的并发性粒度较粗,并发度不高,过多的进程切换和通信延迟使得细粒度的并发得不偿失。

解决问题的基本思路— 引入“线程”

把进程的两项功能------“独立分配资源”与“被调度分派执行”分离开来:

  • 进程作为系统资源分配和保护的独立单位,不需要频繁地切换;

  • 线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换。

1.2 线程的理解和定义

什么是线程(thread) :是一个CPU调度单位,是进程中的一个执行路径,有时称“轻量级进程” 。

  • 它由线程ID,程序计数器、寄存器集合和堆栈组成。

  • 它与同属于一个进程的其它线程共享其代码段、数据段和其它操作系统的资源(如打开文件和信号)。

  • 同一个进程中的所有线程共享进程获得的主存空间和资源。

进程在任一时刻只有一个执行控制流,通常将这种结构的进程称单线程(结构)进程。

多线程(结构)进程是在同一进程中设计出多条控制流(每一个控制流称为一个线程),多条控制流之间可以并行执行;多控制流之间可通过内存区直接通信,切换开销小。

7064f8195ea8078f1754835d5aae8dbb.png

进程和线程

bb0538f46f2fbff3ed6fab1ec1d2623c.png

比较

1.3 线程的实现

线程的实现分三类:

  • 用户级线程ULT ( User Level Thread, 如Java,Informix)

  • 内核级线程KLT(Kernel Level Thread, (如Windows 2000/XP)

  • 混合式线程:支持用户级线程ULT和内核级线程KLT的(如Solaris) 。

在ULT中,有关线程管理的所有工作都由应用程序完成。

在KLT中,则由系统直接支持和管理,应用程序中没有进行线程管理的代码,只有一个到内核级线程的编程接口。

1.3.1 线程的实现--用户级线程:

在纯ULT设施中,线程管理工作由应用程序做,内核不知道线程的存在。应用程序均需通过线程库进行程序设计。线程库是一个ULT管理的程序包,实质上是线程的运行支撑环境

ULT线程创建过程:进程开始只有一个线程,它可以创建新线程,通过过程调用把控制权传送给“创建”过程,由线程库为新线程创建一个TCB,并置为就绪态。然后,按一定的调度算法把控制权传递给进程中处于就绪态的一个线程。

当控制权传送到线程库时,当前线程的现场信息应被保存,而当线程库调度一个线程执行时,要恢复它的现场信息(量小,切换开销小)。

用户级线程优点 :

  • 线程切换不需要内核特权方式:因为所有线程管理数据结构均在单个进程的用户空间中,管理线程切换的线程库也在用户地址空间中运行,因而进程不需要切换到内核方式来做线程管理。

  • ULT能运行在任何OS上,内核在支持ULT方面不需要做任何改变。线程库是可被所有应用共享的应用级实用程序,许多当代操作系统和语言均提供ULT线程库。

用户级线程的缺点 :

  • 若线程执行系统调用时,不仅该线程被阻塞,且进程内的所有线程会被阻塞。

  • 纯ULT中,多线程应用不能利用多重处理器的优点。内核在一段时间里,分配一个进程仅占用一个CPU,进程中仅有一个线程能执行。

1.3.2 线程的实现-内核级线程

在纯内核级线程设施中,线程执行中可通过内核创建线程原语来创建其他线程。内核要为整个进程及进程中的单个线程维护现场信息,应在内核中建立和维护PCB及TCB。

内核级线程优点:

  • 多处理器上,内核能同时调度同一进程中多个线程并行执行。

  • 进程中的一个线程被阻塞了,内核能调度同一进程的其它线程或其他进程中的线程占有处理器运行。

  • 内核线程数据结构和堆栈很小,KLT切换快,内核自身也可用多线程技术实现,能提高系统的执行速度和效率。

内核级线程的主要缺点 :

  • 应用程序线程在用户态运行,而线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要用户态-内核态-用户态的模式切换,系统开销较大。

1.3.3 线程的实现-混合式线程

  • 在混合式系统中,内核支持KLT多线程的建立、调度和管理,同时也提供线程库,允许应用程序建立、调度和管理ULT。应用程序的多个ULT映射成一些KLT。

  • 在混合式系统中,一个应用中的多个线程能同时在多处理器上并行运行,且阻塞一个线程时并不需要封锁整个进程。

5b9ca239104054584c050fd7946cf6d4.png

c5620c68f5fa9aa1967ce94d6e302558.png

用户级线程和核心级线程比较

2 进程和线程

2.1 线程和进程的比较

  • 调度:在引入线程的操作系统中,进程仅作为拥有资源的基本单位,而线程是系统调度、分派的基本单位。

  • 并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,线程之间也可以并发。

  • 拥有资源:在设有线程的操作系统中,进程是拥有资源的一个独立单位,线程仅拥有少量能保证其正常运行所必须的资源。

  • 系统开销:由于进程相对较重,因此,操作系统进程调度的开销大大高于线程调度的开销。


2cdd2e870ae3b69a4caf65c413b0f0a8.png

未完待续,敬请期待下个系列文章...


史上最精简的操作系统教程|1开篇

史上最精简的操作系统教程|2进程

【故事】P2P、BT、ED2k、FTP、磁力链接下载到底是什么鬼?

【故事】快进来!这次聊点奇怪的知识!

【故事】为了避免产品经理和程序猿干架,我用大白话讲清楚了浏览器缓存原理

【故事】跟零计算机基础的房东女儿讲了一下午的中间人劫持京东事件后,她感激涕零,决定给我免除房租(上)

97b94ed60df9e1499772125658751a3d.png

点个在看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感谢您的提问!以下是Quartus Prime Lite Edition(精简版)的安装教程: 步骤1:下载Quartus Prime Lite Edition 首先,您需要从Intel官方网站下载Quartus Prime Lite Edition。请确保选择与您的操作系统兼容的版本。 步骤2:安装Quartus Prime Lite Edition 1. 打开下载的安装程序并运行它。 2. 接受许可协议并选择安装类型。对于精简版,您可以选择“Typical”(典型安装)以获得常用组件。 3. 选择要安装的目标文件夹。默认情况下,它将安装在C:\intelFPGA_lite目录下,但您也可以选择其他位置。 4. 选择要安装的组件。对于精简版,通常选择默认选项即可。 5. 确认安装选项并开始安装。请耐心等待安装程序完成。 步骤3:设置环境变量 在成功安装Quartus Prime Lite Edition后,您需要设置相应的环境变量,以便在命令行中使用Quartus工具。 1. 打开控制面板并搜索“环境变量”。 2. 点击“编辑系统环境变量”。 3. 在系统属性对话框中,点击“环境变量”按钮。 4. 在系统变量列表中,找到名为“Path”的变量,并点击“编辑”。 5. 在编辑环境变量对话框中,点击“新建”并输入Quartus安装目录下的bin文件夹路径(例如,C:\intelFPGA_lite\18.1\quartus\bin)。 6. 点击“确定”保存更改。 现在您已经成功安装了Quartus Prime Lite Edition并设置了环境变量。您可以开始使用Quartus来进行FPGA开发了。 希望这个教程对您有所帮助!如有任何疑问,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值