本文总结了操作系统第二章的重点知识,适合平时上课预习大概内容、期末复习的小伙伴们!
目录
4、(问答题) 进程和程序的区别(从动态性、并发性、独立性和异步性四个方面)
8、 了解进程创建、终止、阻塞、唤醒、挂起、激活等进程控制的过程
11、信号量正负值的物理意义,理解 wait 和 signal 原语的内涵
12、AND 型信号量的定义,Swait 和 Ssignal 操作
13.利用信号量机制解决互斥、同步、前趋关系等问题 (大题)
14.什么是进程通信?进程通信的类型;什么是高级通信?高级通信都有哪几种类型?消息缓冲队列通信属于什么类型的通信?
16.线程和进程的区别是什么?(从调度性,并发性,系统开销,拥有资源等方面说明)
1.在操作系统中为什么要引入进程概念?它会产生什么样的影响?
1、 程序顺序执行时的特征
1.顺序性。处理机严格按照程序所规定的顺序进行执行。
2.独占性。程序在运行时独占全部系统的资源,因此,系统的资源状态的改变只与执行的程序有关,不受外界的干扰。
3.可再现性。在初始条件相同的情况下,一个程序多次重复执行可得到相同的结果。
2、 程序并发执行时的特征
程序的并发:在同一时间间隔内执行。提高资源利用率和系统吞吐量。
1.间断性。由于资源的共享和相互合作,并发程序形成相互制约关系,使得并发执行的程序出现“执行-暂停-执行”的现象。
2.失去封闭性。程序在执行时与其他并发的程序共享资源,因此资源状态的改变海还与其他程序相关。
3.不可再现性。初始条件相同的情况下,一个程序多次重复执行可能得到不同的结果。
3、 为什么引入进程?进程定义
原因:为了使程序可以并发执行,并且能对并发的程序加以描述和控制。用一个进程表示一个并发执行的程序。
PCB、程序段、数据段构成一个进程实体,又叫进程映像,简称进程。
定义:进程是进程实体运行的过程,是系统资源分配和调度的一个独立单位。
特征:1.动态性:进程有“生命期”,动态性是进程最重要的特征。
2.并发性:指多个进程同存在内存,在一段时间内同时运行,引入进程的目的就是为了使进程能并发执行。
3.独立性:进程实体是一个能独立运行、独立获得资源、独立接受调度的基本单位。
4.异步性:指进程是按异步方式运行的,按各自的不可预知的速度向前推进。
4、(问答题) 进程和程序的区别(从动态性、并发性、独立性和异步性四个方面)
(1)动态性:进程有生命周期是动态的;程序是一组有序的指令集合,存放于某种介质上,是静态的。
(2)并发性:多个进程能够并发执行,而程序不能参与并发执行。
(3)独立性:进程是系统资源分配和调度的独立单位,具有独立性;而程序不能作为一个独立单位参与运行。
(4)异步性:进程与程序不一一对应。同一个程序的多次运行,将形成多个不同的进程;同一个程序的一次执行也可以产生多个进程(如 UNIX 中通过 fork 调用产生子进程);而一个进程在其生命期的不同时候可以执行不同的程序(如UNIX中通过 exec 调用更换进程的执行代码)。
5、 进程三个基本状态及相互转换原因
6、 具有挂起状态的进程状态及其相互转换原因
引入挂起状态的原因:
(1)终端用户的请求(2)父进程请求 (3) 负荷调节的需要(4)操作系统的需要
7、 进程控制块(PCB)的概念及其作用
概念:进程控制块(Process Control Block,PCB)为了便于系统描述和管理进程,专门定义的数据结构,是进程实体的一部分,记录了系统所需述进程当前情况以及管理进程运行的全部信息,是操作系统最重要的记录型数据结构。
作用:1)作为独立运行基本单位的标志,是进程存在于系统的唯一标志。
2)能实现间断性运行方式,支持进程切换(保存处理机现场);
3)提供进程管理所需要的信息(程序和数据在内存和外存的始址指针);
4)提供进程调度所需的信息(进程状态,进程优先级,进程等待时间,已执行时间);
5)实现与其它进程的后步与通信(同步信号量,通信队列指针)
8、 了解进程创建、终止、阻塞、唤醒、挂起、激活等进程控制的过程
创建:导致一个进程去创建另一个进程的典型事件是分时系统中的用户登录和批处理系统中的作业调度。另外,应用程序本身也可以根据需要去创建新的进程,创建新进程是通过创建原语完成的,被创建的进程称作子进程,而创建子进程的进程则称作父进程。子进程又可以创建自己的子进程,从而形成一棵有向的进程树,即进程图。进程创建原语的主要任务是创建进程和控制块PCB。具体操作过程是:先从PCB合中申请一个空闲的PCB,再为新进程分内存等资源,并根据父进程提供的参数和分配到的资源情况来对 PCB 进行初始化,最后各新进程插入就绪队列。
终止:当进程完成任务或遇到异常情况和外界干预需要结束时,应通过进程终止原语来终止进程。终止进程的实质是收回PCB。具体操作过程是:找到要终止进程的PCB:若该进程正在执行,则终止它的执行,并设置重新调度标志;终止属于该进程的所有子孙进程; 释放终止进程所拥有的全部资源;将终止进程移出它所在的队列并收回PCB。
阻塞和唤醒:当正在执行的进程需要等待某种事件的完成或本身无新工作可做时,应调用阻塞原语将自己从执行状态转换成阻塞状态。具体的操作过程是:停止进程的执行,将其状态改为阻塞状态,并把它的PCB插入相应的阻塞队列,转调度程序重新调度。当阻塞进程所等待的事件完成时,应调用唤醒原语将该进程的状态从阻塞状态转换成就绪状态。具体的操作过程是:在阻塞队列中移出该进程的PCB,将其设置成就绪状态,并把它插入就绪队列。
挂起和激活:挂起具体的操作过程是:若进程处于活动阻塞状态,则将它的状态转换成静止阻塞状态;否则,将它转换成静止就绪状态;将PCB复制到指定的内存区域供用户或父进程考查;若挂起前进程正在执行,则转调度程序重新进行进程调度。如果挂起是为了对换,则挂起进程时还必须将它换出到外存中。
系统可利用激活原语激活一指定进程。具体的操作过程是:若进程处于静止阻塞状态:则将它转换成活动阻塞状态,否则将它转换成活动就绪状态;若进程转换成活动就绪状态,而系统又采用抢占调度策略,则应检查该进程是否有权抢占CPU,若有则应进行进程调度。同样,如果挂起是为了对换,则在激活挂起的进程时还必须将它调入内存。
9、 临界资源与临界区的概念
在计算机中有许多资源一次只能,许一个进程使用,如果多个进程同时使用这些资源,则有可能造成系统的混乱,这些资原被称作临界资源。如打印机。在每个进程中,访问临界资源的那段代码称作临界区。
10、理解进程同步的概念;理解同步机制应遵循的规则
进程同步是指对多个相关进程在执行次序上进行协调,它的目的是使系统中诸进程之间能按照一定的规则(或时序),共享资源和相互合作,从而使程序的执行具有可再现性。用来实现同步的机制被称作同步机制。
在多道程序的环境下,进程之间存在着以下两种形式的制约关系:
(1)间接相互制约。这种制约主要源于资源共享。例如,有两个进程A和B,如果在进程A提出打印请求时,系统已将打印机分配给进程B,则进程A将处于阻塞状态;等进程B将打印机释放后,才唤醒进程A。
(2)直接相互制约。这种制约主要源于进程合作。例如,有一输入进程D通过单缓冲向计算进程C提供数据。当该缓冲空时,计算进程C因不能获得所需数据而阻塞,当进程D把数据送入缓冲时,便将C唤醒;反之,当缓冲区满时,进程D因不能再向缓冲区中投放数据而阻塞,当进程C将缓冲内数据取走时应唤醒 D。
同步机制应遵循的规则:
用来实现互斥的同步机制必须遵循下述四条规则:
(1)空闲让进。临界资源空闲时,应允许一个请求进入临界区的进程立即进入自己的临界区,以便有效地利用资源。
(2)忙则等待。当临界资源正被访问时,其他要求进入临界区的进程必须等待,以保证对临界资源的互斥使用。
(3)有限等待。任何要求访问临界资的进程应能在有限的时间内进入自己的临界区,以免“死等”。
(4)让权等待。不能进入临界区的进程应立即释放 CPU,以免“忙等”。
11、信号量正负值的物理意义,理解 wait 和 signal 原语的内涵
(1)整型信号量
(2)记录型信号量:含有指针
12、AND 型信号量的定义,Swait 和 Ssignal 操作
AND同步机制的基本思想:将进程在整个运行跟过程中需要的所有资源,一次性全部分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其它所有可能为之分配的资源也不分配给它(同时申请,同时释放),亦即对多个临界资源分配,采取原子操作方式:要么全部分配出去,要么一个也不分配。
在wait操作中,增加了一个“AND”条件,称为同时wait操作即Swait (Simultaneous wait).signal操作中,也增加了一个“AND”条件,Ssignal。
使用模板:
13.利用信号量机制解决互斥、同步、前趋关系等问题 (大题)
1.前驱关系 例题:
2.消费者-生产者问题:
做此类题,先弄清有多少个进程,然后分析同步条件和互斥条件,最后就是定义信号量和使用PV操作(记录型信号量)
//mutex是互斥信号,使得生产者和消费者只有一个能在缓冲池上更改产品数量
//empty是表缓冲池中有多少空位
//full即最多能容纳多少个产品,表当前缓冲池有多少个产品
//wait()就相当于把参数值-1
//signal()就相当于把参数值+1
semaphore mutex = 1,empty = n,full = 0;
void producer{
do{
//生产一个产品
wait(empty);
wait(mutex);
//放入一个产品到缓冲池
signal(mutex);
signal(full);
}while(true);
}
void comsumer{
do{
//消费一个产品
wait(full);
wait(mutex);
//从缓冲池拿走一个产品
signal(mutex);
signal(empty);
}while(true);
}
注:1.在每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对地出现;
2.对资源信号量empty和fuIl的wait和signal操作,同样需要成对地出现,但它们分别处于不同的程序中;
3.在每个程序中的多个wait操作顺序不能颠倒!!!应先执行对资源信号量的wait操作,然后再执行对互斥信号量的wait操作,否则可能引起进程死锁。
生产者:先wait(empty),再signal(full)
消费者:先wait(full),再signal(empty)
3.哲学家就餐问题:
1.同步规则:
(1)每个哲学家必须拿到两只筷子才能吃通心粉;(2)每个人只能直接从自己的左边或右边去取筷子。
2.谁是进程?谁是临界资源?
(1)5个哲学家是5个进程,每个哲学家的动作:拿筷子,吃通心粉,放下筷子。
(2)筷子是临界资源,每个筷子都是一种资源,在一段时间内只允许一位哲学家使用。
3.利用记录型信号量,五只筷子需要定义五个信号量。为了编程方便,我们可以定义一个具有5个元素的信号量数组。每个数组元素表示是一个信号量。所有信号量初值均为1。
其描述如下:semaphore chopstick[5]={1,1,1,1,1};
拿筷子:wait(chopstick[i]); wait(chopstick [i+1]);
放下筷子:signal(chopstick[i]);signal(chopstick [i+1]);
4.下面程序会死锁
5.解决方法
4.读者-写者问题:
//rmutex是关于读者与读者直接对于readcount(正在读文件的读者的个数)更改的互斥信号
//mutex是关于读者与写者不能同时进入缓冲池的互斥信号
semaphore rmutex = 1,mutex = 1;
int readcount = 0;
void reader(){
do{
wait(rmutex);
if(readcount == 0) wait(mutex);//只有当缓冲池中读者个数为0时才用更改mutex
readcount ++;
signal(rmutex);
//读文件
wait(rmutex);
readcount --;
if(readcount == 0) signal(mutex);//只有当缓冲池中读者个数为0时才用更改mutex
signal(rmutex);
}while(true);
}
void writer(){
do{
wait(mutex);
//写文件
signal(mutex);
}while(true);
}
14.什么是进程通信?进程通信的类型;什么是高级通信?高级通信都有哪几种类型?消息缓冲队列通信属于什么类型的通信?
1.进程通信是指进程之间的信息交换。进程之间的互斥和同步,可以在进程间交换一定的信息,也可看作是一种进程通信,但由于其交换的信息量少、通信的效率低以及实现方式对用户不透明而被归结为低级通信。为了能在进程间高效地交换大量的信息,引入了高级通信.
2.高级通信是指用户可直接利用操作系统所提供的一组通信命令(原语),高效地传送大量数据的一种通信方式。它又被分为共享存储器系统、管道通信、消息传递系统以及客户机-服务器系统四大类。
剪切板是共享存储器系统
管道通信主要解决下面三个问题:互斥,同步,对方是否存在
消息缓冲队列通信机制属于直接消息传递系统,采用直接通信方式由美国的Hansan提出,并在RC4000系统上实现,广泛应用于本地进程之间的通信。
4.客户机-服务器系统。该通信机制已广泛应用于网络环境的各种应用领域,其实现方式主要有套接字、远程过程调用和远程方法调用三种类型。
15.什么是线程?线程的数据结构是什么?为什么引起线程?
线程的概念是在 20世纪80年代中期提出的,它的引入目的是为了减少程序在并发执行时所付出的时空开销,从而使OS具有更好的并发性(为了使内存中的多道程序能够正确地并发执行)。在多线程OS中,将拥有资源的基本单位与调度和分派的基本单位分开处理,此时,一个进程中含有一个或多个相对独立的线程,进程只是拥有资源的基本单位,而不再是一个可执行的实体:每个线程都是一个可执行的实体,即CPU调度和分派的基本单位是线程。
线程由线程标识符、程序计数器、一组寄存器的值和堆栈组成,除了上述在运行中必不可少的资源外,线程基本上不拥有系统的资源,但它可以和属于同一个进程的其他线程共享进程所拥有的全部资源,如进程的代码段、数据段、已打开的文件、定时器和信号量机构等。每个线程都是一个可执行的实体,不同进程中的多个线程以及同一个进程内的多个线程均可以并发地执行。由于线程基本不拥有资源,因此,创建线程时不需要另行分配资源、终止时也不需要进行资源的回收,而切换时也大大减少了需保存和恢复的现场信息,因此,线程的创建、终止和切换都要比进程迅速且开销小。由于同一进程内的各个线程可以共享该进程所占用的内存空间和打开的文件,因此,这些线程间的通信也非常简便和迅速。
16.线程和进程的区别是什么?(从调度性,并发性,系统开销,拥有资源等方面说明)
17.一些题目
1.在操作系统中为什么要引入进程概念?它会产生什么样的影响?
答:在操作系统中引入进程概念,是为了实现多个程序的并发执行。传统的程序与其他程序并发执行时,其执行时结果不可再现,因此,传统的程序不能与其他程序并发执行,只有在为之创建进程后,才能与其他程序(进程)并发执行。这是因为并发执行的程序是“停停走走”地执行,只有在为它创建进程后在它停下时,方能将其现场信息保存在它的PCB中,待下次被调度执行时,再从PCB中复CPU现场而继续执行,而传统的程序却无法满足上述要求。
建立进程所带来的好处是多个程序能并发执行,这极大地提高了资源利用率和系统吞包括进程控制块及协调各运行的机构所占用的内吐量。但管理进程也需付出一定的代价,存空间开销,以及为进行进程间的切换同步及通信等所付出的时间开销。
2.重要!
状态1不会立即引起其他状态转换,但是其他3个均有可能立即引起状态1。
3.信号量的使用
semphare empty1 = 1,empty2 = 1,full1 = 0,full2 = 0;
void p1(){
do{
//从磁盘读一个记录
wait(empty1);
//将记录写入缓冲区1
signal(full1);
}while(true);
}
void p2(){
do{
wait(full1);
//从缓冲区1取一个记录
signal(wait1);
wait(empty2);
//将记录复制到入缓冲区2
signal(full2);
}while(true);
}
void p3(){
do{
//从缓冲区2读一个记录
wait(full2);
//打印
signal(empty2);
}while(true);
}
标签:管理,signal,程序,信号量,线程,进程,第二章,wait
From: https://blog.csdn.net/honghong______/article/details/144525797