java实现进程控制块_操作系统:进程管理和IO控制

2023-11-03

一、进程管理

进程管理包括进程控制,进程调度,进程同步与通信,死锁控制四个内容。

(一)进程控制

进程是操作系统中运行的基本单位,包括程序段,数据段和进程控制段。操作系统通过进程控制块(PCB)管理进程。每一个PCB唯一标示一个进程。它存储进程的PID,UID,当前状态等信息,以及进程执行某一时刻的寄存器值,并且指向进程的数据段和程序段。OS把所有PCB链接为一个链表。

进程在刚刚被创建时出于new状态。OS负责申请一块存储空间作为该进程的PCB,在其中填上进程的信息,标示为ready,链接到PCB队列和就绪队列中,此时进程进入"就绪"态。进程调度程序在未来某一时刻将其分配给处理机执行,该进程出于"执行"态,OS将根据PCB中的内容初始化处理机的各个寄存器值,之后进入用户态执行;进程请求I/O或系统调用时将放弃处理机,进入"活动阻塞"态,进程调度程序将当前处理机各寄存器值压栈(存入PCB中,或存入核心栈),将该进程PCB运行队列中移入阻塞队列;当系统调用或I/O完成时被唤醒再次进入活动就绪态,即PCB由阻塞队列链入就绪队列(操作系统如何实现唤醒进程??)。如果在系统调用完成之前,进程被换到外存,相应内存空间被释放,则进程进入"静止阻塞态",这里中级调度程序将和磁盘驱动程序一起,把相应内容拷贝到对换空间,同时释放内存;系统调用完成时若仍在外存中而为未被换入,则出于"静止就绪"态,之后被换入内存可直接进入执行态,或动态就绪态。进程执行完毕后进入"僵死"态,系统将释放内存空间,回收所有资源。

UNIX系统中提供的系统调用中,fork产生一个与父进程完全相同的子进程,在子进程的地址空间中运行;spawn则从文件中装入一个文件作为子进程,在其地址空间运行;exec则从文件中装一个进程到当前进程地址空间,覆盖当前进程执行。

(二)进程调度

这里说的进程调度主要指低级调度,即由调度程序负责完成的,在内存和处理机之间的调度。在文件和内存之间的调度成为高级调度,又叫作业调度,在内存和对换空间的调度称为中级调度,又称对换。低级调度算法主要有:先来先服务FIFO;.短作业优先SJF;.时间片轮转Round Robin;静态优先级调度;多级队列反馈轮转调度。UNIX系统中采用的动态优先级+多级队列反馈轮转调度。具体内容可参见前面的文章。

(三)进程通信

进程通信有直接通信和间接通信,直接通信是两进程直接交换数据或发送信息,间接通信则是把信息发送到一个中间实体中。根据同步方式,可分为:1.发送进程阻塞,接受进程不阻塞;2.发送进程不阻塞,接受进程阻塞;3.发送进程和接收进程都阻塞。

进程通信也分为高级通信和低级通信。

高级通信通常传输数据量较大,包括:消息机制,共享存储区,管道。

1、消息机制:

在消息机制里值得注意的是消息缓冲队列方式。发送进程首先申请一块缓冲区,把消息内容和消息首部填入其中,之后调用send系统调用。send将把该进程的消息内容拷贝到消息缓冲队列中;接受进程首先申请接受缓冲区,之后调用receive系统调用,OS负责把消息缓冲队列中的消息拷贝到该进程空间的缓冲区中。

2、管道通信:

相当于一个队列形式的一个进程在管道尾写,另一个进程在管道头取,管道分为无名管道和有名管道。无名管道是用pipe函数创建的,只能用于子进程之间的通信,有名管道用mkfifo函数创建用于任意两个进程之间通信,对管道的操作相当于对文件的操作比如open函数打开管道close函数关闭管道等。

低级通信包括同步和互斥两种,通过信号量实现,主要针对临界区问题。临界区的互斥访问要遵循4个原则:空闲让进,忙则等待,有限等待,让权等待。主要信号量分为0/1信号量,整型信号量,记录型信号量,AND型信号量和信号量集。经典同步问题有生产者-消费者问题,读者-写者问题,哲学家进餐问题。

信号量:信号量是操作系统提供的管理公有资源的手段,即PV操作。对于独享设备有驱动程序做PV操作。

p操作的过程是:s=s-1;if(s<0){进入等待队列,自己阻塞进程}

v操作的过程是:s=s+1;if(s<0){从等待队列取一个进程;取出的进程进入就绪队列,当前进程该干嘛干嘛}

pv原语不能次序错误,而且必须成对出现。信号量的定义是semaphore mutex;经典同步问题有生产者-消费者问题;读者-写者问题;哲学家进餐问题。

(四)死锁控制

由于进程竞争资源或推进顺序非法,可能会造成进程死锁。死锁有四个必要条件:互斥访问,请求保持,非剥夺,环路等待。打破其中任何一个都可以不出现死锁。对于死锁的处理有三类方法:

1.死锁预防:主要是打破死锁必要条件中的一个。打破请求保持条件,则要求进程在执行之前一次性请求到所有资源才可以执行;打破非剥夺条件,要求进程执行过程中因为缺少资源无法执行时,剥夺所有资源,将其阻塞;打破环路等待条件,则给资源编号,要求进程请求资源的顺序依照编号由高到低进行。

2.死锁避免:指Dijkstra的银行家算法;

3.死锁检测消除:指在发生死锁时检测资源分配图中是否有子环,然后将一个或多个进程挂起,消除死锁;检测算法是NP完全问题,CPU代价较大。

二、输入输出(I/O)管理

(一)   I/O管理概述

1.  I/O管理功能

(1)   动态的纪录各种设备的状态

(2)   设备分配与回收

(3)   实施设备驱动和中段处理的工作

2.  I/O应用接口

(1)  设备和设备控制器的接口:设备和cpu之间不是直接通信的而是夹着一个设备控制器,设备与设备控制器是靠三根线相连的,数据信号线,控制信号线和状态信号线,数据信号线用于在设备和设备控制器之间传送数据信号,控制信号线传送由设备控制器向I/O设备发送控制信号,状态信号线用于传送设备当前状态的信号。

(2)  设备控制器:控制一个或多个I/O设备,其基本功能有接收和识别(cpu发的)命令,数据交换(与cpu或与设备数据交换),标示和报告设备的状态(给cpu发)地址识别,数据缓冲,差错控制。

(3)  设备控制器由三部分组成:设备控制器与处理器的接口(由数据线连接DMR和控制状态寄存器,控制线,和地址线组成),设备控制器与设备的接口(多个设备接口,每个设备接口由数据控制和状态三种信号),I/O逻辑(当cpu启动一个设备时,将启动命令发给I/O逻辑同时通过地址线给I/O逻辑由它进行译码。。译出命令后对所选设备进行控制。所以地址线和控制线是直接跟I/O逻辑相连的。

3.  I/O通道

I/O通道是特殊的处理机。它具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作,它的指令单一主要与I/O操作相关的指令,通道没有自己的内存,它和CPU共享内存。通道又分为字节多路通道,数组选择通道,和数组多路通道。

(1)  数组选择通道:又称告诉通道,在物理上可以连接多个设备,但某一段时间内通道只能选择一个设备进行工作

(2)  数组多路通道:当某设备进行数据传送时,通道只为该设备服务,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java实现进程控制块_操作系统:进程管理和IO控制 的相关文章

  • 用html+js实现一个简单的登录窗口

    文章目录 绘制UI界面 了解text文本框属性 UI界面效果 绘制登录后界面 实现登录验证脚本 运行效果 绘制UI界面 首先我们绘制出基本的不带功能的ui界面 这个界面需要创建一个表单 表单内包含一个username文本框 一个passwo
  • (六十六)支持向量机

    SVM的原理 SVM模型是将实例表示为空间中的点 这样映射就使得单独类别的实例被尽可能宽地明显间隔分开 然后将新的实例映射到同一空间 并基于它们落在间隔的哪一侧来预测所属类别 除了进行线性分类之外 SVM还可以使用所谓的核技巧有效地进行非线
  • java获取resource下的文件路径

    放了文件在 resources 目录下 只想拿到它的路径 详情如下 String path xxx class getClassLoader getResource targetFile txt getPath java获取文件目录 pom
  • 上网被阻断未经pppoe认证_Pppoe协议多运营商接入共用链路的方法

    Pppoe协议多运营商接入共用链路的方法 技术领域 0001 本发明属于计算机技术领域 具体涉及PPPOE协议多运营商接入共用链路方法 技术背景 0002 PPPOE 以太网上的点到点连接协议 认证目前大规模地应用于电信运营商的ADSL接入
  • 不拆无损,在北汽EU5,EU7,EX3,EX7安装app应用

    本文是破解过程 仅供学习参考 如果您只是安装软件 请直接看https blog csdn net robinhunan article details 105963936 这篇文章就可以了 app安装仅需要一个U盘 不需要输入任何命令 即可
  • RV1126 isp开发文档记录

    Rockchip IQ Tools Guide ISP2x v1 3 pdf 主要介绍 RKISP2 x Tuner 以下简称 Tuner 提供了一套便于用户调试 ISP 参数的工具 用户可以在 Tuner 中对所有 ISP 模块开展标定
  • Redis沙盒逃逸漏洞(CVE-2022-0543)复现以及流量特征分析

    Redis简介 Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写 支持网络 可基于内存亦可持久化的日志型 键值 Key Value 存储数据库 并提供多种语言的API 漏洞介绍 Redis 存在
  • JdbcTemplate防注入的几种方式

    使用数组 public void deleteItemByName String name Object obj new Object name String sql DELETE FROM t item WHERE name jdbcTe
  • php开启opcache

    1 简介 OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销 注意 如果需要将 Xdebug 扩展和 OPcache 一起使用 必须
  • C++ 11学习

    原始字符串字面量 就不需要转义引脚 原始字符串字面量以R 开头 以 结尾 string str R Hello World c 中 nullptr无法意识转换为整形 但是可以隐式匹配指针类型 在C 11校准下 相比NULL和0 使用null
  • Nginx 状态页详解

    Nginx 状态页详解 基于nginx 模块 ngx http stub status module 实现 在编译安装nginx的时候需要添加编译参数 with http stub status module 否则配置完成之后监测会是提示语
  • Linux命令大全,唯一以案例详解文,持续更新中

    系列文章目录 软件测试功能到自动化学习路线图 2022年最新版技术栈 软件测试01 从了解测试岗位职能和测试流程开始 附作业 软件测试02 6大实际案例手把手教你设计测试点 软件测试03 用例执行以及缺陷管理的学习 附禅道下载使用流程 软件
  • 信贷风险指标你都懂吗?

    转自 简书 信贷指标 风控基本概念 贷款不良率 不良贷款率 逾期率Vintage统计法 Now和Ever DPD1 DPD30 DPD60 DPD90 引言 17年3月份的时候 有一篇文章曾经引爆金融界 称某国内知名互联网金融逾期率高达30
  • linux下解压zip文件命令

    Linux下的压缩解压缩命令详解及实例 实例 压缩服务器上当前目录的内容为xxx zip文件 zip r xxx zip 解压zip文件到当前目录 unzip filename zip 另 有些服务器没有安装zip包执行不了zip命令 但基
  • Apache Tomcat AJP 文件包含漏洞复现(CVE-2020-10487)

    影响范围 tomcat 7 lt 7 0 100 tomcat 8 lt 7 5 51 tomcat 9 lt 9 0 31 利用条件 1 漏洞版本范围内 2 默认开启ajp服务 漏洞复现 nmap扫描 默认端口8009 经测试存在更改默认
  • AI绘画调用OpenAI-api接口【人工智能里的未来之城】:4 座未来派塔楼,天桥上覆盖着茂密的树叶,数字艺术

    OpenAI绘画数字艺术是一种利用人工智能算法生成数字艺术的技术 该技术使用了一种称为GAN Generative Adversarial Networks 生成对抗网络 的深度学习模型 这种模型由两个神经网络组成 生成器和判别器 生成器的
  • 07-2_Qt 5.9 C++开发指南_二进制文件读写(stm和dat格式)

    文章目录 1 实例功能概述 2 Qt预定义编码文件的读写 2 1 保存为stm文件 2 2 stm文件格式 2 3 读取stm文件 3 标准编码文件的读写 3 1 保存为dat文件 3 2 dat文件格式 3 3 读取dat文件 4 框架及
  • 【Maven】Maven下载,配置以及基本概念

    文章目录 1 Maven简介 2 Maven下载 3 Maven环境配置 4 Maven的基本概念 4 1 仓库 4 2 坐标 4 3 仓库配置 修改IDEA默认Maven库 1 Maven简介 Maven是一个Java项目管理工具和构建工
  • 本博客全文目录索引

    本专栏博文索引 目录 涵盖 C C STL Data Structure Algorithm TCP IP Linux Interface Driver Kernel Netfilter 和 Projects C C 详解C指针 C 对象模

随机推荐

  • Java BufferedInputStream原理及设计模式分析

    文章目录 背景 源码分析 FileInputStream BufferedInputStream 装饰器模式 总结 背景 BufferedInputStream和其他InputStream常常放在一起使用 BufferedInputStre
  • 梯度有关问题

    1 偏导数 方向导数 导数是函数随自变量的变化率 对于 一元函数 只有一个自变量x 那么函数y f x 的导数是 在某一点处沿x轴正方向的变化率 多元函数 多个自变量 是多维向量 那么函数随自变量的变化怎么刻画呢 一个方法 就是衡量函数在给
  • 【终极区分】iterable和iterator

    1 凡是可作用于for循环的对象都是Iterable类型 2 凡是可作用于next 函数的对象都是Iterator类型 它们表示一个惰性计算的序列 3 集合数据类型如list dict str等是Iterable但不是Iterator 不过
  • C#中的拆箱与装箱

    1 什么是拆箱和装箱 在C 中 值类型是直接将数据存储在栈空间中 而引用类型是将数据存储在堆空间中 同时在栈空间中存储一个对该数据的引用 那么如果将一个值类型转换为一个它实现的某个接口或object会发生什么 结果必然是对一个存储位置的引用
  • Nodejs源码解析之module

    http blog csdn net leoleocs article details 50245677 module管理是Nodejs中比较有特色的部分 官方有详细的文档https nodejs org api modules html
  • el-tabs通过动态组件来更新单个tab页

    使用element ui的el tabs时 加载页面时会将所有单个tab页渲染出来 如果两个有联系的单个tab页 其中一个添加了数据 另一个tab页只有刷新才会显示出新的数据 使用动态组件来更新单个tab页 在data中定义tab列表 da
  • UnboundLocalError: cannot access local variable XXX where it is not associated with a value解决办法

    代码如图 a 1 def test a 1 test 此时运行代码会产生以下报错 UnboundLocalError cannot access local variable a where it is not associated wit
  • 查找两个字符串的相同代码块--Java

    前提 两个字符串中只有一个最大相同子串 public String getMaxSameString String str1 String str2 if str1 null str2 null String maxStr str1 len
  • 视图的定义与操作

    数据库系统 实验报告 实验名称 视图的定义与操作 实验地点 实验楼423 实验日期 一 实验目的及要求 1 掌握创建视图的SQL语句的用法 2 掌握修改视图的方法 3 熟悉视图更新与基本表更新的区别与联系 4 认识视图的作用 二 实验环境
  • vue获取+设置光标位置 光标定位 选择输入框文本

    版本 vue2 vant2 在vue是用ref r e f s 获取 d o m 的 在
  • STM32移植LVGL踩坑集锦

    这篇文章我主要讲解一下我在移植LVGL时所遇到的一些坑以及解决方法 LVGL的移植过程可以参考我前面的文章 http t csdn cn QSVOO 第一个 问题 在lvgl8 1以前的版本可能会出现MY DISP HOR RES 和 MY
  • QtDesigner中如何手动添加工具栏toolBar

    如下图 只需要把Action拖到工具栏中即可
  • Android scroller控件,Android Scroller完全解析

    在Android中 任何一个控件都是可以滚动的 因为在View类当中有scrollTo 和scrollBy 这两个方法 如下图所示 这两个方法的主要作用是将View ViewGroup移至指定的坐标中 并且将偏移量保存起来 另外 mScro
  • ES的基本介绍和使用

    增 删 改 查 全部遵循refult 风格 使用postman来新建一个文档 1 增加 http localhost 9200 blog1 article 1 id 1 title 在弹性搜索中创建索引时 content 为什么呢 因为ma
  • nginx 之 root 和 alias

    目录 1 alias 语法 2 root 语法 3 差别 1 alias 语法 Syntax alias path Default Context location 定义指定location的替换 例如 使用以下配置 location i
  • 计算机网络:流量控制和拥塞控制

    拥塞控制和流量控制 流量控制 如果发送方把数据发送得过快 接收方可能会来不及接收 这就会造成数据的丢失 TCP的流量控制是利用滑动窗口机制实现的 接收方在返回的数据中会包含自己的接收窗口的大小 以控制发送方的数据发送 拥塞控制 拥塞控制就是
  • win10 装MySQL Instance Configuration Wizerd 卡死/未响应问题

    一 若此前安装过MySQL应当先将此前的文件残留清除干净 见链接http blog csdn net aerchi article details 50432934 二 隐藏文件ProgramData MySQL也应当删除 偷懒方法就是在安
  • Linux命令·chmod

    chmod命令用于改变linux系统文件或目录的访问权限 用它控制文件或目录的访问权限 该命令有两种用法 一种是包含字母和操作符表达式的文字设定法 另一种是包含数字的数字设定法 Linux系统中的每个文件和目录都有访问许可权限 用它来确定谁
  • Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 8.x提示报错

    1 在使用统一脚手架的时候提示了报错信息如下 ERROR in app containers App SiderMenu SiderPanel style scss node modules css loader node modules
  • java实现进程控制块_操作系统:进程管理和IO控制

    一 进程管理 进程管理包括进程控制 进程调度 进程同步与通信 死锁控制四个内容 一 进程控制 进程是操作系统中运行的基本单位 包括程序段 数据段和进程控制段 操作系统通过进程控制块 PCB 管理进程 每一个PCB唯一标示一个进程 它存储进程