赵盈盈  2011210593  第四章作业上
1. 解释名词:程序的顺序执行;程序的并发执行。
答:程序的顺序执行:一个具有独立功能的程序独占cpu直到得到最终结果的进程
    程序的并发执行:两个或两个以上程序在计算机系统中同时处于一开始执行且尚未结束的状态。
2. 什么是进程?进程与程序的主要区别是什么?
答:进程:进程是具有独立功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源分配和调度的独立单元。
进程和程序的区别:
●程序是静态的,进程是动态的
●进程有程序和数据两部分组成
●进程具有生命周期,有诞生和消亡,是短暂的;而程序是相对长久的
●进程能更真实的描述并发,而程序不行。
●一个进程可以对应多个程序。一个程序可以对应多个进程
●进程可以创建其他进程,程序不能
3. 图1所示,设一誊抄程序,将f记录序列正确誊抄到g中,这一程序由getcopyput三个程序段组成,它们分别负责获得记录、复制记录、输出记录。请指出这三个程序段对f中的m个记录进行处理时各种操作的先后次序,并画出誊抄此记录序列的先后次序图(假设f中有1,2,…,m个记录,s,t为设置在主存中的软件缓冲区,每次只能装一个记录)。
图1  改进后的誊抄过程
答:
4. 进程有哪几种基本状态?试画出进程状态变迁图,并标明发生变迁的可能原因。
答:进程基本状态:运行、就绪、等待
状态转换图:
就绪到运行:调度程序选择一个新的进程运行
运行到就绪:运行进程用完了时间片
或运行进程被中断,因为一个高优先级的进程处于就绪状态
运行到等待:OS尚未完成服务
或对一资源的访问尚不能进行
                或初始化I/O 且必须等待结果
                或等待某一进程提供输入(IPC)
等待到就绪:当所有的事件发生时
5. 什么是进程控制块?它有什么作用?
答:PCB:为了便于系统控制和描述进程的活动过程,在操作系统核心中为进程定义的一个专门的数据结构。
作用:系统用PCB来控制和管理进程的调用,PCB也是系统感知进程存在的唯一标志
6. n个并发进程共用一个公共变量Q,写出用信号灯的pv操作实现n个进程互斥时的程序描述,并说明信号灯值的取值范围。
答:main()                        pi()
{                                {
int mutex=1;                      p(mutex);
cobegin                            执行进程Pi;
for(i=1;1<=n;i++){ pi();}          v(mutex);
coend                            }
}
对于N并发进程,互斥子信号灯取值范围为【-(n-1),1】
Mutex = 1,表示没有进程进入缓冲区。
Mutex = 0,表示有一个进程进入缓冲区,没有进程等待
Mutex = -1,表示有一个进程进入缓冲区,一个进程等待
……
Mutex =-(n-1),表示有一个进程进入缓冲区,n-1个进程等待
7. 我们用进程流图来描述一组合作进程执行的先后次序。试用信号灯的pv操作实现如图2(a)(b)中所示进程之间的同步,并写出程序描述。
2                                          3
答:PV操作实现(a)及程序实现
main()
{int S2=0,S3=0,S4=0;    P1()          P2()          P3()        P4()
Cobegin                {            {            {            {
P1();P2();P3();P4();      执行P1;    P(S2);      P(S3);      P(S4);
Coend                    V(S2);    执行P2;      执行P3;    执行P4;
一块操
}                        V(S3);    }            }            }
                          V(S4);                           
                        }
PV操作实现(b)及程序实现
main()
{int S5=0,S6=0;          P5()          P6()            P7()
int S57=0,S67=0;      {            {              {
Cobegin                  P(S5);      P(S6);      P(S57);
P5();P6();P7();          执行P5;    执行P6;      P(S67);
Coend                    V(S57)      V(S67);      执行P7;
}                        }            }              }
                       
8. 如图3所示的进程流图中,有五个进程合作完成某一任务,试说明这五个进程之间的同步关系,并用pv操作实现之,并要求写出程序描述。
答:PV操作实现及程序实现
  Main()                                P1()            P2()
{int S1=0,S2=0,S3=0,S4=0;S35=0,S45=0;    {执行P1;      { P(S2);
Cobegin                                  V(S2);        执行S2;
P1();P2();P3();P4();P5();                V(S3);        }
Coend                                    V(S4);
}                                        }
P3()              P4()                  P5()
{P(S3);          { P(S4);            {P(35);
执行P3;          执行P4;            P(45);
V(35);            V(45);              执行P5;
}                }                    }
9. 如图4所示,getcopyput三进程共用两个缓冲区st(其大小为每次存放一个记录)。get进程负责不断地把输入记录送入缓冲区s中,copy进程负责从缓冲区s中取出记录复制到缓冲t中,而put进程负责把记录从缓冲区t中取出打印。试用pv操作实现这三个进程之间的同步,并写出程序描述。
图4
答:PV操作实现及程序实现
Main()
{int S1=1,S2=0;//S1表示空缓冲区s个数,S2表示缓冲区是否有内容可以被copy
int T1=1,T2=0;// T1表示空缓冲区t个数,T2表示缓冲区是否有内容可以被put
Cobegin
Get();
Copy();
Put();
Coend
}
Get()                                          Copy
{ while(1)                                  {  while(1)
{ P(S1); //检查S是否为空                    { P(S2);//检查S是否为满
put data to buffer S //补数据放入S      copy data from buffer S;// copy数据