操作系统笔记整理3——进程的描述与控制(2)

2023-11-16

点此链接可跳转到:操作系统笔记整理——目录索引页

参考书籍:《计算机操作系统》第四版 汤小丹等编著

线程的概念

基本属性:资源的拥有者,独立调度单位
引入线程的目的:减少并发执行时的时空开销。因为进程的创建、撤销、切换交费时间。

线程是系统独立调度和分派的基本单位,基本上不拥有系统资源,只需要少量的资源(指令指针IP,寄存器,栈(地址、实参、局部变量,每个线程都有自己的stack)),但可以共享其所属进程所拥有的全部资源。

进程与线程的比较
1.调度单位
  引入线程后,线程是处理机调度的基本单位,进程是资源分配的基本单位,而不再是一个可执行的实体。
  在同一进程中线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。
2.并发性
  引入线程后,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行
  多个线程会争夺处理机,在不同的状态之间转换。线程也是一个动态的概念,也有一个从创建到消亡的生命过程,具有动态性。
3.资源分配
  进程是资源分配的单位,一般线程自己不拥有系统资源,但可以访问其隶属进程的资源,
  同一进程中的所有线程都具有相同的地址空间(进程的地址空间)
4.独立性
  同进程的不同线程间的独立性要比不同进程间的独立性低得多
  多个线程共享进程的内存地址空间和资源
5.系统开销
  线程开销小
6.支持多处理机系统
  同进程的不同线程可分配到多个处理机上执行,加快了进程的完成。
在这里插入图片描述

线程的运行状态

执行:线程正获得处理机而运行
就绪:具备了除CPU外的所有资源
阻塞:线程处于暂停执行时的状态

线程有挂起状态吗?
挂起是进程级的概念,一个进程被挂起,它的所有线程也必被挂起,一个进程被激活,它的所有线程也都被激活。

线程控制块TCB:标志线程存在的数据结构,其中包含对线程管理所需要的全部信息

多线程中的进程

拥有系统资源的基本单位
可包括多个线程
不再是一个可执行的实体。所谓进程处于执行状态,实际上是指该进程中的某线程正在执行。

线程的实现

对于通常的进程,都是利用系统调用而进入OS内核
不论是系统进程还是用户进程,不论是进程还是线程,都必须直接或间接得到OS内核的支持

系统调用是内核提供的一组函数,是应用程序和操作系统内核之间的功能接口

内核支持线程KST

内核支持线程由操作系统直接支持,在内核空间中执行线程的创建、调度和管理
优点:当有多个处理机时,一个进程的多个线程可以同时执行。
实现:直接利用系统调用进行线程控制

用户级线程ULT

用户级线程指不需要内核支持而在用户空间中实现的线程
内核并不知道用户级的线程
对于用户级线程其调度仍是以进程为单位
优点:同一进程内的线程切换不需要转换到内核空间,控制简单,调度算法是进程专用的,与操作平台无关。
缺点:当线程执行一个系统调用时,不仅该线程被阻塞,进程内的其他线程也会被阻塞。
实现:不能直接利用系统调用(导致进程中的全部线程阻塞),为了取得内核服务,需借助中间系统

运行时系统:
运行时系统是用于管理和控制线程的函数(过程)的集合,其中包括用于 创建和撤消线程的函数、线程同步和通信的函数以及实现线程调度的函数 等。
运行时系统使用户级线程与内核无关
运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之 间的接口。
当线程需要系统资源时,将该要求传送给运行时系统,由后者通过相应的 系统调用 来获得系统资源

在这里插入图片描述

进程同步与互斥

直接制约关系(进程同步):协调各进程间的工作而相互等待、相互交换信息而产生的制约关系
间接制约关系(进程互斥):进程共享独占型资源而必须互斥执行的间接制约关系

同步与互斥的比较
在这里插入图片描述

临界资源
一次只允许一个进程使用的资源,如打印机、绘图机、变量、数据等,进程之间采取互斥方式实现对临界资源的共享,访问临界资源的那一段代码称为临界区。
临界区
进入区:检查欲访问的临界资源此刻是否被访问
临界区:进程访问临界资源的那段代码
退出区:将临界资源的访问标志恢复为未被访问
剩余区:其余代码
同步机制应遵循的规则
1.空闲让进:临界资源空闲,允许进入
2.忙则等待:临界资源正被访问,其它试图进入临界区的资源必须等待
3.有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入死等状态(循环请求)
4.让权等待:当进程不能进入临界区时,应立即释放处理机,以免进程陷入 忙等

没有进入临界区的正在等待的某进程根本无法获得临界资源而进入进程,这种等待是无结果的,是死等状态
没有进入临界区的正在等待的某进程不断的在测试循环代码段中的变量的值,占着处理机而不释放,这是一种忙等状态。
例如:
while S≤0 do no−op
S: = S−1;
只要 S≤0,wait 操作就不断地测试(忙等),因而未做到“让权等待”

信号量机制

信号量是用于表示资源数目或请求使用某一资源的进程个数的整型量。
信号量只能通过初始化和两个标准的原语(P,V 操作)来访问。
信号量机制也称为P、V操作,P 操作也称为 wait 操作,V 操作也称为 signal 操作。

整型信号量:用于表示资源数目的非负整数
记录型信号量:引入阻塞队列,信号量可以取负值
组成:整型变量value:代表资源数量;链表指针L:用于连接所有等待的进程
执行一次P(s)操作:进程请求一个单位的资源,s<0表明资源已分配完,若有请求则阻塞,绝对值表示因申请该资源而被阻塞的进程的数目
执行一次V(s)操作:进程释放一个单位的资源,s<0表明由进程被阻塞,需要唤醒
AND型信号量:一次性分配(释放)所有临界资源
P原语 Swait(S1,S2,…,Sn);V原语 Ssignal(S1,S2,…,Sn)
信号量集:对需要多种资源、每种占用的数目不同、且可分配资源还存在一个临界值时的信号量处理。
进程对信号量Si的测试值为ti(信号量的判断条件,当资源数小于ti时,不予分配),占用值为di(资源的申请量,即Si=Si-di和Si=si+di)
P原语 Swait(S1,t1,d1;…;Sn,tn,dn);
V原语 Ssignal(S1,d1;…;Sn,dn); 释放时不必考虑ti
Swait(S,1,0):可作为一个可控开关(S≥1 时,允许多个进程进入某特定 区;S=0 时禁止任何进程进入)。

例题
设系统有 n(n>2)个进程,且当前不在执行进程调度程序,试考虑下述4种情况,不可能发生的是(A)。
A、没有运行进程,有 2 个就绪进程,n-2 个进程阻塞
B、有 1 个运行进程,没有就绪进程,n-1 个进程阻塞
C、有 1 个运行进程,有 1 个就绪进程,n-2 个进程阻塞
D、有 1 个运行进程,n-1 个就绪进程,没有进程阻塞
解析:没有运行进程且就绪队列非空,处理机不应空闲,而应该调度一个进程来运行,因此A错误


对于两个并发进程,设互斥信号量为 mutex。当 mutex=0 时,则(B)。
A、表示没有进程进入临界区
B、表示有一个进程进入临界区
C、表示有一个进程进入临界区,另一个进程等待进入
D、表示有两个进程进入临界区
解析:A:mutex=1 B:mutex=0 C:mutex=-1 D: 错误

wait、signal操作小结

  • wait、signal 操作必须成对出现,有一个 wait 操作就一定有一个 signal
    操作。
    • 当为互斥操作时,它们同处于同一进程。 当为同步操作时,则不在同一进程中出现。
    • 如果两个 wait 操作相邻,那么它们的顺序至关重要,而两个相邻的
      signal 操作的顺序无关紧要。
  • 一个同步 wait 操作与一个互斥 wait 操作在一起时,同步 wait 操作在互 斥 wait 操作前。
  • 优点:简单,而且表达能力强(用 wait、signal 操作可解决任何同步互 斥问题)。
  • 缺点:不够安全,P、V 操作使用不当会出现死锁。

经典进程同步问题

  • 生产者-消费者问题
  • “哲学家进餐”问题
  • 读者-写者问题

管程机制

基本思想:把访问某种临界资源的所有进程的同步操作都集中起来,构成一个所谓的“秘书”进程(管程),凡是访问临界资源的进程,都需要报告“秘书”,由秘书来实现诸进程的同步
管程的定义:一个数据结构和在该数据结构上能被并发进程所执行的一组操作,这组操作能使进程同步和改变管程中的数据。

进程通信

进程通信:进程间的信息交换
低级通信:信号量机制,效率低,对用户不透明
高级通信:效率高,对用户透明
高级通信机制:共享存储器系统、消息传递系统(直接通信方式:消息缓冲通信;间接通信方式:又称为信箱通信方式)、管道通信系统、客户机-服务器系统

套接字:套接字(Socket)是对网络中进程之间进行双向通信的端点的抽象。一个套接字就是网络中进程通信的一端。套接字是一个通信标识类型的数据结构,包含许多选项,由操作系统内核管理。

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

操作系统笔记整理3——进程的描述与控制(2) 的相关文章

  • fork之后子进程到底复制了父进程什么

    fork之后子进程到底复制了父进程什么 发表于2015 4 3 9 54 08 2161人阅读 分类 操作系统 include
  • 6.OS运行机制(补充)

    中断
  • 计算机网路基础 - 一些基本概念与网络结构

    1 基本概念 计算机网络 通信技术 计算机技术 是两项技术紧密结合的产物 通信系统的基础模型 计算机网络 是指将地理位置不同 具有独立功能的多台计算机及其外部设备 通过通信线路连接 在网络操作系统 网络管理软件及网络通信协议的管理和协调下
  • redis主从同步,总是显示master_link_status:down的解决方法

    前几天 在修改一台从节点的redis的监听端口后 重启了下redis 发现master link status 很长时间一直都是down状态 查看了redis日志 发现日志里出现很多的 I O error trying to sync wi
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • Linux网络安全-Zabbix入门(一)

    一 基本概念 1 监控目的 运行情况 提前发现问题 2 监控资源类别 公开 tcp udp 端口 私有 cpu 磁盘 监控一切需要监控的东西 只要能够想到 能够用命令实现的都能用来监控 如果想远程管理服务器就有远程管理卡 比如Dell id
  • pycharm内存不足时如何修改设置?

    Help gt Find Action gt type VM Options gt Click Edit Custom VM Options Pycharm 2016 2 will open the appropriate vmoption
  • ps aux 和ps -aux和 ps -ef的选择

    Linux中的ps命令是Process Status的缩写 ps命令用来列出系统中当前运行的那些进程 ps命令列出的是当前那些进程的快照 就是执行ps命令的那个时刻的那些进程 如果想要动态的显示进程信息 就可以使用top命令 要对进程进行监
  • Java堆的自动垂直缩放

    多年以来 java一直是贪婪的应用程序的同义词 这种类型的应用程序在晚上打开冰箱并吞噬所有可用资源 直到崩溃 该行为的主要原因是缺乏一种有效的方式来将操作系统在Java堆中分配且不再使用的内存交还给操作系统 However with the
  • Linux系统编程:多线程交替打印ABC

    引言 分享关于线程的一道测试题 因为网上基本都是Java的解决方法 决定自己写一篇来记录一下线程的学习 问题描述 编写一个至少具有三个线程的程序 称之为线程 A B 和 C 其中线程 A 输出字符 A 线程 B 输出字符 B 线程 C 输出
  • 安装黑苹果双系统专辑贴(持续更新...)

    最近终于开始研究黑苹果 然后浏览了几篇文章贴收集一下 以便需要时随时阅览 和同学们互相学习 零基础篇 1 https blog csdn net a792396951 article details 80230946 2 https zhu
  • 《一个操作系统的实现》读书笔记-- 第一章--最小的“操作系统”

    一 最简单的 操作系统 最最简单的 操作系统 就是一个最最简单的引导扇区 Boot Sector 虽然它不具有任何功能 但是它却能够直接在裸机上运行 不依赖其他软件 一个引导扇区是512个字节 并且以0xAA55为结束标识的扇区 下面就是那
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • Windows运行常用命令(win+R)

    1 calc 启动计算器 2 notepad 打开记事本 3 write 写字板 4 mspaint 画图板 5 snippingtool 截图工具 支持无规则截图 6 mplayer2 简易widnows media player 7 S
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • java IO、NIO、AIO详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 IO流 同步 阻塞 二 NIO 同步 非阻塞 三 NIO2 异步 非阻塞 正文 回到顶部 概述 在我们学习Java的IO流之前 我们都要了解几个关键词 同步与异步 sy
  • CentOS Linux服务器安全设置

    转自 http www osyunwei com archives 754 html 引言 我们必须明白 最小的权限 最少的服务 最大的安全 所以 无论是配置任何服务器 我们都必须把不用的服务关闭 把系统权限设置到最小话 这样才能保证服务器
  • Common块和Bss段的区别

    昨天看 程序员的自我修养 链接 装载与库 发现不是很理解为什么要用common块 然后仔细看了一番 有了自己的理解 common块 用来存放弱符号 而全局未初始化变量是弱符号 但是难道不是应该存放在 bss段吗 为什么要有common块呢
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位

随机推荐

  • 手机键盘字母组合

    题目 给定一个仅包含数字 2 9 的字符串 返回所有它能表示的字母组合 给出数字到字母的映射如下 与电话按键相同 注意 1 不对应任何字母 示例 输入 23 输出 ad ae af bd be bf cd ce cf 思路 根据输入的数字
  • 安卓逆向-IDA

    Java层代码是对系统层 so层 的封装 所以假如说APP开发者直接调用系统的接口而不是Java层 有些地方我们hook不出来 所以需要深入去了解so层的接口 IDA的使用 按F5可将汇编代码转C JNI OnLoad so层的hook接口
  • maria数据库随机查询_如何安装Maria DB,创建数据库和执行查询

    maria数据库随机查询 你好朋友 在本教程中 我们将看到 1 如何安装Maria DB 2 如何连接到Maria DB 创建数据库和执行查询 1 如何安装Maria DB 1 1 转到以下链接 然后单击 立即下载10 4 12稳定 按钮
  • JNPF低代码开发平台 新版3.4.6 框架源码分享

    每一个传统行业都有机会变成技术驱动的现代行业 这次疫情正在把很多原来的应急技术变成日常技术 数字化进程中最大的受益者不是互联网企业 而是用互联网改造自己的企业 独木不成林 或许JNPF快速开发平台正是意识到了这一点 才忙着织出一张密集的网
  • Python---多线程编程、基于Socket完成服务端程序开发、基于Socket完成客户端程序开发

    1 进程 程序在操作系统内运行 即成为一个运行进程 线程 进程内部可以有多个线程 程序的运行本质上就是由进程内部的线程在实际工作的 并行执行 多个进程同时在运行 即不同的程序同时运行 称之为 多任务并行执行 一个进程内的多个线程同时在运行
  • redis Hyperloglog 过滤重复

    Redis 中对 HyperLogLog 的应用 首先 在 Redis 中 HyperLogLog 是它的一种高级数据结构 提供有包含但不限于下面两条命令 pfadd key value 将 key 对应的一个 value 存入 pfcou
  • 【Linux】详解套接字编程

    文章目录 网络套接字 1 端口号 1 1认识端口号 1 2端口号VS PID 2 TCP与UDP协议 3 网络字节序 4 socket编程 4 1常用接口 4 2sockaddr结构 4 3 socket接口的底层工作 4 4字符串IP V
  • 计算机视觉、模式识别、机器学习常用牛人主页链接

    牛人主页 主页有很多论文代码 Serge Belongie at UC San Diego Antonio Torralba at MIT Alexei Ffros at CMU Ce Liu at Microsoft Research N
  • Python课堂笔记之输出数组中的数字

    将数组中的数字顺序输出
  • PLSQL中如何进行界面的基本使用和编辑。

    打开plsql后点击左上角的钥匙后可以看到最近登录的用户名和实例名称 System ORCL 其中system代表用户名 ORCL代表实例号 服务名 如何调整关键字的颜色 字体呢 选择Tools gt Preference gt 查看左侧栏
  • PAT乙级1023 组个最小数 (20 分)

    1023 组个最小数 20 分 一 问题描述 给定数字 0 9 各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意 0 不能做首位 例如 给定两个 0 两个 1 三个 5 一个 8 我们得到的最小的
  • map 如何使用结构体作为自定义键值

    在使用map时 有时候我们需要自定义键值 才能符合程序的需要 比如我们需要使用自定义的结构体来作为map的键值 struct Test int x int y 这样直接使用的话 在编译时会出问题 1 gt Build started Pro
  • 【MATLAB第32期】【更新中】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理分类问题MATLAB代码实现

    MATLAB第32期 更新中 基于MATLAB的降维 全局敏感性分析 特征排序 数据处理分类问题MATLAB代码实现 持续更新 本文敏感性分析主要分析分类问题 fisher rf arf nca等 版本更新 2023 8 2 增加基于拥挤距
  • JAVA 创建学生类

    1 题目 编写程序实现如下功能 已知学生类有域变量 学号 班号 姓名 性别 年龄 和方法 获得学号 获得班号 获得性别 获得年龄 修改年龄 显示基本信息 定义一组学生对象 并初始化他们的基本信息 然后依次输出 2 源代码 Student j
  • linux自动挂载NTFS格式移动硬盘

    转自 http blog 163 com cmh lj blog static 100812304201252522119264 由于移动硬盘还有不少的资料 刚插入移动硬盘的时候发现只能自动挂载FAT FAT32格式分区 按照以往的经验 安
  • Python学习-----模块5.0(文件管理大师-->os模块)

    目录 前言 1 os getcwd 2 os listdir path 3 os walk path 4 os path exists path 5 os mkdir path 6 os makedirs path exist ok Tru
  • URI和URL、URN的作用和区别

    前言 我们都知道URL是使用Web浏览器等访问Web页面时需要输入的网页地址 而对URI URN的认识可能很少 更有甚者会像我一样 把URI与URL搞混 还以为是一个东西的不同别名 其实URI是URL与URN的超集 URI包括URL和URN
  • htons()是什么

    一个数字0x12345678 左边是高字节 右边是低字节 存储到内存中有两种方式 小端法就是把低字节先存入 内存地址里从低到高就会变成 78 56 34 12 相反大端法就是把高字节先存入 内存地址里从低到高存入的数据旧变成了12 34 5
  • ASP连接Excel的方法

    在ASP中 可以将Excel作为一种轻量级数据库 用于存取数据 下面是一个使用ASP连接Excel的代码实例 首先创建excel数据链接 然后打开连接 在excel中名为 招聘 的表格中查询id 1的一条数据 并打印StuName列的数据
  • 操作系统笔记整理3——进程的描述与控制(2)

    点此链接可跳转到 操作系统笔记整理 目录索引页 参考书籍 计算机操作系统 第四版 汤小丹等编著 文章目录 点此链接可跳转到 操作系统笔记整理 目录索引页 线程的概念 线程的运行状态 多线程中的进程 线程的实现 内核支持线程KST 用户级线程