1.进程控制原语
用于进程控制的原语一般有:创建进程、撤销进程、挂起进程、激活进程、阻塞进程、唤醒进程以及改变进程优先级等。
1.1 创建原语
一个进程可以使用创建原语创建一个新的进程,前者称为父进程,后者称为子进程,子进程又可以细建新的子进程,构成新的父子关系。从而整个系统可以形成一个树形结构的进程家族。创建一个进程的主要任务是建立进程控制块PCB。具体操作过程是:先申请一空闲PCB 区域,将有关信息填入PCB,置该进程为就绪状态,最后把它插入就绪队列中。
1.2 撤销原语
当一个进程完成任务后,应当撤销它,以便及时释放它所占用的资源。 撤销进程的实质是撤销PCB。一旦PCB 撤销,进程就消亡了。具体操作过程是:找到要被撤销进程的 PCB,将它从所在队列中消去,撤销属于该进程的一切“子孙进程”,释放被撤销进程所占用的全部资源,并消去被撤销进程的PCB。
1.3 阻塞原语
某进程执行过程中,需要执行I/O 操作,则由该进程调用阻塞原语把进程从运行状态转换为阻塞状态。 具体操作过程是:由于进程正处于运行状态,因此首先应中断CPU 执行,把CPU 的当前状态保存在PCB 的现场信息中,把进程的当前状态置为等待状态,并把它插入到该事件的等待队列中去。
1.4 唤醒原语
一个进程因为等待事件的发生而处于等待状态,当等待事件完成后,就用唤醒原语将其转换为就绪状态。具体操作过程是:在等待队列中找到该进程,置进程的当前状态为就绪状态,然后将它从等待队列中撤出并插入到就绪队列中排队,等待调度执行。
2.操作系统创建新进程
操作系统创建一个新进程的过程如下:①申请空白PCB;②为新进程分配资源;③初始化进程控制块;④将新进程插入就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入到就绪队列中。
3.fork()函数
在UNIX 类操作系统中,父进程通过调用fork()函数创建子进程,子进程获得与父进程地址空间相同的一份拷贝,包括文本、数据和bss 段、堆以及用户栈,fork()函数被调用一次,却返回2 次:一次是在调用进程中,一次是在新创建的子进程中。
4.线程的基本概念
在引入线程的操作系统中,线程是进程中的一个实体,是CPU 调度和分派的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但它可与同属一个进程的其他线程共享进程所拥有的全部资源。在操作系统中再引入线程,则是为了减少程序并发执行时所付出的时间和空间开销,使操作系统具有更好的并发性。
5.引入线程的好处
创建一个新线程花费时间少(结束亦如此)。创建线程不需另行分配资源,因而创建线程的速度比创建进程的速度快,且系统的开销也少。两个线程的切换花费时间少。由于同一进程内的线程共享内存和文件,线程之间相互通信无须调用内核,故不需要额外的通信机制,使通信更简便,信息传送速度也快。线程能独立执行,能充分利用和发挥处理器与外围设备并行工作能力。
6.Pthread 函数调用
线程调用 | 描述 |
pthread create | 创建一个新线程 |
pthread exit | 结束调用的线程 |
pthread join | 等待一个特定的线程退出释放CPU来运行另外一个线程 |
pthread yiel | 创建并初始化一个线程的属性结构 |
pthread_attr_init | 创建并初始化一个线程的属性结构 |
pthread_attr_destroy | 删除一个线程的属性结构 |
7.进程(线程)调度的时机
执行进程调度一般是在下述情况下发生的:①正在执行的进程(线程)运行完毕;②正在执行的进程(线程)调用阻塞原语将自己阻塞起来进入等待状态;③ 正在执行的进程(线程)调用了阻塞原语操作,并且因为资源不足而被阻塞;或调用了唤醒原语操作激活了等待资源的进程(线程);④时间片用完;以上都是在CPU 为不可抢占方式下的引起进程调度的原因。
在CPU 方式是可抢占方式时,还有下面的原因:就绪队列中的某个进程(线程)的优先级高于当前运行进程(线程)的优先级时,引发进程(线程)调度。
8.计算密集型I/O 密集型
某些进程花费了绝大多数时间在计算上,而其他进程则在等待I/O 上花费了绝大多数时间。前者称为计算密集型(Compute-Bound),也称为CPU 密集型,后者称为I/O 密集型(I/O-Bound),典型的计算密集型进程具有较长时间的CPU 集中使用和较小频度的I/O 等待。
9.批处理检测指标
运行大量批处理作业的大型计算中心的管理者们为了掌握其系统的工作状态,通常检查3 个指标:吞吐量、周转时间以及CPU 利用率。对于交互式系统,特别是分时系统和服务器,则有不同的指标。最重要的是最小响应时间和均衡性。实时系统有着与交互式系统不一样的特性,所以有不同的调度目标。实时系统的特点是或多或少必须满足截止时间。实时系统最主要的要求是满足所有的(或大多数)截止时间要求。 为了避免这些问题,进程调度程序必须是高度可预测的和有规律的。
10.进程调度策略
操作系统中进程调度策略主要有:① FCFS(先来先服务);② 最短作业优先;③ 最短剩余时间优先;④ 时间片轮转;⑤ 最高优先级算法;⑥ 多级反馈队列算法;⑦ 最短进程优先