您的位置:首页 > 其它

读书笔记:操作系统概念 - Chapter4-6 - Threads,CPU Scheduling

2017-03-15 16:22 471 查看

4.线程

线程的创建

A context must be created, including a register set storage location for storage during context switching, and a local stack to record the procedure call arguments, return values, and return addresses, and thread-local storage.

进程的两个角色

1.resource ownership–virtual address space to hold the process image

2.execution—follows an execution path (also called instruction 序列?)

进程和线程

进程:资源所有者

have a virtual address space

protected access to resources

线程:unit of execution

an execution state (running, ready etc.)

Save thread context

static storage for local variables (stack per thread)

individual access to resources

每个Thread都有自己的stack, register, PCB

Windows XP线程为例,它具有:

- thread id

- register set

- stacks

- private data storage area

其中,
register set
,
stacks
,
private storage area
组成了线程的上下文(context)

Multithreading

优势

提高响应速度

实现线程之间的资源共享

创建线程比创建进程更加经济,节省分配内存和资源的overhead。

发挥多处理器的性能。多个线程可以在多个处理器上并行运行

用户进程

thread library管理的、user-level的进程。

主要有:

POSIX Pthreads

Win32 threads

Java threads

Thread Library的实现方式

完全在用户空间实现,不使用内核支持。

implement a kernel-level lib. supported by the OS.

多线程模型

多对一(JAVA,Solaris Green)

多个用户线程链接一个内核线程。由内核线程等待CPU时间,获得后分配给用户线程。

好处:容易实现。可以通过只修改thread library来控制线程优先级从而分配CPU时间。

坏处:

1. 当某个用户线程发出阻塞的system call时就会阻塞。

2. 即使在多处理器环境下也无法实现多线程并行

一对一(Windows, Linux)

好处:当前线程阻塞时可以创建别的线程执行,不会阻塞;可以实现多处理器上的多线程并行。

坏处:overhead太高。

多对多

好处:用户可以创建任意多线程。也可以实现多线程并行。也不会阻塞。

拓展:Two-level Model

允许多对多,也允许一个或多个用户线程只绑定一个内核进程。

HyperThreading



在nanosecond级别上进行线程切换。

线程池 Thread Pools

在进程启动时就创建大量线程并放置在pool中,让它们等待被唤醒

当一个线程完成了它的工作,就回到pool中继续等待。

优点

用已存在的线程提供服务比创建线程要快。

pool控制了服务的规模。

5. CPU调度

CPU Scheduling 是多道程序(multiprogrammed)操作系统的基础

什么是Multiprogramming

多道程序 是指多个进程可以同时运行,多个进程根据一定的调度策略轮流使用CPU。

它的目标在于最大化CPU的使用Maximum CPU utilization)。

影响调度策略的因素:Burst Cycle

进程的运行是由一连串的CPU burstI/O burst组成的。每个进程都由CPU burst开始,由CPU burst结束。

根据统计结果,总体上大部分的都是较短的CPU burst,长的CPU burst比例较少。

一个 I/O bound的程序会有很多短的CPU burst;而一个 CPU bound的程序会有一些长的CPU burst。

每个程序的CPU burst的不同比例影响了CPU调度策略

CPU调度的执行者:CPU scheduler

CPU scheduler(short-term scheduler)在CPU空闲时,从就绪队列(ready queue)中选择一个进程,将CPU资源分配给它。

CPU调度发生的场景



1. 某个进程 从running切换到waiting(如等待IO操作时)

2. 某个进程从running切换到ready(发生IO中断;时间片到期)

3. 某个进程从waitingready(IO操作完成)

4. 进程终止(Terminates

其中1&4属于非抢占式调度,2&3属于抢占式调度(preemptive)

非抢占式调度

cpu会被当前进程一直占用,直到进程终止释放CPU,或者进程切换到waiting状态。

CPU scheduler重要组成:Dispatcher

Dispatcher是将CPU的控制权移交给被选中的进程的模块

它有以下功能:

- Switching Context(保存&恢复现场)

- 切换到用户模式

- 根据PC 的值,跳到重启程序的正确位置。

Dispatch latency:从暂停一个进程到启动另一个进程所需时长。

调度准则 Scheduling Criteria

CPU utilization

CPU使用的百分比。

Throughput:吞吐量

单位时间内完成执行进程数量

Turnaround Time 轮转时间

一个进程的submission到它的完成所需的时长。

Waiting time

进程在就绪队列中等待的总时长。

Response time

进程从submission到第一次响应的时间。

CPU uitilization和throughput都应该越高越好,其他越低越好。

调度策略 Scheduling Algorithm

FCFS:First-Come, First-Served 先到先得

该策略的进程平均等待时间会受到进程的CPU burst time的极大影响。

若一个大进程排在首位,会出现车队效应(convoy efect),小进程要等大进程的完成,等很久。这会降低CPU和设备的使用率。

SJF:Shortest-Job-First 最短优先

它有两种实现方案:

1. 非抢占式:正在使用CPU的进程不会被抢占。

2. 抢占式:如果一个新到达的进程需要的CPU burst长度小于当前进程剩余的执行时间,当前进程就会被强占。这个方案也叫SRTF(shortest-remaining-time-first)最小剩余优先

该策略对于一组已知执行时长的进程花费的平均等待时间是最小的,因而是最优策略

但实际情况中,进程的长度往往是未知的,需要进行预测(predict)

Priority Scheduling 优先级

也分为两种实现:抢占式&非抢占式。

Starvation问题

指在该策略下低优先级的进程可能永远不会被执行

解决:Aging。让进程的优先级随等待时间变长而提高。

RoundRobin(RR)轮转法

每个进程都执行指定时长,这个时长称为time quantum,时间到了就要移到就绪队列的尾部(当然,若当前进程在time quantum内执行完毕,则调度器会选择下一个进程)(此时也会发生context switch)。

若有n个进程,time quantum为q,则进程最大等待时间为q*(n-1)

该策略的性能基本由q的取值决定。若q太大,RR就会退化成FCF
bc4f
S


若q太小,上下文切换太多,overhead太高。

应该选择恰好大于较高频率出现的CPU周期的长度,让大部分进程能在一个time quantum 内完成CPU burst。

该策略中进程的轮转时间可能大于SJF,但进程的响应更频繁。

更复杂的Multilevel Queue Scheduling

基本概念:将进程分类。比如,根据响应时间的要求分成foreground/interactivebackground/batch。foreground进程的优先级比background的高。

这之后,将就绪队列 分成多条不同的队列。每个进程所处的队列是固定的,不同的队列使用不同的调度策略。比如,foreground进程的队列使用RR,以获得更好的响应;而background 进程的队列使用FCFS,以保持稳定。

队列之间也要排序,通常以priority作为标准,使用Fixed priority scheduling。当然,该策略也可能出现starvation的问题。

另外一个队列调度(排序)的策略是time-slice。每个队列分配到固定的CPU时间,队列将这些时间分配给进程。

Multilevel Feedback Queue

指一个进程可以在多个队列中进行移动。这个策略也可以作为Aging的一个实现。

它有多个属性

队列的数量;

每个队列各自的调度策略;

将队列upgrade(升级)demote(降级)的策略;

为进程选择队列的策略。

它的核心思想是根据进程的CPU burst来将进程分类。使用CPU较频繁的进程,会被移动到低优先级的队列中。这是为了让那些CPU burst较短的进程能够快速地在较短的CPU时间(某个给定的time quantum )内执行完毕,从而达到更高的吞吐量

而等待时间过长的进程也会被移动到高优先级的队列中。

Real-Time Scheduling 实时调度

Hard real-time systems

在该类系统中,某些任务被硬性要求给定时间内完成,如导弹发射的轨道计算。

Soft real-time computing

只能保证某些重要进程的优先级较高。

Thread Scheduling

Local Scheduling –

How the threads library decides

which thread to put onto an available LWP

线程库进行的对线程的调度。

Global Scheduling – How the kernel decides which

kernel thread to run next

内核执行的对内核线程的调度。

示例:Windows XP:多任务·抢占式调度

对于实时任务(real-time)进程,它们拥有高于其他所有进程的优先级
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息