操作系统(2)——进程线程

目录

  • 小程一言
    • 专栏链接: [link](http://t.csdnimg.cn/8MJA9)
    • 基础概念
    • 线程详解
    • 进程详解
    • 进程间通信
    • 调度
      • 常用调度算法
    • 重要问题
      • 哲学家进餐问题
        • 问题的描述
        • 策略
      • 读者-写者问题
        • 问题的描述
        • 两种情况
        • 策略
    • 总结
      • 进程
      • 线程
      • 一句话

小程一言

本操作系统专栏,是小程在学操作系统的过程中的第一步,是在学习操作系统的笔记的前提下,加上自己的心得,以及资料的搜集,共同整合而成。小程在学习过程中,难免疏漏,希望各位前辈批评指正。

主要参考书籍:现代操作系统
书中内容有些生硬,so小程参考其他书籍内容进行了一些加工
这本书饱受诟病的原因是流传思想有些过时,但是计算机有过时的思想吗?,底层逻辑的稳定是整个计算机的基石。现在的所有思想都是在基石之上。

面向群体:在校大学生,想要补齐基础知识短板的在职人员

专栏链接: link

在这里插入图片描述

基础概念

  1. 进程:进程是计算机中运行的程序的实例。每个进程都有自己的地址空间、内存、文件描述符和其他系统资源。进程之间是相互独立的,每个进程都有自己的内存空间,不同进程之间不能直接访问对方的内存。

  2. 线程:线程是进程中的一个执行单元,一个进程可以包含多个线程。线程共享进程的地址空间和系统资源,但每个线程有自己的栈空间和寄存器。多线程可以提高程序的并发性和性能。

  3. 进程间通信:进程之间可以通过各种方式进行通信,如管道、消息队列、共享内存、信号量等。进程间通信是实现进程协作和数据共享的重要手段。

  4. 线程同步:多线程之间需要协调和同步执行,以避免竞争条件和数据不一致的问题。常用的线程同步方式包括互斥锁、条件变量、信号量等。

  5. 进程调度:操作系统负责对进程进行调度,决定哪个进程在什么时候执行。常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)、时间片轮转等。

  6. 线程调度:线程调度是操作系统对线程进行调度的过程,决定哪个线程在什么时候执行。线程调度可以基于优先级、时间片轮转、多级反馈队列等算法。

  7. 并发:并发是指系统能够同时处理多个任务的能力。多进程、多线程和异步编程都是实现并发的方式。

  8. 并行:并行是指系统能够同时执行多个任务的能力。多核处理器和分布式系统可以实现并行处理。

  9. 死锁:死锁是指多个进程或线程因互相等待对方释放资源而无法继续执行的情况。死锁是多线程编程中常见的问题,需要合理设计和使用同步机制来避免。
    在这里插入图片描述

线程详解

线程是操作系统中的另一个重要概念,它是进程中的执行单元,可以看作是进程中的子任务。一个进程可以包含多个线程,这些线程共享进程的地址空间和其他资源,但每个线程有自己的堆栈空间和程序计数器。

线程是操作系统进行CPU调度的基本单位,多个线程可以在同一个进程内并发执行,提高了系统的并发性能。在多核处理器系统中,多个线程可以同时运行在不同的核心上,实现真正的并行处理。

与进程不同的是,线程之间可以共享数据,因为它们共享进程的地址空间。线程之间的通信更加高效,可以通过共享的内存进行数据交换。但同时,线程之间的数据共享也增加了编程的复杂性,需要谨慎处理数据的同步和互斥。

线程可以分为用户线程和内核线程。用户线程是由用户空间的线程库实现的,操作系统并不直接支持,内核只知道整个进程,无法感知用户线程的存在。内核线程则是由操作系统内核管理的线程,操作系统可以直接对其进行调度和管理。

so,线程是操作系统中的重要概念,它是进程中的执行单元,可以实现并发执行、提高系统性能。线程之间可以共享数据,但需要注意数据同步和互斥。线程的引入使得程序设计更加灵活,能够更好地利用多核处理器系统的性能。
在这里插入图片描述

进程详解

进程是操作系统中的一个基本概念,是一个正在运行的程序的实例。当一个程序被执行时,操作系统会为其创建一个进程,进程包含了程序的代码、数据、堆栈等信息,以及所需的系统资源。每个进程都有自己独立的内存空间,使得不同进程之间的数据相互隔离,确保了系统的稳定性和安全性。

进程在操作系统中扮演着重要的角色,它是系统资源分配的基本单位,操作系统通过进程来管理系统资源的分配和调度。每个进程都有自己的进程控制块(PCB),用于记录进程的状态、优先级、资源占用情况等信息,操作系统通过管理这些信息来对进程进行调度和控制。

进程可以通过创建子进程来实现并发执行,子进程可以独立运行,也可以与父进程共享资源。进程之间可以通过进程间通信(IPC)来实现数据交换和协作。常见的进程间通信方式包括管道、消息队列、共享内存等。

so,进程是操作系统中的一个重要概念,它代表了一个正在运行的程序的实例,是系统资源分配和调度的基本单位,通过进程可以实现并发执行、资源管理和进程间通信,是操作系统中的核心概念之一。
在这里插入图片描述

进程间通信

进程间通信(IPC)是指不同进程之间进行数据交换和共享信息的过程。在操作系统中,进程间通信是非常重要的,因为不同的进程需要相互协作、共享数据和资源。

常见的进程间通信方式

  1. 管道:管道是一种半双工的通信方式,可以在父子进程或者兄弟进程之间进行通信。管道有两种类型,分为无名管道和命名管道。

  2. 消息队列:消息队列是一种消息传递的方式,可以在不同进程之间传递数据。消息队列可以实现进程之间的异步通信。

  3. 共享内存:共享内存是一种高效的进程间通信方式,多个进程可以在共享内存中读写数据。共享内存可以实现进程之间的快速数据交换。

  4. 信号量:信号量是一种用于进程同步和互斥的机制,可以控制进程对共享资源的访问。

  5. 套接字:套接字是一种网络编程中常用的通信方式,可以在不同主机之间进行进程间通信。

以上是一些常见的进程间通信方式,不同的场景和需求可以选择适合的通信方式来实现进程间的数据交换和共享。

调度

在操作系统中,调度(Scheduling)是指操作系统决定哪个进程在何时执行的过程。操作系统的调度器负责管理和调度系统中的进程,以确保系统资源的有效利用和进程之间的公平竞争。
在这里插入图片描述

常用调度算法

  1. 先来先服务:按照进程到达的顺序进行调度,先到达的进程先执行。

  2. 最短作业优先:选择执行时间最短的进程先执行,以减少平均等待时间。

  3. 优先级调度:根据进程的优先级进行调度,优先级高的进程先执行。

  4. 时间片轮转:每个进程被分配一个时间片,当时间片用完时,切换到下一个进程执行,确保每个进程都有机会执行。

  5. 多级反馈队列调度:将进程根据优先级划分到不同的队列中,每个队列有不同的调度算法,进程根据执行情况在不同队列之间切换。

调度算法的选择取决于系统的需求和性能要求,不同的算法有不同的优缺点。好的调度算法能够提高系统的性能和响应速度,确保系统资源的有效利用。操作系统的调度器通常会根据当前系统的负载情况和进程的状态来选择合适的调度算法进行进程调度。
在这里插入图片描述

重要问题

哲学家进餐问题

这是一个经典的并发编程问题,用来说明在共享资源的情况下可能发生的死锁问题。

问题的描述

假设有五位哲学家围坐在一张圆桌前,每位哲学家面前放着一只筷子,而每两只筷子之间放着一碗意大利面。哲学家的生活包括思考和进餐,当哲学家思考时,不需要任何资源,但当他们饿了时,需要同时拿起他们左右两边的筷子才能进餐。问题在于,如果每位哲学家都拿起自己左边的筷子,那么所有哲学家都会陷入死锁状态,无法继续进餐。

策略
  1. 引入资源层次性:引入资源的层次性,例如规定哲学家必须按照一定顺序去拿筷子,或者只允许一部分哲学家同时进餐。

2.** 引入超时机制**:规定哲学家在一定时间内没有成功拿到筷子就会放下已经拿到的筷子,避免死锁的发生。

  1. 使用信号量或互斥锁:使用信号量或互斥锁来保护共享资源,确保一次只有一个哲学家可以拿起筷子。

  2. 破坏循环等待:规定哲学家顺序拿筷子,或者引入一个资源请求的排序机制,避免循环等待。

哲学家进餐问题是一个经典的并发编程问题,通过解决这个问题可以深入理解并发编程中的死锁和资源竞争问题,以及如何设计合理的资源分配策略来避免这些问题的发生。
在这里插入图片描述

读者-写者问题

读者写者问题也是一个经典的并发编程问题,

问题的描述

描述了多个读者和写者对共享资源的访问问题。在这个问题中,多个读者可以同时访问共享资源,但写者在访问共享资源时必须独占资源,读者和写者之间需要进行合适的同步,以确保数据的一致性和避免竞争条件。

两种情况
  1. a.是读者优先:允许多个读者同时访问共享资源,但写者必须独占资源。在这种情况下,应该尽量减少写者的等待时间,以避免读者频繁访问共享资源导致写者长时间无法访问资源。

  2. b.是写者优先:写者优先访问共享资源,读者需要等待写者释放资源后才能访问。这种情况下,需要确保写者能够及时访问资源,以避免数据不一致的情况发生。

策略
  1. 使用信号量或互斥锁:使用信号量或互斥锁来保护共享资源,确保在任何时刻只有一个写者或多个读者可以访问资源。

  2. 使用条件变量:使用条件变量来实现读者写者之间的同步,读者在访问资源时等待写者释放资源,写者在访问资源时等待所有读者释放资源。

  3. 给予优先级:根据读者和写者的优先级给予不同的访问权限,例如读者优先或写者优先的策略。

总结

进程(Process)和线程(Thread)是操作系统中用于实现并发执行的基本概念,它们都代表着程序的执行单元,但在实现方式和特点上有一些不同。

进程

  • 进程是程序在执行过程中的一个实例,是系统资源分配的基本单位。
  • 每个进程有独立的内存空间,包括代码段、数据段、堆和栈。
  • 进程之间相互独立,通过进程间通信(IPC)来进行数据交换和协作。
  • 进程拥有自己的进程控制块(PCB),用于保存进程的状态信息和运行轨迹。
  • 进程的创建、销毁和切换开销较大,因为需要保存和恢复整个进程的上下文。

线程

  • 线程是进程内的一个执行单元,是CPU调度的基本单位。
  • 同一进程内的线程共享相同的内存空间和资源,包括代码段、数据段、堆和栈。
  • 线程之间可以直接访问进程内的共享数据,因此需要注意线程安全性和同步问题。
  • 线程的创建、销毁和切换开销相对较小,因为线程共享进程的资源和上下文。
  • 多线程编程可以提高程序的并发性和性能,但也会增加编程复杂度和引入竞态条件。

一句话

进程是操作系统中资源分配的基本单位,而线程是程序执行的基本单位。

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

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

相关文章

【tcl脚本实践Demo 1】文本生成、匹配、修改、读写

引言 在芯片设计的流程中,各种EDA工具在设计、综合、布局布线、验证、时序分析等等环节都会产出大量的文件信息。这些信息是海量的,如果单纯靠程序员自己查看信息效率很低并且很容易纰漏。所以脚本语言可以很好的解决这个问题,可以利用脚本语言匹配到敏感的信息,完成对信息…

240 基于matlab的飞行轨迹仿真程序

基于matlab的飞行轨迹仿真程序,多种不同的飞行轨迹,输出经度、纬度、高度三维轨迹,三个方向的飞行速度。程序已调通,可直接运行。 240 飞行轨迹仿真 三维轨迹 飞行速度 - 小红书 (xiaohongshu.com)

Golang图片验证码的使用

一、背景 最近在使用到Golang进行原生开发,注册和登录页面都涉及到图片验证码的功能。找了下第三方库的一些实现,发现了这个库用得还是蛮多的。并且支持很多类型的验证方式,例如支持数字类型、字母类型、音频验证码、中文验证码等等。 项目地…

动态规划-回文子串问题

文章目录 1. 回文子串(647)2. 最长回文子串(5)3. 分割回文串 IV(1745)4. 分割回文串 II(132)5. 最长回文子序列(516)6. 让字符串成为回文串的最少插入次数&am…

Vue入门篇:样式冲突scoped,data函数,组件通信,prop data单向数据流,打包发布

这里写目录标题 1.组件的样式冲突scoped2.data函数3.组件通信1.两种组件关系分类和对应的组件通信方案2.父子通信方案的核心流程 4.prop & data、单向数据流5.打包发布6.打包优化:路由懒加载 1.组件的样式冲突scoped 默认情况:写在组件中的样式会全局生效→因此很容易造成多…

【Python从入门到进阶】53、Scrapy日志信息及日志级别

接上篇《52、CrawlSpider链接提取器的使用》 上一篇我们学习了基于规则进行跟踪和自动爬取网页数据的“特殊爬虫”CrawlSpider。本篇我们来学习Scrapy的日志信息及日志级别。 一、引言 1、日志在Scrapy中的重要性 在Scrapy框架中,日志扮演着至关重要的角色。日志…

十三、大模型项目部署与交付

1 硬件选型 CUDA 核心和 Tensor 核心 CUDA 核心:是NVIDIA开发的并行计算平台和编程模型,用于GPU上的能用计算,可做很多的工作。应用在游戏、图形渲染、天气预测和电影特效Tensor 核心:张量核心,专门设计用于深度学习…

前端开发框架Vue

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Vue概述 Vue.js(简称Vue)是由尤雨溪(Evan You)创建并维护的一款开源前端开发框架。Vue以其轻量级、易上手和高度灵活的特点&…

IoTDB 入门教程③——基于Linux系统快速安装启动和上手

文章目录 一、前文二、下载三、解压四、上传五、启动六、执行七、停止八、参考 一、前文 IoTDB入门教程——导读 二、下载 下载二进制可运行程序:https://dlcdn.apache.org/iotdb/1.3.1/apache-iotdb-1.3.1-all-bin.zip 历史版本下载:https://archive.…

C——双向链表

一.链表的概念及结构 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。什么意思呢?意思就是链表在物理结构上不一定是连续的,但在逻辑结构上一定是连续的。链表是由一个一个的节点连…

24五一杯ABC题完整思路+可执行代码+可视化图表(1)

2024五一赛A题保姆级建模思路20页1-3问可执行代码后续成品论文各类可视化图表(完整版资料在文章最后) 处理第一问的代码 其余各题的代码如下: A题保姆级建模思路20页:(手把手教你如何建模) 高清图片如下&am…

第12章 软件测试基础(第一部分)概念、质量保证、测试用例、测试执行过程

一、软件测试 (一)定义 动态验证计算机程序对有限的测试用例集是否可产生期望的结果的过程。测试计划是描述了要进行的测试活动的范围、方法、资源和进度的文档。编写测试计划目的:使测试工作顺利进行、使项目参与人员沟通更舒畅、使测试工…

面试常见 | 项目上没有亮点,如何包装?

很多技术人在公司用的老技术,而且很多都是搬业务代码且做枯燥乏味的CRUD,在面试提交简历或做自我介绍的时候并不突出,这种情况,如何破局? 首先不管你做的啥项目,全世界不可能只有你自己在做,比…

Tensorflow2.0笔记 - ResNet实践

本笔记记录使用ResNet18网络结构,进行CIFAR100数据集的训练和验证。由于参数较多,训练时间会比较长,因此只跑了10个epoch,准确率还没有提升上去。 import os import time import tensorflow as tf from tensorflow import keras …

附录6-5 黑马优购项目-我的与后端本地化

目录 1 我的 2 后端本地化 1 我的 tarbar我的 只有这两个页面 其中未登录页面中只有一键登录有用,其他都是写死的,一键登录的功能仅仅是切换到登录的页面 目前微信小程序和微信用户的信息是脱钩的(之前的wx.getUserProfile与wx.getUs…

企业气候风险披露、报表词频、文本分析数据集合(2007-2022年)

01、数据介绍 企业气候风险披露是指企业通过一定的方式,将气候变化对其影响、自身采取的应对措施等信息披露出来。这有助于投资者更准确地评估企业价值,发现投资机会,规避投资风险。解企业在气候风险方面的关注度和披露情况。 可以帮助利益…

Django后台项目开发实战七

为后台管理系统换风格 第七阶段 安装皮肤包 pip install django-grappelli 在 setting.py 注册 INSTALLED_APPS [grappelli,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.stat…

【yolov8】yolov8剪枝训练流程

yolov8剪枝训练流程 流程: 约束剪枝微调 一、正常训练 yolo train model./weights/yolov8s.pt datayolo_bvn.yaml epochs100 ampFalse projectprun nametrain二、约束训练 2.1 修改YOLOv8代码: ultralytics/yolo/engine/trainer.py 添加内容&#…

R语言4版本安装mvstats(纯新手)

首先下载mvstats.R文件 下载mvstats.R文件点此链接:https://download.csdn.net/download/m0_62110645/89251535 第一种方法 找到mvstats.R的文件安装位置(R语言的工作路径) getwd() 将mvstats.R保存到工作路径 在R中输入命令 source(&qu…

ctf web-部分

** web基础知识 ** *一.反序列化 在PHP中,反序列化通常是指将序列化后的字节转换回原始的PHP对象或数据结构的过程。PHP中的序列化和反序列化通过serialize()和unserialize()函数实现。 1.序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串…