读书笔记:操作系统概念

来源:互联网 发布:实景地图制作软件 编辑:程序博客网 时间:2024/05/16 09:56

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

优势

  1. 提高响应速度
  2. 实现线程之间的资源共享
  3. 创建线程比创建进程更加经济,节省分配内存和资源的overhead。
  4. 发挥多处理器的性能。多个线程可以在多个处理器上并行运行

用户进程

thread library管理的、user-level的进程。
主要有:
POSIX Pthreads
Win32 threads
Java threads

Thread Library的实现方式

  1. 完全在用户空间实现,不使用内核支持。
  2. 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

Tanecheum

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

线程池 Thread Pools

在进程启动时就创建大量线程并放置在pool中,让它们等待被唤醒
当一个线程完成了它的工作,就回到pool中继续等待。

优点

  1. 用已存在的线程提供服务比创建线程要快。
  2. 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就会退化成FCFS
若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)进程,它们拥有高于其他所有进程的优先级

0 0
原创粉丝点击