操作系统之进程与线程

进程概念
进程控制
进程间通信
线程
进程概念
什么是进程

例如:用C语言编写一个hello world程序,程序开始运行的时候。
●进程指一一个正在执行的程序。
■程序代码(称为文本段或者代码段)
■当前的活动(包括程序计数器、寄存器的内容)
■数据段(包括全局变量)
■栈(包括函数参数、 返回地址和局部变量等临时参数)
■堆(进程运行期间动态分配的内存)
为了更好的理解举两个例子:
●1.做蛋糕:
假设我们完全不会做蛋糕,首先我们会在网上找食谱。食谱里面会告诉我们需要准备什么食材,步骤是什么?我们按照食谱所说的步骤一步一步加工原料,最后做出一个蛋糕。
原料相当于数据
食谱相当于程序
食谱中的步骤相当于指令
人相当于程序运行过程中的CPU
进程就是做蛋糕一系列过程中的总和
●进程不只是程序代码,还包括当前的活动以及堆栈段和数据段
●程序是被动的实体,进程是活动的(active)实体

在这里插入图片描述
进程是可以中断的
●2可重入程序
所谓“可重入”是指能被多个程序同时调用的程序。
■它是纯代码的,在执行过程中自身不会改变。调用它的程序提供工作区,因此可重入的程序,可以同时被几个程序调用。
●在多道程序设计系统中,编译程序是可重入的程序,它可以同时编译若干个程序。
同一个程序在处理不同的数据时可以构成不同的进程

进程控制
进程创建

●进程在执行过程中通过系统调用创建进程。
■如果一个 进程创建了另一个进程,前者称为父进程,后者称为子进程。
■一个进程只有一一个父进程,但是可以有零个或多个子进程。因此,进程和进程之间会形成一一个 进程树。
●进程创建的原因
系统初始化
执行了创建进程的系统调用
用户请求创建一个新进程
一个批处理作业的初始化
在这里插入图片描述

进程创建系统调用

●UNIX进程创建
■fork()
创建新的子进程,子进程与父进程共享地址空间。
父子进程继续执行fork()之后的代码。
■exec()
必须为执行exec()的进程分配新的存储空间。
●Windows进程创建
■ CreateProcess()
父子进程拥有不同的存储空间。

进程终止

●进程终止自己(自愿的)
使用exit系统调用
■父进程可使用wait系统调用得知终止进程的返回状态
●父进程终止子进程(非自愿的)
■Windows使用TerminateProcess()系统调用
●操作系统终止进程(非自愿的)
■引用不存在的内存,除零
级联终止:父进程终止,子进程只好终止,此操作由操作系统进行
在这里插入图片描述

进程的阻塞与唤醒

●进程阻塞
■原因:请求系统服务;启动某种操作;新数据尚未到达,无新工作可做。
■进程进入等待队列,进程的状态从运行变成等待。
●进程唤醒
■原因:被阻塞的进程等待的事件到来,或者由其他进程唤醒。
■被唤醒的进程进入就绪状态。

进程间通信

●管道(pipe)
■管道是一个环形缓冲区,两个进程以生产者/消费者模型通信
■共享文件
■写进程向管道写
■读进程从管道读
普通管道
●普通管道只能用于父子进程之间
■父进程创建一个管道与子进程通信
■子进程从父进程继承管道
■父子都会关闭自己不需要的管道端口
■ Windows中称之为匿名管道
■通信是单向的
命名管道
●命名管道不需要通信的进程之间有父子关系。
■多个进程可以使用命名管道进行通信
■即便这些进程结束执行,命名管道依然存在
共享内存系统
●要通信的进程建立共享内存区域
■进程间通信最快的形式。
■多个进程共享虚存中一个内存块
■进程读写此内存块的指令与读写其它内存块的指令相同。
消息传递
●系统至少提供两个原语实现消息传递
■发送原语send和接收原语receive
●消息长度可为定长,也可为变长。
●为实现消息通信,须存在通信线路。

●原语
●由若干条指令组成的一个指令序列,用于实现某个特定的操作功能。
●一种广义指令,相当于扩充了机器指令集。
●顺序执行、不可分割

直接通信

●send原语包括指定目的进程的标识符
■send(P,message)
●receive原语有两种实现方案:
■receive(Q,message)
■能够事先知道期望得到哪个进程的消息1
当接收操作完成后,receive原语能够 使用消息
来源的参数返回值得知消息源

间接通信

间接通信
●通过邮箱或者端口实现发送和接收
■send(A,message )和receive(A,message)
●邮箱可以为进程或者操作系统所拥有
同步问题
●Send和receive可以是阻塞的(称为同步) 也可以是非阻塞的(称为异步)。
●阻塞send,阻塞receive
■发送者和接收者被阻塞直到完成消息交付也称:会合/集合点(rendezvous)
●无阻塞send,阻塞receive
■发送者连续处理,例如尽快地发送消息
■接收者被阻塞直到所需的消息到达
●无阻塞send,无阻塞receive不要求任何一方等待
消息缓冲
●为了能让消息成功地发送,消息总是驻留在临时的队列中,称为消息队列
■零容量
发送必须阻塞直到接收者收到消息
■有限容量
如果队列不满,发送可以把消息放在队列中可以,不必等待;如果队列满,发送必须阻塞等待队列可用”无限容量发送从不阻塞。

线程

在这里插入图片描述
什么是线程
线程又称轻量级进程(LWP),是进程内的一条运行线使用CPU的基本单元,
由线程ID、程序计数器、寄存器集合和栈组成同一进程的线程共享进程
的代码段、数据段和其他资源。
线程的分类
在这里插入图片描述
在这里插入图片描述
在混合系统中,线程创建完全在用户空间中完成,现成的调度和同步也在应用程序中进行。
一个应用程序中的多个用户及线槽被映射到一些(小于或者等于用户级线程的数目)内核到线程上。程序员可以为特定的应用程序和处理器调节内核级线程的数目,以达到最佳效果。
在混合方法中,同一个应用程序中的多个线程可以在多个处理器上并行的运行,某个会引起阻塞的系统调用不会阻塞整个进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值