进程控制

知识点:进程概念:程序的运行状态,包括数据,代码,pcb,堆栈等内存空间

进程的状态与转换:三种基本状态和四种主要转换

进程控制:进程的创建,撤销,激活,挂起等操作

进程组织:pcb的数据结构,就绪队列,多个阻塞队列

进程间通信:共享存储系统,消息传递系统,管道通信

线程概念和多线程模型:线程的概念,线程的运用,线程的分类,线程的数据结构等

处理机调度:为什么要调度,调度的实质,算法以及分派程序等

调度时机,分派过程:调度何时激活,如何调度,上下文切换的概念和执行过程

调度的基本准则:公平性,优先策略,大型的批处理系统以周转时间、吞吐量和处理机利用率为指标;交互式系统以响应时间和符合用户习惯为准则;实时系统以截止时间和保证周期性任务为准则。

调度方式:作业调度(宏观调度),内外存交换调度(中级调度),进程线程调度(微观调度)

典型调度算法:先来先服务调度算法,短进程短线程优先调度算法,时间片轮转调度算法,优先级调度算法,高响应比优先调度算法,多级反馈队列调度算法

同步与互斥:进程间竞争与合作形成了同步和互斥的基本关系

实现临界区互斥的基本方法:同步的四个基本原则

软件实现方法:标志法,彼得森算法

硬件实现算法:ts,swap方法

信号量:pv原语的含义,自我阻塞,阻塞队列,唤醒操作,互斥信号量,资源信号量等

管程:管程的概念,封装,管程的实现方法和管程的使用

经典同步问题:生产者消费者问题,读写者问题,哲学家进餐问题

死锁:死锁的定义与饥饿的区别,死锁产生的原因和死锁产生的四个必要条件

死锁的处理方法:四种处理方法

1、鸵鸟算法,不处理

2、死锁预防,破坏死锁出现的条件,条件有四种:互斥条件(只允许一个进程使用某种资源),占用并请求另一种资源,非剥夺条件,循环等待

将独享设备改成共享设备,如打印机。一次性申请所有资源,破坏非剥夺条件,现在拿不到就释放已有资源,破坏循环条件,注意顺序。

采用定时锁lock.trylock(timeout)是一种方法,特别的对于数据库锁要在一个连接里加锁解锁否则会解锁失效

3、死锁避免:系统安全状态,银行家算法

4、死锁检测和解除:检测方法有资源有向图,资源矩阵法,死锁的检测方法有剥夺资源法,进程回退法,撤销进程法和重启系统法。

1、进程概念:操作系统中最核心的概念是进程,进程是对正在运行的程序的一个抽象。操作系统的其它所有内容都是围绕进程展开的。

进程是系统资源分配的最小单位,是系统中程序动态运行的过程,包括代码段数据段和堆栈段和进程控制块。进程的特征:动态性,进程具有一定的生命周期,由创建而产生,由调度而运行,因为得不到资源而暂停运行,由撤销而消亡。并发性;独立性;异步性:所以必须要有特别的同步机制来协调运行


进程并发改善了操作系统的资源利用率和操作系统的吞吐量,但是操作系统也为此付出了代价

进程的内存开销:系统必须为每个进程建立进程控制快pcb,通常常驻内存,此外,为了协调并发运行,系统还要进行进程管理机构,解决同步互斥,死锁问题,会占用可观的内存空间

进程的时间开销:在内存切换时,系统要保存正在运行的进程的现场,并且为即将运行的进程设置新现场,需要系统本身花费更多的时间处理(处理机时间)

2、进程的状态与转化:三态模型:就绪(进程已经分配到除了处理机以外的其它资源,可能有很多就绪进程排成就绪队列),运行(进程占用处理机,运行程序,单处理机系统只能有一个进程处于运行状态,多处理机系统可能有多个进程处于运行状态),阻塞(进程等待某件事情发生而处于暂停状态,如等待io,等待数据到达,等待缓冲空间)

五态模型,增加了新建状态(进程刚刚建立还没有被送入就绪队列)和终止状态(进程结束,已经移除就绪队列,但是还没有撤销时的状态)

就绪挂起和阻塞挂起,将长时间不用的进程放在外存,以减少资源浪费,阻塞挂起可以在外存转换成就绪挂起,运行的程序挂起后直接是就绪挂起

状态转换:四种主要的:就绪到运行:调度程序为就绪队列进程分配处理机;运行到就绪:因时间片用完或在抢先调度方式中优先级高的进程到来,当前进程被强制撤下处理机;运行到阻塞:因程序需要等待某件事情而暂停;阻塞到就绪:事件发生了,其它状态转换:新建到就绪or就绪挂起,就绪和就绪挂起之间,阻塞和阻塞挂起之间,运行到退出,运行到就绪挂起,阻塞挂起到就绪挂起

3、进程控制机制

操作系统使用原语控制进程状态的改变,原语被认为是机器语言的延伸,是完成特定任务的一段基本程序。原语的操作具有原子性,原子性就是不可拆分的操作,要么全部完成,要么不完成,他的机制是用屏蔽中断实现的。

主要进程原语

1、进城创建原语(系统调用):创建进程的方式有两种,一种是系统程序初始化的时候统一创建,另一种是由进程创建进程(守护进程,大多数时候在休眠,事件发生被唤醒)。创建进程的原语的主要工作是:首先查找pcb表,查询有无空的pcb表项,有则初始化,初始化项目包括进程标识符,进程运行状态和运行程序的起始地址等,如果申请不成功,则返回创建失败信息。也可能是点击鼠标新开程序,也可能是大型批处理机提交作业。

unix系统两步新建进程:fork创建一个和父类相同的进程,exec修改其存储映像使其变为一个新进程,之所以要进行两步是允许孩子进程处理其文件描述符,这样可以完成对标准输入标准输出和标准出错的重定向。

windows中一步createprocess,该系统调用有是个参数,windows中大概有100个左右的系统调用用于处理系统管理,同步以及相关事务

unix有些实现中不可写的内存是共享的,windows中进程一开始就是不同的地址空间。

进程结束:unix exit,w exitprocess,被其他进程杀死 unix kill wterminateprocess

unix 有init进程为根的树形结构,w中没有这种结构,有令牌,父进程可以阿布令牌传递给别的进程

2、进程撤销原语:撤销原语释放进程所占用的各种资源和pcb结构,撤销原语的主要工作是:检查pcb链表,寻找要撤销的进程是否存在,找到了就收回资源和pcb结构,如果进程还有子进程,那么会先撤销子进程。

3、进程阻塞原语:当进程等待某一事件发生的时候通过阻塞原语阻塞自己,进程阻塞原语运行时候,必须先停止进程并保存该进程的处理机现场。将阻塞进程插入到等待队列中,再将控制权交给调度程序,调度程序按照调度算法从就绪队列中选择一个进程投入运行。

4、进程唤醒原语:当进程等待的事件或条件发生时候,等待该事件发生的进程队列的第一个进程被唤醒。被唤醒的进程从相应的等待队列移除,并将其pcb中的状态置为就绪态,进入就绪队列。

5、进程挂起原语:当用户要干预进程活动时,或者系统需要更多的资源,可以将某些进程置于挂起状态或者阻塞状态,挂起原语将进程交换到外存交换区挂起,释放其所占用的内存资源,改写pcb,返回系统

6、进程激活原语:将挂起的程序变为就绪状态,需要重新分配内存,进行内存重定位,改写pcb状态,内存分配信息,程序计数器等

2、进程实体

操作系统中,进程的实体包括:

1、程序:进程要执行的代码

2、数据结构:程序运行需要的内存空间,堆栈静态存储区自由存储区常量存储区

3、进程控制快:进程控制块包含了进程的描述信息(pid、用户标识符)、控制信息(进程当前状态(阻塞原因),优先级,代码运行地址入口,程序外存地址,进入内存时间,处理机占用时间,信号量使用)和资源信息(代码段指针,数据段指针,堆栈段指针,文件描述符)和处理机相关信息(通用寄存器值,地址寄存器值,控制寄存器值,标志寄存器值和和状态字),是进程动态特性对的集中反应。pcb表项的个数是有限的,限制了系统中进程个数的最大值不能超过其最大值。

连接方式:具有相同状态的pcb,用其中的链接地址连接成一个队列,这样形成就绪队列,阻塞队列等等。

索引方式:根据所有进程的状态,建立几张索引表,例如就绪索引表,阻塞索引表

3、进程键通信

前面我们学习了一下进程,我们知道多进程间的地址空间相对独立。进程与进程间不能像线程间通过全局变量通。 如果想进程间通信,就需要其他机制。

    
    常用的进程间通信方式有这几种

A.传统的进程间通信方式
无名管道(pipe)、有名管道(fifo)和信号(signal)

B.System v IPC对象
共享内存(share memory)、消息队列(message queue)和信号灯(semaphore)

C.BSD
套接字(socket)

1、管道:管道分为有名管道和管道,其中管道只允许有亲缘关系的进程之间的通信,有名管道则没有这样的限制,单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。管道是一种半双工的通信方式,数据只能单向流动,如果要实现双方通信的画要实现两个管道。管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1]。其中fd[0]固定用于读管道,而fd[1]固定用于写管道,一般文件I/O的函数都可以用来操作管道(lseek除外)。


# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值