操作系统杂谈

1.进程、线程、程序的区分以及为什么要引入线程:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

  • 摘要:进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。一个车间里,可以有很多工人。他们协同完成一个任务,线程就好比车间里的工人。一个进程可以包括多个线程。车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突。不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。
  • 总结:
    • 1.程序:一段完成特定功能的静态代码。
    • 2.进程:程序的一次动态执行。
    • 3.线程:CPU的基本调度单位,一个进程可以创建多个线程,线程可以共享进程的内存空间。
    • 为什么引入线程:由于进程是资源的拥有者,所以在创建、撤销、切换操作中需要较大的时空开销,限制了并发程度的进一步提高。为减少进程切换的开销,把进程作为资源分配单位和调度单位这两个属性分开处理,即进程还是作为资源分配的基本单位,把调度执行与切换的责任交给“线程”。这样做的好处不但可以提高系统的并发性,充分发挥多处理机的性能。

 

2.什么是作业调度什么是进程调度?试列举至少两种作业调度算法和三种进程调度算法

  •  作业调度:作业调度的主要功能是根据作业控制块中的信息,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程插入就绪队列,准备执行。
  • 进程调度:
    • 长程调度,又称作业调度,用于决定把外存上处于后备队列中的哪些作业调入内存,并为它们创建进程、分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备执行、
    • 短程调度,又称进程调度,用来决定就绪队列中的哪个进程应获得处理机,然后再由分派程序把处理机分配给该进程的具体操作
    • 中程调度,从就绪挂起到就绪,从阻塞挂起到阻塞,引入中程调度的主要目的,是为了提高内存利用率和系统吞吐量
  • 分别有哪些算法:

    (1)先来先服务调度算法(FCFS)(作业、进程调度):算法简单,但效率较低;有利于长作业,但对短作业不利,有利于CPU繁忙型作业,不利于I/O繁忙型作业。
    (2)短作业优先调度算法(SJF)(作业、进程调度):运行时间短的进程(作业)优先执行,该算法对长作业不利,易造成“饥饿”问题,即长进程(作业)由于优先级低可能长期得不到处理。
    (3)时间片轮转调度算法(进程调度):
    时间片的大小对系统性能影响很大,如果时间片足够大,以至于所有的进程都能在一个时间片内执行完毕,则退化为FCFS算法,如果时间片很小,那么处理机在进程间频繁切换,处理机真正用于运行用户进程的时间将减少。
    时间片的长短由:系统的响应时间、就绪队列中的进程个数和系统的处理能力决定。
    (4)优先级调度算法(作业、进程调度):根据进程优先级决定运行的进程
    (5)高响应比优先调度算法(作业调度):响应比 = 1 + 作业等待时间/估计运行时间重点内容
    (6)多级队列调度算法(进程调度):对多个就绪队列设计不同的调度算法
    (7)多级反馈队列调度算法:(UNIX调度用这个)

猜你喜欢

转载自www.cnblogs.com/liwenchi/p/9280869.html
今日推荐