操作系统笔记-2.1进程的知识

目录


进程的定义

进程一般也称为进程实体(进程映像),由数据段,程序段,PCB(程序控制块)三部分组成

创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上也是是撤销PCB

注意:PCB是进程存在的唯一标志!

进程是进程实体的运行过程(动态性),是系统进行资源分配和调度的最小单位

严格来说:进程实体和进程不一样,进程实体是静态的,进程是动态的


进程的组成

PCB

PCB:操作系统通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息

程序段

程序代码

数据段

程序运行时使用,产生的运算数据,如变量,宏定义常量等


进程的组织

进程的组织讨论的是多个进程之间的组织方式问题

链接方式

按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针

索引方式

根据进程状态的不同,建立几张索引表,操作系统持有指向各个索引表的指针


进程的特征

动态性(最基本特征):进程是程序的一次执行过程,是动态地产生、变化和消亡的

并发性:内存中有多个进程实体,各进程并发进行

独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位

异步性:各进程独立的、不可预知的速度向前推进。OS要提供“进程同步机制”来解决异步问题

结构性:每个进程都配置一个PCB。结构上看,进程由程序段,数据段、PCB组成


进程的状态

三种基本状态

运行态:占用CPU,并在CPU上运行

就绪态:已经具备运行条件,但没有空闲CPU,暂时不能运行

阻塞态(等待态):因等待某一事件,而未能运行

另外两种状态

创建态:进程正在被创建,操作系统为进程分配资源,初始化PCB

终止态:进程从系统中撤销,操作系统回收进程资源,撤销PCB


进程控制

进程控制简单来说就是进程状态的转换

创建进程:需要初始化PCB,分配系统资源

创建态->就绪态:修改PCB内容和相应队列

就绪态->运行态:恢复进程运行环境、修改PCB内容和相应队列

运行态->阻塞态:保存进程运行环境,修改PCB内容和相应队列

运行态->终止态:回收进程拥有的资源,回收PCB

运行态->就绪态:保存进程运行的环境,修改PCB内容和相应队列

阻塞态->就绪态:修改PCB内存和相应队列。如果等待的是资源,则还需为进程分配系统资源

实现进程控制

原语实现进程控制,原语的特点是执行期间不允许中断,有原子操作性

原语使用”关中断指令“和”开中断指令“

开/关中断指令的权限非常大,是只允许在核心态下执行的特权指令

每个原语是三类事情:

1.更新PCB信息

2.将PCB插入合适的队列

3.分配/回收资源


进程通信

进程通信就是进程之间的信息交换

进程是分配系统资源的单位(包括内存地址空间),因此各进程内存空间独立

为了保证安全,一个进程不能直接访问另一个进程的地址空间

但是进程之间的信息交换又必须实现。为了保证安全,操作系统提高一些通信方法

共享存储

在内存中开辟一块共享空间,两个进程对共享空间的访问必须是互斥

基于数据结构的共享:速度慢,限制多,低级通信

基于存储区的共享:数据形式、存放位置由进程控制,而不是操作系统,更快,高级通信

管道通信

  • 一个管道只能半双工通信,所以要实现双向实时通信,则需要设置两个管道
  • 数据以字符流形势写入管道,当管道写满时,写进程的write系统调用将被阻塞,等待都进程将数据取走。当读进程全部取走数据后,管道变空,此时读进程的read()将被阻塞
  • 如果没写满,就不允许读。如果没读空,就不允许写
  • 数据一旦读出,就被管道抛弃,意味着读进程最多只有一个

消息传递

进程间的数据交换以格式化信息(Message)为单位。

进程通过OS提供的“发送消息/接收消息”两个原语进行数据交换

直接通信方式:进程1通过发送原语将信息挂在进程2的消息缓冲队列尾,进程2通过接收原语接收

间接通信方式:消息先要发送到中间实体(信箱)中。因此也称“信箱通信方式”


线程-轻量级进程

一个进程可能需要“同时”做很多事情,而传统进程只能串行,故引入线程,增加并发度

线程是一个基本的CPU执行单元,也是程序执行流的最小单位

引入线程后,进程只作为除CPU之外的系统资源的分配单元

        --如内存地址空间等都是分配给进程的

进程

线程

资源分配、调度

资源分配的最小单位

cpu调度的基本单位

并发性

系统开销

进程切换开销大

线程切换开销小

线程的实现方式

用户级线程

内核级线程

用户级线程应该由应用程序通过线程库实现

内核级线程的管理工作由操作系统内核完成

用户级线程中,线程切换可以在用户态下完成,无需OS干预

线程调度、切换工作由内核负责,内核级线程的切换必需在核心态下完成

所有的线程管理工作应用程序负责(包括线程切换)

内核级线程才是处理机分配的单位

多线程模型

多对一模型:一个内核级线程,多个用户级线程

优点:用户级线程切换在用户态完成,不需要核心态,线程管理系统开销小,效率高

缺点:一个用户级线程阻塞后,整个进程都被阻塞,并发度不高

一对一模型:一个内核级线程对应一个用户级线程

优点:一个线程阻塞后,彼得线程还可以执行,并发能力强。多线程可以在多核机器上并行执行

缺点:一个用户进程占用多个内核级线程,线程切换由OS完成,需要切换核心态,开销大

多对多模型:n用户线程映射到m个内核级线程(n>m)

克服了多对一模型并发度不高的问题,又克服一对一模型中一个用户进程占用太多内核级线程问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值