出手无招

出手无招

0个粉丝

12

问答

0

专栏

0

资料

出手无招  发布于  2018-05-07 10:26:41
采纳率 0%
12个问答
2029

线程、进程关系及调度

 
本帖最后由 anwafs 于 2018-11-20 11:15 编辑

进程、线程及其调度

知识需要不断总结、验证、迭代,知其然,知其所以然。
Question:
A、        有了进程,为什么还要线程?
B、        操作系统如何选择下一个要执行的线程?

如果对这两个问题感兴趣,那么请思考……
Think……

1、进程和线程
进程和线程的区别与联系:
进程:资源申请的最小单位
线程:资源调度的最小单位,进程的一部分,描述指令流的执行状态。
内核中,描述进程的数据结构PCB:进程控制块,描述线程的数据结构 TCB:线程控制块。

图1 单线程进程

图2 多线程进程       
进程主要设计目的是隔离,和其他进程地址空间隔离开来;线程是进程的一部分,主要设计目的是通信和并发,隔离不是主要目的。
进程/线程 生命周期:

图3 进程生命周期

2、线程的调度
调度算法最基本的一类是基于线程优先级的,线程的一种分类角度为:普通线程(SCHED_OTHER)和实时线程(SCHED_RR/SCHED_FIFO)。实时线程的优先级高于普通线程。操作系统每次从就绪队列中选择线程调度,占有cpu。
关于优先级,在TCB中有三个字段描述优先级:
A、        静态优先级,static_proi,和nice的值(-20~19)相关
B、        动态优先级,  proi
C、        实时优先级,  rt_priority
普通线程使用,A、B,实时线程使用的参数A、C。
在分时线程中,操作系统根据动态优先级选定下一个待执行的线程,静态优先级是动态优先级的一个基准。即B会在A的基础上浮动,同时A决定了线程调度的时间片。
在实时线程中,操作系统不计算动态优先级,只根据C即实时优先级选定下一个待执行的线程。如果是FIFO则没有时间片(要么主动放弃cpu、要么被高优先级线程抢占),如果RR,可以理解为带时间片轮转的FIFO。

1、        假设系统中只有:OTHER的线程,A、B、C、D、E、F…
那么系统会根据动态优先级高低来调用其中的线程,
动态优先级 = max(100, min(静态优先级 – bonus + 5, 139))(参考深入理解linux内核)。
同时每个线程执行的时间片,也是和静态优先级强相关的。

2、        假设系统中只有RR类型的线程,A、B、C、D、E、F…
操作系统每次调用就只会根据实时优先级的高低选择带执行的线程,假如A在执行,这个时候B等待的资源满足了,B的实时优先级比A高,那A就会B抢占。B结束有三种可能:1、B的时间用完了;2、B主动放弃cpu(等待某种资源);3、B被更高优先级线程抢占。

3、假设系统中只有FIFO类型的线程,A、B、C、D、E、F….
        操作系统同样每次直选实时优先级最高的线程执行,假如A正在执行,这个时候B等待的资源满足了,B的优先级 >  A的优先级,那同样B就抢占A。B结束的条件是:1、主动放弃cpu;2、被更高优先级抢占。FIFO线程没有时间片的概念,如果需要它会一直占着cpu,直到被抢占或者主动放弃。

4、如果系统中三类线程都有会是什么情况呢?
首先,实时线程 > 普通线程,优先选择实时线程且普通线程还会被实时线程抢占。
实时线程中,选择优先级高的执行,在执行过程中,也会被更高优先级的线程抢占。假如有两个FIFO线程A和B,优先级都是80,如果A在执行且一直占用cpu,那么B就无法执行,产生饥饿,直到A主动放弃cpu。如果他们不是FIFO而是RR的,那么A和B就是时间片轮转执行,大家都有机会拿到cpu。

欢迎回复讨论


参考:深入理解linux内核
      Linux内核设计与实现
           学堂在线,在线课程:《操作系统》—清华大学向勇
我来回答
回答2个
时间排序
认可量排序

david

39个粉丝

368

问答

253

专栏

229

资料

david 2018-05-07 11:23:11
认可0
学习下。linux的么:lol

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2018-05-08 14:07:02
认可0
这个也要币?楼主真的尿性:lol
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区