博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2.1进程与线程
阅读量:3958 次
发布时间:2019-05-24

本文共 3598 字,大约阅读时间需要 11 分钟。

1.进程的概念、组成、特征

1.1进程的概念

程序:是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合。

进程:是动态的,是程序的一次执行过程,同一个程序多次执行会对应多个进程
进程实体(进程映像):是进程某一时刻的实体,它是静态的

1.2进程组成

1.2.1PCB(给操作系统使用)

PCB:为了使参与并发执行的程序(含数据)能独立地运行,必须为之配置一个专门的数据结构,称为进程控制块(PCB)。系统利用PCB来实现进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息。PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB

1.2.1.1PID

PID:当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”—— PID(Process ID,进程ID)

1.2.2程序段(给进程使用)

程序的代码(指令序列)

1.2.3数据段(给进程使用)

运行过程中产生的各种数据(如:程序中定义的变量)

1.3进程的特征

1.3.1动态性

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

1.3.1并发性

内存中有多个进程实体,各进程可并发执行

1.3.1独立性

进程是能独立运行、独立获得资源、独立接受调度的基本单位这里有点小问题,学完进程调度回来总结

1.3.1异步性

各进程按各自独立的、不可预知的速度向前推进,操作系统要提供"进程同步机制"来解决异步问题

1.3.1结构性

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

2.进程的状态与转换

2.1进程的状态

2.1.1创建态

进程正在被创建时,它的状态是“创建态”,在这个阶段操作系统会为进程分配资源、初始化PCB

2.1.2就绪态

当进程创建完成后,便进入“就绪态”, 处于就绪态的进程已经具备运行条件, 但由于没有空闲CPU,就暂时不能运行

2.1.3运行态

如果一个进程此时在CPU上运行,那么这个进程处于“运行态”。CPU会执行该进程对应的程序(执行指令序列)

2.1.4阻塞态

在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入“阻塞态” 当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行

2.1.5终止态

一个进程可以执行 exit 系统调用,请求操作系统终止该进程。 此时该进程会进入“终止态”,操作系统会让该进程下CPU, 并回收内存空间等资源,最后还要回收该进程的PCB。 当终止进程的工作完成之后,这个进程就彻底消失了。

2.2进程状态的转换

在这里插入图片描述

2.3进程的组织(了解)

2.3.1链接方式

在这里插入图片描述

2.3.2索引方式

在这里插入图片描述

3.进程通信

顾名思义,进程通信就是指进程之间的信息交换。 进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另 一个进程的地址空间。

3.1共享存储

两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现)。操作系统只负责提供共享空间和同步互斥工具(如P、V操作)。

在这里插入图片描述

3.1.1基于数据结构的共享

基于数据结构的共享:比如共享空间里只能放 一个长度为10的数组。这种共享方式速度慢、 限制多,是一种低级通信方式

3.1.2基于存储区的共享

基于存储区的共享:在内存中画出一块共享存 储区,数据的形式、存放位置都由进程控制, 而不是操作系统。相比之下,这种共享方式速 度更快,是一种高级通信方式。

3.2管道通信(属于文件系统)

“管道”是指用于连接读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区。

在这里插入图片描述

  1. 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
  2. 各进程要互斥地访问管道。
  3. 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
  4. 如果没写满,就不允许读。如果没读空,就不允许写。
  5. 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。
  6. 管道的数据一旦读出即消失,因此只能有一个读进程。但是写进程可有多个

3.3消息传递

进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。

在这里插入图片描述

3.3.1直接通信方式

消息直接挂到接收进程的消息缓冲队列上

在这里插入图片描述

3.3.2间接通信方式

消息要先发送到中间实体(信箱)中,因此 也称“信箱通信方式”。Eg:计网中的电子 邮件系统

在这里插入图片描述

3.4文件映射

3.5套接字

4.线程的实现方式和多线程模型

4.1线程的实现方式

4.1.1用户级线程

早期的操作系统(如:早期Unix)只支持进程, 不支持线程。当时的“线程”是由线程库实现的

在这里插入图片描述

  1. 用户级线程由应用程序通过线程库实现, 所有的线程管理工作都由应用程序负责(包括线程切换)
  2. 用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
  3. 在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。 “用户级线程”就是“从用户视角看能看到的线程”

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

缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可 在多核处理机上并行运行。

4.1.2内核级线程

由操作系统支持的线程

在这里插入图片描述

  1. 内核级线程的管理工作由操作系统内核完成。
  2. 线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才 能完成。
  3. 操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块), 通过TCB对线程进行管理。“内核级线程”就 是“从操作系统内核视角看能看到的线程”

优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核 处理机上并行执行。

缺点:一个用户进程会占用多个内核级线程, 线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

4.1.2.1多线程模型

4.1.2.1.1一对一模型

一对一模型:一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同 数量的内核级线程。

在这里插入图片描述

优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。

缺点:一个用户进程会占用多个内核级线程, 线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

4.1.2.1.2多对一模型

多对一模型:多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

在这里插入图片描述
优点:用户级线程的切换在用户空间即可完 成,不需要切换到核心态,线程管理的系统 开销小,效率高
缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可 在多核处理机上并行运行

4.1.2.1.3多对多模型

多对多模型:n 用户及线程映射到 m 个内核级线程(n >= m)。每个用户进程对应 m 个内核级线程。

在这里插入图片描述
克服了多对一模型并发度不高的缺点(一个阻 塞全体阻塞),又克服了一对一模型中一个用线程库用户进程占用太多内核级线程,开销太大的缺点。

5.补充

1.线程包含CPU现场,可以独立执行程序

2.线程没有自己独立的地址空间,它共享其所属进程的空间
3.进程与程序的根本区别是静态和动态特点。
4.程序封闭性是指进程执行的结果只取决于进程本身,不受外界影响。
5.C语言编写的程序在使用内存时一般分为三个段,它们一般是正文段(即代码和赋值数据段)、数据堆段和数据栈段。二进制代码和常量存放在正文段,动态分配的存储区在数据堆段,临时使用的变量在数据栈段。由此,我们可以确定全局赋值变量在正文段赋值数据段,未赋值的局部变量和实参传递在栈段,动态内存分配在堆段,常量在正文段,进程的优先级只能在PCB内。BDDCBA
在这里插入图片描述
6.只有从运行态到阻塞态的转换是由进程自身决定的。
7.对进程的管理和控制功能是通过执行各种原语来实现的,如创建原语等。
8.同一进程或不同进程内的线程都可以并发执行
9.假定系统进程请求一次I/O操作后,将使进程状态从运行态变成阻塞态;系统进程所请求的一次I/O操作完成后,将使进程状态从阻塞态变为就绪态。
在这里插入图片描述
10.某进程退出临界区后,之前因需要进入该临界区而被阻塞的有关进程会被唤醒

转载地址:http://mzmzi.baihongyu.com/

你可能感兴趣的文章
centos 7 yum源文件配置详解及163 yum源更换
查看>>
PHP统计当前网站的访问人数,访问信息,被多少次访问。
查看>>
Windows10远程报错CredSSP加密oracle修正
查看>>
Windows server 2016 设置多用户登陆
查看>>
偶然发现的面包屑
查看>>
每天自动升级你的Centos
查看>>
WDCP v3版本的小工具集
查看>>
CentOS 7 下挂载NTFS文件系统磁盘并设置开机自动挂载
查看>>
Mysql修改最大连接数&重启
查看>>
华为交换机划分vlan
查看>>
CentOS 6.6 搭建Zabbix 3.4.8 过程
查看>>
make: *** No targets specified and no makefile found. Stop.解决方法
查看>>
安装zabbix 3.4版本编译报错configure: error: Unable to use libevent (libevent check failed) 解决办法
查看>>
一行代码更改密码
查看>>
非插件实现cookie版Typecho文章阅读次数统计功能
查看>>
非插件实现Typecho语法高亮
查看>>
windows 下 netsh 实现 端口映射(端口转发)
查看>>
两个好用的命令行工具 watch 和 rsync
查看>>
信安入门神级书单
查看>>
【IPFS指南】IPFS的竞争对手们(一)
查看>>