3.1论述长期、中期、短期调度之间的区别。
答:短期调度:在内存作业中选择准备执行的作业,并未他们分配CPU。
中期调度:被用于分时系统,一个交换方案的实施,将部分运行程序移出内存,之后,从中断处继续执行。
长期调度:确定哪些作业调入内存以执行。
区别:它们区别在于执行频率。短期调度必须经常调用一个新进程,由于在系统中,长期调度处理移动的作业时,并不频繁被调用,可能在进程离开系统时才被唤起。
3.2描述内核在两个进程间进行上下文切换的过程。
答:进程关联是由进程的PCB来表示的,它包括CPU寄存器的值和内存管理信息等。当发生上下文切换时,内核会将旧进程的关联状态保存在其PCB中,然后装入经调度要执行的新进程的已保存的关联状态。上下文切换还必须执行一些确切体系结构的操作,包括刷新数据和指令缓存。
3.4使用图3.24所示的程序,说明LINE A可能输出什么。
答:输出:PARENT:value=5;
父进程中value初始值为5,,value+=15发生在子进程,输出发生在父进程中,故输出value的值为5。
3.5下面设计的优点和缺点分别是什么?系统层次和用户层次都要考虑。
a.同步和异步通信
b.自动和显式缓冲
c.复制传送和引用传送
d.固定大小和可变大小信息
答:a.同步和异步通信:同步通信的影响是它允许发送者和接收者之间有一个集合点。缺点是阻塞发送时,不需要集合点,而消息不能异步传递。因此,消息传递系统,往往提供两种形式的同步。
b.自动和显式缓冲:自动缓冲提供了一个无限长度的队列,从而保证了发送者在复制消息时不会遇到阻塞,如何提供自动缓存的规范,一个方案也许能保存足够大的内存,但许多内存被浪费缓存明确指定缓冲区的大小。在这种状况下,发送者不能在等待可用空间队列中被阻塞。然而,缓冲明确的内存不太可能被浪费。
c.复制发送和引用发送:复制发送不允许接收者改变参数的状态,引用发送是允许的。引用发送允许的优点之一是它允许程序员写一个分布式版本的一个集中的应用程序。
d.固定大小和可变大小信息:一个拥有具体规模的缓冲可容纳及已知数量的信息缓冲能容纳的可变信息数量是未知的。信息从发送者的地址空间被复制至接受进程的地址空间。更大的信息可使用共享内存传递信息。
4.1举两个多线程程序设计的例子,其中多线程的性能比单线程的性能差。
答:a.任何形式的顺序程序对线程来说都不是一个好的形式。例如一个计算个人报酬的程序。
b.一个“空壳”程序,如C-shell和korn shell。这种程序必须密切检测其本身的工作空间。如打
开的文件、环境变量和当前工作目录。
4.2描述线程库进行用户级线程上下文切换的过程所采取的措施。
答:用户线程之间的上下文切换和内核线程之间的相互转换是非常相似的。但它依赖于线程库和怎样把用户线程指给内核程序。一般来说,用户线程之间的上下文切换涉及到用一个用户程序的轻量级进程和用另外一个线程来代替。这种行为通常涉及到寄存器的节约和释放。
4.3在什么环境中,采用多内核线程的多线程方法比单处理器系统的单线程提供更好的性能。
答:当一个内核线程的页面发生错误时,另外的内核线程会用一种有效的方法被转换成使用交错时间。另一方面,当页面发生错误时,一个单一线程进程将不能够发挥有效性能。因此,在一个程序可能有频繁的页面错误或不得不等待其他系统的事件的情况下,多线程方案会有比单处理器系统更好的性能。
4.5使用多用户线程的多线程解决方案,在多处理器系统中可以比在单处理器系统中获得更好的性能吗?
答:一个包括多用户线程的多线程系统无法在多处理系统上同时使用不同的处理器。操作系统只能看到一个单一的进程且不会调度在不同处理器上的不同进程的线程。因此,多处理器系统执行多个用户线程是没有性能优势的。
4.9编写一个多线程的Java、Pthread或Win32程序来输出素数。程序应这样工作:用户运行程序时在命令行输入一个数字,然后创建一个独立线程来输出小于或等于用户输入数的所有素数。
代码如下:
package caozuo01;
class Prime extends Thread
{
    private int INnum;
    public Prime(int n)
    {
        INnum = n;
    }
    public void run()
    {
        int i,j = 0;
        if( INnum < 0)
        {
            System.err.println("The number must be greater than 0!");
            return;
        }
       
        else if(INnum == 0 || INnum == 1)
        {
            System.out.println("No prime numbers ");
        }
        else
        {
            for(i=2; i<=INnum; i++)
            {
                for(j=2; j<i/2+1; j++)
                {
                    if(i%j == 0)
                        break;             
                }
                if(j >= i/2+1)
                    System.out.println(i);       
            }     
        }   
    }
}
public class cz01
{
    public static void main(String[] args)
    {
        if(args.length <= 0)
        {
            System.err.println("Usage: java ThreadTester <integer value>");
            return
        } 
        else
        {
同步通信和异步通信主要区别
            Prime thrd = new Prime(Integer.parseInt(args[0]));
            thrd.start();       
        }   
    }
}
运行结果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。