第三次作业参考答案电子教案
- 格式:docx
- 大小:168.09 KB
- 文档页数:11
2.1 比较程序的顺序执行和并发执行。
答:
答:
1)进程是一个动态的概念,而程序则是一个静态的概念。程序是指令的有序集合,没有任何执行含义,而进程则强调执行过程,它动态地被创建,并被调度执行后消亡。
2)进程具有并行特征,而程序没有。进程具有并行特征的两个方面,即独立性和异步性。也就是说,在不考虑资源共享的情况下,各进程的执行是独立的,它们之间不存在逻辑上的制约关系,各进程的是异步的。由于程序不反映执行过程,所以不具有并行特征。
3)进程是系统中独立存在的实体,是竞争资源的基本单位。进程对应特殊的描述结构
并有申请、使用、释放资源的资格。由于系统中存在多个进程,系统资源的有限性必然导致多个进程对资源的共享和竞争,从而使进程的并行性受到系统的制约。
4)进程的存在必然需要程序的存在,但进程和程序不是一一对应的。由于进程是程序
的执行过程,所以程序是进程的一个组成部分。处于静止状态的程序并不对应于任何进程。当程序被处理机执行时,它一定属于某一个或者多个进程。属于进程的程序可以是一个,也可以是多个。不同的进程可以包含同一个程序,只要该程序所对应的数据集不同。
❑2.3 试对进程的状态及状态转换进行总结,注意状态转换的物理含义及转化条件。
答:处于就绪状态的进程,在调度程序为之分配了处理机之后,该进程便可执行,相应地,它就由就绪状态转变为运行状态。正在执行的进程也称为当前进程,如果分配给它的时间
片已完而被暂停执行时,该进程便由执行状态又回复到就绪状态;如果因发生某事件而使
进程的执行受阻,使之无法继续执行,该进程将由执行状态转变为阻塞状态。引入挂起状
态后,又增加了从挂起状态到非挂起状态之间的转换,当进程处于未被挂起的就绪状态时,用挂起原语Suspend将该进程挂起后,该进程便转变成为静止就绪状态,此时进程不再被
调度执行。当进程处于未被挂起的阻塞状态时,用Suspend原语将它挂起后,进程便转变
为静止阻塞状态,处于该状态的进程在其所期待的事件出现后,将从静止阻塞状态变成静
止就绪。处于活动就绪状态的进程,若用激活原语Active激活后,该进程将转变为挂起就
绪状态。处于活动阻塞状态的进程,若用激活原语Active激活后,将转变为阻塞挂起状态。
❑2.4 试举例说明引起进程创建、撤消、阻塞或被唤醒的主要事件分别有哪些?
答:引起进程创建,如用户登录;作业调度;提供服务;应用请求。
进程撤销,当一个进程到达了自然结束点,或时出现了无法克服的错误,或是被操作
系统所中介,或是被其他有终止权的进程所终结,都会引起进程撤销。
进程阻塞,请求系统服务,不能立即满足;启动某种操作,且必须在该操作完成之后才能
继续执行;新数据尚未到达,相互合作进程的一方需首先获得另一进程数据才能继续;无新工
作可做,特定功能系统进程当完成任务且暂无任务。
进程被唤醒,系统服务满足;操作完成;数据到达;新任务出现。
❑2.5 试根据你自己的理解,采用类C语言设计和描述操作系统关于进程控制块的数据结构、组织方式及管理机制。在此基础上,给出进程的创建、终止、阻塞、唤醒、挂起与激活等函数原型及函数代码。注意,对于过于复杂的功能或你无法解决的细节可采用指定功能的函数模块如处理机调度scheduler()来替代。
答:进程控制块的数据结构:
Struct task_struct {
long state; /*任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)*/
long counter;/*运行时间片计数器(递减)*/
long priority;/*优先级*/
long signal;/*信号*/
struct sigaction sigaction[32];/*信号执行属性结构,对应信号将要执行的操作和标志信息*/ long blocked; /* bitmap of masked signals */
/* various fields */
int exit_code;/*任务执行停止的退出码*/
unsigned long start_code,end_code,end_data,brk,start_stack; /*代码段地址代码长度(字节数)
代码长度 + 数据长度(字节数)总长度堆栈段地址*/
long pid,father,pgrp,session,leader;/*进程标识号(进程号) 父进程号父进程组号会话号会话首领*/
unsigned short uid,euid,suid;/*用户标识号(用户id)有效用户id 保存的用户id*/ unsigned short gid,egid,sgid; /*组标识号(组id)有效组id 保存的组id*/
long alarm;/*报警定时值*/
long utime,stime,cutime,cstime,start_time;/*用户态运行时间内核态运行时间子进程用户态运行时间
子进程内核态运行时间进程开始运行时刻*/
unsigned short used_math;/*标志:是否使用协处理器*/
/* file system info */
int tty; /* -1 if no tty, so it must be signed */
unsigned short umask;/*文件创建属性屏蔽位*/
struct m_inode * pwd;/*当前工作目录i 节点结构*/
struct m_inode * root;/*根目录i节点结构*/
struct m_inode * executable;/*执行文件i节点结构*/
unsigned long close_on_exec;/*执行时关闭文件句柄位图标志*/
struct file * filp[NR_OPEN];/*进程使用的文件表结构*/
/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */
struct desc_struct ldt[3];/*本任务的局部描述符表。0-空,1-代码段cs,2-数据和堆栈段ds&ss*/
/* tss for this task */
Struct tss_struct tss;/*本进程的任务状态段信息结构*/
};
组织方式: