《计算机操作系统》(第4版)第2章 进程的描述与控制 复习笔记

news2024/9/22 4:26:20

第2章 进程的描述与控制

一、前趋图和程序执行

1. 前趋图

(1)定义

前趋图是指一个有向无循环图,可记为DAG,  它用于描述进程之间执行的先后顺序。

(2)图形表示

前趋图如图2-1所示。

图2-1 前趋图

2. 程序的执行

(1)程序顺序执行时的特征

①顺序性。

②封闭性。

 可再现性。

(2)程序并发执行时的特征

①间断性。

②失去封闭性。

③不可再现性。

二、进程的描述

1. 进程的定义和特征

(1)进程的定义

对于进程的定义,从不同的角度可以有不同的定义,其中较典型的定义有:

①进程是程序的一次执行。

②进程是一个程序及其数据在处理机上顺序执行时所发生的活动。

③进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单 位。

(2)进程的特征 ①动态性

动态性是进程的最基本的特征。

②并发性。

③独立性。

④异步性。

(3)进程实体

通常,进程实体由程序控制块 (PCB) 、程序段、数据段三部分组成。

2. 进程的状态及转换

(1)进程有三种基本状态:就绪状态、执行状态、阻塞(等待)状态。图2-2示出了基本状态的转换图。

图2-2 进程的三种基本状态及转换

(2)引入进程的创建状态和终止状态后,图2-3示出了进程的五种状态及转换关系图。

图2-3 进程的五种状态及转换

3. 挂起操作和进程状态的转换

(1)当挂起操作作用于某个进程时,该进程将被挂起,意味着此时该进程处于静止状态。如果进程正在执 行,它将暂停执行。若原本处于就绪状态,则该进程此时暂不接受调度。与挂起操作对应的操作是激活操作。

(2)引入挂起原语操作后三个进程状态的转换

①活动就绪→静止就绪。

②活动阻塞→静止阻塞。

③静止就绪→活动就绪。

④静止阻塞→活动阻塞。

(3)引入挂起操作后五个进程状态的转换如图2-4所示。

图2-4 具有创建、终止和挂起状态的进程状态图

4.  进程控制块 (PCB)

(1)概念

PCB是一记录型数据结构,它作为进程实体的一部分,记录了操作系统所需的、用于描述进程的当前情况 以及管理进程运行的全部信息。

(2)进程控制块中的信息

处理机状态

进程调度信息

进程控制信息

通用寄存器

进程状态

程序和数据的地址

指令计数器

进程优先级

进程同步和通信机制

程序状态字

进程调度所需的其它信息

资源清单

用户栈指针

事件

链接指针

①线性方式。

②链接方式。

③索引方式。

三、进程控制

进程控制是进程管理中最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法 继续运行的进程置于阻塞状态、负责进程运行中的状态转换等功能。

 、进程同步

1. 进程同步的基本概念

(1)进程同步机制的主要任务

对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资 源,并能很好地相互合作,从而使程序的执行具有可再现性。

(2)临界资源

一次仅允许一个进程使用的资源称为临界资源。

(3)临界区

将在每个进程中访问临界资源的那段代码称为临界区。

(4)同步机制应遵循的规则

①空闲让进。

②忙则等待。

③有限等待。

④让权等待。

2. 硬件同步机制

(1)关中断。

(2)利用Test-and-Set 指令实现互斥。

(3)利用Swap 指令实现进程互斥。

3. 信号量机制

(1)整型信号量 ①定义

把整型信号量定义为一个用于表示资源数目的整型量S。

②描述

通过两个标准的原子操作wait(S)     signal(S)     来访问S,   两个操作一直被分别称为P V 操作。wait  signal 操作可描述如下:

wait(S)
{
while(S<=0); S--;
/*do no-op*/
signal(S) {
}

(2)记录型信号量

①定

记录型信号量机制采用了记录型的数据结构,是一种不存在“忙等”现象的进程同步机制。

②描述

typedef struct
{
    int value;    //代表资源数目的整型变量
    struct process_control_block *list;//一个链接所有等待进程的进程链表指针
}semaphore;

//wait(S)和signal(S)操作可描述如下:

wait(semaphore*S)
{
    S->value--;
    if(S->value<0)
        block(S->list);
}
signal(semaphore *S) 
{
    S->value++;
    if(S->value<=0)
        wakeup(S->list);
}

4.经典同步问题-生产者-消费者问题

问题描述:一组生产者进程和一组消费者进程共享一个初始为空、大小为n 个单元的缓冲区。只有当缓冲区 没满时,生产者才可以把消息放入缓冲区,否则必须等待;只有当缓冲区不空时,消费者才可以从中取出消息, 否则必须等待。由于缓冲区是临界资源,只允许一个生产者放入消息或者一个消费者从中取出消息,不允许同时 访问缓冲区。

信号量设置:定义信号量mutex为互斥信号量,初值为1,用于表示互斥访问缓冲区;信号量empty 用于表 示当前缓冲区中可用空间大小,初值为 n;  信号量full 于表示当前缓冲区中已用空间大小,初值为0。

程序描述:

semaphore mutex=1;
semaphore empty=n;
semaphore full=0;
producer()
{       //生产者进程
    while(true)
    {
    //生产一个消息
    p(empty);1/       申请缓冲区中的一个空单元
    p(mutex);//        申请访问缓冲区 //将消息放入缓冲区
    v(mutex);          // 释放互斥信号量
    v(full);       /l 缓冲区中满单元数加一
    }
}
consumer()
{      //消费者进程
    while(true)
    {
        p(fu);          //申请从缓冲区中的满单元取出消息
        p(mutex);          //申请访问缓冲区
        //将消息取出缓冲区
        v(mutex);          // 释放互斥信号量
        v(empty);       1/缓冲区中空单元数加一
    }
}

5. 管程机制

(1)定义

一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程 和改变管程中的数据。

(2)组成

①管程的名称;

②局部于管程的共享数据结构说明;

③对该数据结构进行操作的一组过程;

④对局部于管程的共享数据设置初始值的语句。

五、进程通信

1. 进程通信的概念

(1)进程通信的定义

进程通信是指进程之间的信息交换。

(2)进程通信的分类

进程通信可分为高级进程通信和低级进程通信两种。

2. 高级进程通信的类型

(1)共享存储器系统

①基于共享数据结构的通信方式。

②基于共享存储区的通信方式。

(2)管道通信系统

(3)消息传递系统 (Message  passing  system)

①直接通信方式。

②问接通信方式。

(4)客户机 - 服务器系统 (Client-Server       system)

六、线程的基本概念

1. 线程的引入

(1)进程的两个基本属性

①进程是一个可拥有资源的独立单位;

②进程同时又是一个可独立调度和分派的基本单位。

(2)线程引入原因

减少程序并发执行所需付出的时空开销,使操作系统具有更好的并发性。

2.线程与进程的比较

(1)调度的基本单位

①在传统的OS 中,进程是作为独立调度和分派的基本单位,因而进程是能独立运行的基本单位。

②而在引入线程的OS 中,已把线程作为调度和分派的基本单位,因而线程是能独立运行的基本单位。

(2)并发性

不同进程之间、在一个进程中的多个线程之间或者不同进程中的线程之间都能并发执行。

(3)拥有资源

①进程是系统中拥有资源的一个基本单位。

②线程本身并不拥有系统资源,而是仅有一点必不可少的、能保证独立运行的资源。

(4)独立性

在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。

(5)系统开销

①创建或撤消进程时所付出的开销明显大于线程创建或撤消时所付出的开销。

②线程的切换代价也远低于进程的切换代价。

3.线程的状态和线程控制块

(1)线程运行的三个状态:执行状态,就绪状态,阻塞状态。

(2)线程控制块TCB

线程控制块通常有这样几项信息:

①线程标识符;

②一组寄存器;

③线程运行状态;

④优先级;

⑤线程专有存储区;

⑥信号屏蔽;

⑦堆栈指针。

【说明】在多线程OS 中,线程作为独立运行(或称调度)的基本单位;而进程仍是资源分配的基本单位。

七、线程的实现方式

1.   内核支持线程KST

2.用户级线程ULT

3. 组合方式

组合方式下包括三种不同的模型,如图2-5所示。

图2-5 多线程模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Robot Operating System——创建可执行文件项目的步骤

大纲 初始化环境创建Package代码添加依赖&#xff08;package.xml&#xff09;修改编译描述find_package寻找依赖库指定代码路径和编译类型&#xff08;可执行文件/动态库&#xff09;链接依赖的库完整文件 编译测试总结参考资料 之前我们看到ROS2中&#xff0c;有的Node的实现…

案例 | 生产制造中的直线度测量

关键词&#xff1a;直线度测量仪,直线度 生产中不仅需要评价产品的外观尺寸&#xff0c;还需要对直线度&#xff08;弯曲度&#xff09;等尺寸加以测量。作为一种评价产品直度的重要指标——直线度&#xff0c;能够对其进行检测是非常重要的。 关于直线度&#xff0c;对于一些弯…

初学者使用WordPress可能会遇到的问题以及如何解决

WordPress 作为一个普及度相当广的内容管理系统 (CMS)&#xff0c;对于刚刚开始建立自己第一个网站的初学者来说是非常合适的选择。它不需要你懂编写代码&#xff0c;且对 SEO 友好&#xff0c;管理起来也很方便。然而&#xff0c;许多初学者在使用 WordPress 时会犯一些错误&a…

各厂家BI对比

帆软BI、奥威BI、永洪BI、思迈特BI、亿信华辰BI是国内知名的BI产品&#xff0c;不少企业在选型BI软件时都需要对这些BI软件进行了解&#xff0c;从中选择适合自己的一款。经过过年的发展&#xff0c;这些BI&#xff08;商业智能&#xff09;软件各自在多个行业中都有广泛的应用…

Anti-Bandit Neural Architecture Search for Model Defense

模型防御的Anti-Bandit网络架构搜索 论文链接&#xff1a;https://arxiv.org/abs/2008.00698(ECCV2020) 项目链接&#xff1a;https://github.com/bczhangbczhang/ABanditNAS 模型防御的Anti-Bandit网络架构搜索Abstract1 Introduction2 Related Work3 Anti-Bandit网络架构搜…

前端项目重新打包部署后如何通知用户更新

前端项目重新打包部署后如何通知用户更新 前端项目重新打包部署后如何通知用户更新常用的webSocket解决方案纯前端方案路由拦截多线程main.ts中 创建多线程多线程逻辑处理 前端项目重新打包部署后如何通知用户更新 前端项目重新打包部署后&#xff0c;由于用户没及时更新页面&…

Vue 自定义文字提示框

目录 前言代码演示相关代码文字提示框组件定义组件调用前言 今天开发遇上了一个新的问题,要求写一个带着滑动动画的文字提示框。但是我经常使用的Element-UI组件库只有淡入淡出效果,并且想要修改样式只能全局修改,非常不利于后期的开发。因此,我最终选择直接自定义一个符合…

VAuditDemo文件漏洞

目录 VAuditDemo文件漏洞 一、首页文件包含漏洞 包含图片马 利用伪协议phar:// 构造shell.inc被压缩为shell.zip&#xff0c;然后更改shell.zip 为 shell.jpg上传 二、任意文件读取漏洞 avatar.php updateAvatar.php logCheck.php 任意文件读取漏洞利用 VAuditDemo文件…

Python中使用SQLite数据库的方法4-3

对于数据库的操作&#xff0c;主要包括“增”、“删”、“改”、“查”四种。在Python中使用SQLite数据库的方法4-1_python的sqlite怎么打开-CSDN博客和Python中使用SQLite数据库的方法4-2_python2 sqlite2-CSDN博客中实现增”、“删”和“查”三种操作。 1 带过滤条件的“查”…

C语言基础(七)

1、二维数组&#xff1a; C语言中的数组是一种基本的数据结构&#xff0c;用于在计算机内存中连续存储相同类型的数据。 数组中的每个元素可以通过索引&#xff08;或下标&#xff09;来访问&#xff0c;索引通常是从0开始的。数组的大小在声明时确定&#xff0c;并且之后不能…

在Linux下搭建go环境

下载go go官网&#xff1a;All releases - The Go Programming Language 我们可以吧压缩包下载到Windows上再传到Linux上&#xff0c;也可以直接web下载&#xff1a; wget https://golang.google.cn/dl/go1.23.0.linux-amd64.tar.gz 解压 使用命令解压&#xff1a; tar -x…

Leetcode JAVA刷刷站(57)插入区间

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以遍历给定的区间列表 intervals&#xff0c;并同时构建一个新的列表来存储最终的合并结果。遍历过程中&#xff0c;我们检查当前区间是否与 newInterval 重叠或相邻&#xff0c;并根据需要进行合并。如果不重叠…

虚拟化平台kvm架构 部署kvm虚拟化平台

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

在HarmonyOS中使用RelativeContainer实现相对布局

在应用开发中&#xff0c;布局设计至关重要&#xff0c;尤其是当我们需要处理复杂的界面时&#xff0c;合理的布局设计不仅能够提升界面的美观性&#xff0c;还能够提高应用的性能。在HarmonyOS中&#xff0c;RelativeContainer是一个强大的布局容器&#xff0c;它允许开发者通…

【Qt】 对象树 与 乱码问题

文章目录 1. 对象树在堆上开辟空间 并管理栈上开辟 与 堆上开辟 的区别 2. 乱码问题的解释编码方式的区分出现乱码的原因查看当前文件的编码方式如何处理 文件与 终端 编码方式 不统一 1. 对象树 在堆上开辟空间 并管理 该代码只进行new(在堆上开辟空间) 而没有delete 正常来说…

ES系列二之CentOS7安装ES head插件

CentOS7安装ES head插件 附&#xff1a;Centos7中安装Node出现Cannot find module ‘…/lib/utils/unsupported.js‘问题 删除原本的的npm连接&#xff0c;重新建一个即可。 1、先cd到该node版本中的bin文件夹下,这里装的是12.16.2版本&#xff1a; cd /usr/local/soft/nod…

C语言 之 字符串函数strncpy、ctrncat、strncmp函数的使用

文章目录 strncpy函数的使用strncat函数的使用strncmp函数的使用 strncpy函数的使用 函数原型&#xff1a; char * strncpy ( char * destination, const char * source, size_t num); strncpy与strcpy的区别是&#xff0c;strncpy可以控制需要拷贝的字符数量 1.能够拷贝num个…

为什么使用HTTPS?

HTTPS现在是所有Web活动的首选协议&#xff0c;因为它是用户保护敏感信息的最安全方式。 HTTPS不仅对请求用户信息的网站至关重要。除了用户直接发送的信息外&#xff0c;攻击者还可以从不安全的连接中跟踪行为和身份数据。 HTTP为网站所有者带来的好处除了数据安全之外&…

【Linux网络编程入门】Day5_socket编程基础

socket 编程基础 Linux 下的网络编程&#xff1a;socket 编程&#xff1b; socket是内核向应用层提供的一套网络编程接口&#xff0c;用户基于 socket 接口可开发自己的网络相关应用程序。 ⚫ socket 简介 ⚫ socket 编程 API 介绍 ⚫ socket 编程实战 socket 简介 ​ 套…

微信小程序引入全局环境变量

有时候一套代码要在多个小程序appId下使用,其中又有一些数据(文字)需要做区分.可以使用下面的方法 把要配置的数据以export default 形式导出 在app.js中,引入project.config.0.js文件,将导出的数据放在globalData中 在页面目录中,即可利用getApp()方法使用全局变量 也可以放数…