Java从入门到精通 (十一) ~ 操作系统、进程和线程

无论做什么,请记住都是为你自己而做,这样就毫无怨言!今天,我为自己而活!今天,又是美丽的一天!早安,朋友!

目录

前言

一、操作系统

1. 概念

2. 操作系统的基本功能

3.操作系统内核 

4. 操作系统的类型

二、并发和并行

并发:是指系统能够同时处理多个任务。多线程

并行:是指系统同时执行多个操作,多进程

三、进程

1. 概念

2. 进程的特性

 3. 进程的属性

4. 进程的组织

5. 进程间的通信

扩展:虚拟地址空间(保证了进程的独立性)

6. 进程的应用场景

四、线程(“轻量级进程”)

1. 线程的概念

2. 线程的特性

与进程的差异

优势:

挑战:        

3. 线程同步与通信

4. 线程的六大状态

5. 线程池和执行者框架



前言

操作系统:计算机背后的智慧大脑,本质是一个软件

        在当今数十亿台设备上运行的软件背后,存在一个关键的、却常被忽视的技术支柱 —— 操作系统。操作系统是计算机系统中的核心软件,它负责管理和协调计算机硬件资源,并为用户和应用程序提供服务和接口。无论是个人电脑、智能手机,还是大型服务器,都依赖于操作系统的顺畅运行。


进程:计算机运行的基本单位

        在计算机科学中,进程(Process)是操作系统中的一个核心概念,它代表了正在运行的程序的实例。理解进程是理解操作系统和多任务处理的关键,本文将介绍进程的定义、特性、管理以及在现代计算中的重要性。 


线程:并发编程的核心概念

        在计算机科学和软件开发中,线程(Thread)是一种重要的并发编程概念,它允许程序同时执行多个任务,提高系统资源的利用率和响应速度。本文将介绍线程的定义、特性、应用以及在现代软件开发中的重要性。 


一、操作系统

1. 概念

操作系统:是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件

操作系统功能介绍:

  1. 系统资源的管理者
    1. 文件管理
    2. 存储器管理
    3. 处理机管理
    4. 设备管理
  2. 最接近硬件的一层软件
  3. 向下管理所有的硬件设备

操作系统毕竟是个软件,不可能认识所有的硬件设备,但是操作系统知道硬件设备由哪几个大类,知道每个大类大致有哪些功能,然后硬件厂商就可以开发一个驱动程序(软件)专属这个硬件设备,然后操作系统就可以对这个驱动程序来完成对硬件设备的操控,比如鼠标为什么插上就可以使用。

  1. 对上要给软件提供稳定的运行环境并且提供方便易用的服务

    操作系统提供稳定的运行环境意味着它应能有效管理硬件资源,防止因硬件故障或资源竞争而导致软件崩溃或运行异常。操作系统负责管理和分配CPU、内存、硬盘等硬件资源,以确保各个软件程序可以平稳地运行,并且能够有效利用资源,提高系统的整体性能和效率。

 

2. 操作系统的基本功能

  1. 资源管理

    • 处理器管理:操作系统负责调度进程和线程,以便在多任务环境中有效地利用CPU资源。
    • 内存管理:管理系统内存的分配和释放,保证每个程序都能获取到所需的内存空间。
    • 文件系统管理:管理文件的存储、检索和组织,确保数据的安全性和可靠性。
    • 设备管理:管理和控制输入输出设备,如磁盘驱动器、打印机、网络接口等,使得它们能够有效地与计算机通信和交互。
  2. 用户接口

    • 提供用户与计算机系统交互的界面,如命令行界面(CLI)和图形用户界面(GUI)等。
    • 一条命令一个响应
    • 多条命令
  3. 错误检测与处理

    • 监控系统运行过程中的错误和异常,采取适当的措施进行处理,以确保系统的稳定性和可靠性。

3.操作系统内核 

操作系统“内核”是操作系统里面最核心的功能模块

内核分为内核态和工作态,一个程序在运行过程中,可能在用户态工作也可能在内核态工作

  • 管理系统资源

    • 管理计算机中的硬件资源,如内存、硬盘、处理器,以确保资源合理有效的分配和使用

  • 进程管理

    • 管理系统中的进程,如进程的创建、调度和终止等操作。以确保多个进程在系统中协调运行

  • 内存管理

    • 管理系统的内存资源,包括内存的分配、回收、页面置换等操作,以提供给进程足够的内存空间

  • 文件系统

    • 管理文件系统,包括文件的创建、读写和删除等操作,以提供对文件的管理和访问

  • 设备驱动程序

    • 管理硬件设备的驱动程序,以便于应用程序可以通过内核与硬件设备进行通信和操作

  • 总结

    • 内核是操作系统的核心,硬件的驱动程序都在操作系统内核中工作,负责管理计算机的硬件资源和提供基本的系统服务,为用提供运行环境和操作硬件的接口。

最后:操作系统 = 操作系统内核  + 配套的应用程序

配套的应用程序:

  • 在操作系统上运行的软件程序,用于完成各种任务和提供各种功能。

4. 操作系统的类型

根据应用场景和设备类型的不同,操作系统可以分为多种类型,包括但不限于:

  • 桌面操作系统:如Windows、macOS、Linux等,主要用于个人电脑和工作站。
  • 服务器操作系统:如Linux服务器版、Windows Server等,专门用于管理和运行服务器资源。
  • 嵌入式操作系统:如Android、iOS等,用于嵌入式系统和移动设备。
  • 实时操作系统:如RTOS(Real-Time Operating System),专门用于对时间敏感的应用,如航空航天控制系统和工业自动化。

二、并发和并行

并发:同一时间应对多件事情的能力 (感觉上的同时执行)
并行:同一时间动手做多件事情的能力 (真正的同时执行)

并发:是指系统能够同时处理多个任务。多线程

  1. 并发并不意味着同时进行所有任务,系统通过在任务之间快速切换(时间片轮转或者其他调度方式),使得在单个时间段内似乎是同时进行了多个任务。
  2. 并发通常是通过时间分片的方式:切换不同任务的执行,每个任务都有自己的执行时间片。注意:这里的时间片非常小(计算机执行的非常快),切换的非常快,因此给人的感觉就是多个任务同时进行。

比如:视频就是图片一帧一帧的进行,因为切换的速度非常快,所以 就给人一种错觉,感觉不到图片是一点点切换的。

并行:是指系统同时执行多个操作,多进程

并行:多个任务在同一时刻开始和执行,通常每个任务都分配给不同的处理单元(如多核处理器或者多台机器)。实现并行的关键在于同时具有多个执行单元,能够并行地执行多个任务。

三、进程

1. 概念

        进程是指计算机中正在运行的一个程序的实例。每个进程都有自己的内存空间、代码和数据,它们之间相互独立,通过操作系统的调度和管理来分配处理器资源。在多任务操作系统中,可以同时运行多个进程,每个进程都有自己的执行流程和执行状态。

一般来说系统一开机就会有成百的进程被创建,有些进程是系统自动创建的,有些是手动创建的,每个进程想要运行都需要一定的系统资源(硬件设备),每个进程都是资源分配的基本单位

与程序是不同的概念,有些人总将进程和程序混淆:

程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。
当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程一个程序可以开启多个进程。

2. 进程的特性

  1. 独立性:每个进程是独立运行的实体,它们之间不会直接影响或干扰彼此的执行。

  2. 资源分配:操作系统负责为每个进程分配所需的资源,包括内存空间、CPU时间片、文件和设备等。

  3. 并发执行:多个进程可以并发执行,通过操作系统的调度算法决定哪些进程在哪个时刻执行。

  4. 通信机制:进程之间可以通过共享内存、消息传递等机制进行通信,实现数据交换和协作。

 3. 进程的属性

使用类/结构体,把被管理的一个对象的各个属性表示出来

  • PCB的属性(一个进程有一个)

    • pid:进程的身份标识

      • 每一个进程都有一个pid,同一时刻,不同进程的pid是不同的

    • 内存指针(一组属性)

      • 描述进程持有的“内存资源”是什么样子的

      • 每个进程在运行时时候,都会分配一定的内存空间,这个进程,内存空间,具体在哪里,以及分配的空间中有哪部分,每部分都是饭啥的,都是由内存指针进行区分的

      • 内存指针表示该进程在内存中的位置,意义快速找到内存中进程的位置,并恢复其上下文

    • 文件描述符表(顺序表结构)

      • 描述了进程持有的“硬盘资源”是啥样的 文件有关=>和磁盘有关

      • 一个进程要涉及到硬盘操作,就需要按照文件的方式来操作,当前进程关联了哪些文件,都能操作哪些文件,都是由文件描述符表决定的

      • 文件描述符表是进程控制块中的一个重要部分,用于管理进程打开的文件。意义是管理和追踪打开的文件

    • 进程的调度(进程持有的CPU资源的相关情况)

      • 进程的状态

        • 就绪状态

          • 已经准备好运行,正在等待分配CPU时间

        • 运行状态

          • 进程正在执行并占用CPU

        • 阻塞状态

          • 进程由于某种原因暂时无法继续执行,如等待I/O操作完成

        • 创建状态

          • 进程正在被创建但尚未开始执行

        • 终止状态

          • 进程已经执行完毕或被终止

      • 进程的优先级

        • 更好的调配系统资源,可以确保系统中重要或紧急的任务能够得到优先处理,从而提高系统的响应速度和效率

      • 进程的上下文

        • 进程在某一时刻的运行状态以及相关的数据结构,跟日记一样,一般都会把寄存器的值存到上下文中,就相当于存在内存中了

        • 存档

          • 进程从CPU离开之前,需要保存现场,把之前CPU中各种寄存器状态都记录在内存中

        • 读档

          • 下次进程回到CPU上执行的时候,此时就可以把保存这些寄存器的值,恢复回去,进程就会沿着上次执行的位置,继续执行

      • 进程的记账信息

        • 记账信息,会记录当前进程持有CPU的情况(在CPU执行多久了)就可以作为操作系统调度进程的参考依据,防止有些CPU一点资源也没有

    • 总结

      • 每个进程都有对应的PCB,用来管理进程的相关信息,PCB包含了操作系统对进程管理的所有信息,如进程状态、程序计数器、寄存器值、进程优先级、进程ID等

4. 进程的组织

  • 系统一般会使用双向链表来组织多个PCB。使用数据结构,把这些表示出来的对象,串起来(为了后序的增删改查)。
  • 原理介绍: 创建新的进程,创建PCB并把PCB插入到链表中。 销毁线程:把PCB从链表上删除并释放 展示进程列表:遍历链表中的每一个节点。

5. 进程间的通信

  • 因为虚拟地址空间的存在进程之间是相互独立的,所以要有进程之间的通信。

  1. 通过文件

            进程通过读写文件来进行数据交换,这种方式简单直接,适用于需要长期存储数据或者在不同时间点进行数据交换的情况。例如,一个进程可以将数据写入文件,另一个进程再从文件中读取这些数据。
  2. 通过网络(socket)

            网络连接进行进程间通信。这种方式可以在不同计算机之间进行通信,可以是在局域网内或者通过互联网。常见的网络通信方式包括使用套接字进行通信,可以实现客户端和服务器之间的通信。另外,还有像HTTP、FTP等应用层协议,用于在网络上传输数据。

扩展:虚拟地址空间(保证了进程的独立性)

  • 操作系统先进行检查虚拟地址,完成虚拟内存映射到物理内存上(翻译虚拟地址到物理地址)。

  • 防止一个访问越界,影响了其他好的内存,又因为操作系统要给进程提供一个稳定的运行环境,所以操作系统就引入“虚拟地址空间”概念,不是分配物理内存了,而是分配虚拟的内存空间,操作系统对于内存又进行了一层抽象

6. 进程的应用场景

  • 多任务处理:允许用户同时运行多个应用程序,提高计算机系统的利用率和效率。

  • 服务器管理:操作系统通过多进程模型支持服务器端应用,如Web服务器、数据库服务器等。

  • 并发编程:开发者可以利用进程来实现并行计算和分布式系统,处理大规模数据和复杂任务。

四、线程(“轻量级进程”)

  • 线程是资源调度的基本单位

1. 线程的概念

        线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。与进程不同的是,同一进程中的多个线程共享相同的内存空间和资源,但每个线程拥有独立的执行流程和程序计数器(Program Counter)。

2. 线程的特性

  1. 拥有进程的全部属性。
  2. 每个线程都可以独立的去CPU上调度执行
  3. 同一个进程的多个线程之间,共用同一份内存空间,和文件资源....所以说创建线程不需要重新申请资源了,直接复用之前已经分配给进程的资源,省去了资源分配的开销,于是创建效率就更高了
  4. 一个进程可以包含一个或者多个线程,每一个线程都可以执行一些代码,每个线程都是可以独立调度的。

与进程的差异

 

优势:

  1. 资源效率: 线程相比进程更轻量,因此更容易创建和销毁,可以更高效地利用系统资源。
  2. 响应性和并发性: 多线程使得程序可以响应多个请求或事件,提高了系统的并发处理能力。
  3. 简化数据共享: 线程共享同一进程的资源,这使得数据共享和通信相对简单。
  4. 资源节约:   线程共享同一个进程的内存空间和资源,创建和销毁线程开销较小。 速度: 线程切换开销较小,可以实现更快的并发执行。
  5. 通信简单:  线程可以直接访问共享内存,通信相对简单。

挑战:        

  1. 线程安全问题: 多个线程访问共享数据时可能引发竞态条件(Race Condition)和死锁(Deadlock),需要使用同步机制来解决。
  2. 调试和测试困难: 多线程程序的调试和测试比单线程程序更复杂,因为需要考虑不同线程之间的交互影响。
  3. 资源竞争: 如果线程过多或者线程设计不当,可能会导致系统资源竞争,降低整体性能。
  4. 安全性: 线程之间共享内存,需要额外的同步机制来保证数据一致性,容易出现竞态条件。
  5. 稳定性: 一个线程的崩溃可能导致整个进程崩溃。
  6. 复杂性: 线程之间的同步和通信需要额外的注意,易出现死锁等问题。

3. 线程同步与通信

在多线程编程中,确保线程之间的协作和数据一致性至关重要。常见的线程同步机制包括:

  • 锁(Locks): 包括互斥锁(Mutex)、读写锁(ReadWriteLock)等,用于保护共享资源,防止多个线程同时修改造成数据不一致。
  • 信号量(Semaphores): 用于控制同时访问某一资源的线程数量。
  • 条件变量(Condition Variables): 用于线程间的通信和等待/唤醒机制。

4. 线程的六大状态

  1. 未启动的线程的线程状态: NEW

    • 指的是创建了但尚未启动(调用start方法)的线程,此时线程处于NEW状态。
  2. 可运行线程的线程状态: RUNNABLE

    • 表示线程正在Java虚拟机中执行,可能在等待CPU调度执行,或者正在执行。
  3. 阻塞等待监视器锁的线程状态: BLOCKED

    • 当线程试图进入一个synchronized代码块,但该锁已经被其他线程占用时,该线程会进入BLOCKED状态,等待获取锁。
  4. 等待线程的线程状态: WAITING

    • 线程因为调用了Object.wait()、Thread.join()或LockSupport.park()而进入WAITING状态,需要其他线程的显式唤醒或者超时等待。
  5. 具有指定等待时间的等待线程的线程状态: TIMED_WAITING

    • 线程因为调用了Thread.sleep(long millis)、Object.wait(long timeout)、Thread.join(long millis)或LockSupport.parkNanos()而进入TIMED_WAITING状态,等待一段指定的时间后自动唤醒或者超时。
  6. 已终止线程的线程状态: TERMINATED

    • 线程执行完毕或者因为异常退出后,线程的状态变为TERMINATED。

5. 线程池和执行者框架

        为了更有效地管理和利用线程,现代编程语言和框架通常提供线程池(ThreadPool)和执行者框架(Executor Framework),这些工具可以管理线程的生命周期、调度执行任务,并提供了高级的线程管理功能,如线程复用和任务队列管理。

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

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

相关文章

@RequiredArgsConstructor详解

RequiredArgsConstructor详解 一、什么是RequiredArgsConstructor? RequiredArgsConstructor是Lombok的一个注解,简化了我们对Autowired书写,我们在写Controller层或者Service层的时候,总是需要注入很多mapper接口或者service接口&#xf…

Java-----栈

目录 1.栈(Stack) 1.1概念 1.2栈的使用 1.3栈的模拟实现 1.4栈的应用场景 1.5栈、虚拟机栈、栈帧有什么区别呢 1.栈(Stack) 1.1概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操…

EEtrade:区块链是什么

区块链,这个近年来频繁出现在我们视野中的术语,已经从一个技术小众圈的词汇,逐渐演变为全球关注的焦点。从比特币的诞生,到如今在金融、供应链、物联网等领域的广泛应用,区块链技术正在深刻地改变着我们的生活。那么&a…

我在高职教STM32——串口通信(5)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思的教学设计分享…

【linux】Shell脚本三剑客之grep和egrep命令的详细用法攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

LK漏感值在网络变压器测试中是否有很大的作用?

今天客户一个产品异常问题,就是说LK漏感值严重超标产品规格书参数,今天我们讲讲这个参数在网络变压器其中的影响。LK漏感值在网络变压器的测试和性能评估中扮演着重要的角色。漏感,或称为漏磁场感抗,是指变压器中不参与主要能量传…

springboot会员信息管理系统-计算机毕业设计源码38258

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3开发技术 1.3.1 Spring Boot框架 1.3.2 Java语言 1.3.3 MySQL数据库 1.4论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 登录流程 2.2.2数据删除流程 2.3 系统功能分析 2.4 系统用例分析…

《Java初阶数据结构》----8.<java对象的比较总结>

目录 前言 一、Java对象的比较 1.1基本类型的比较 1.2 对象比较的问题(与equals) 1.3对象的比较 (三种常用方式) 1.重写equals方法 2.基于Comparble接口类的比较 3.基于比较器比较(Comparator接口) …

秒懂C++之string类(下)

目录 一.接口说明 1.1 erase 1.2 replace(最好别用) 1.3 find 1.4 substr 1.5 rfind 1.6 find_first_of 1.7 find_last_of 二.string类的模拟实现 2.1 构造 2.2 无参构造 2.3 析构 2.4.【】运算符 2.5 迭代器 2.6 打印 2.7 reserve扩容 …

大模型算法面试题(十二)

本系列收纳各种大模型面试题及答案。 1、领域模型Continue PreTrain数据如何选取 在领域模型的Continue PreTrain(持续预训练)过程中,数据选取是一个至关重要的步骤,它直接影响模型在特定领域上的性能和泛化能力。以下是一些关于…

Transformer-Bert---散装知识点---mlm,nsp,较之经典tran的区别和实际应用方式

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点,有时间就会整理收录,希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同,bert是使用大量无标签的数据进行预训练&#…

batch norm记录

文章目录 概要整体架构流程训练阶段推理阶段模型中使用的注意事项 概要 面试百度时候被问到了BN 内部详细的训练阶段,推理阶段的计算过程。没回答好,来记录一下 推荐一下b站up: Enzo_Mi。视频做的确实不错 bn 讲解视频 整体架构流程 训练阶段 均值和标…

【C/C++】printf和cout的区别

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

C++初阶学习——探索STL奥秘——标准库中的string类

1. 为什么学习string类&#xff1f; 在我们学习C语言的时候&#xff0c;有一个点是非常难处理的&#xff0c;那就是字符串&#xff0c;在我们对字符串访问&#xff0c;增删查改时都是非常不便的&#xff0c;所以我们封装了一个string类主要来处理字符串有关的问题 2. 标准库中…

多模态论文一:CLIP模型主要内容讲解【原理+代码】

一、CLIP模型主要内容讲解 CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;是OpenAI在2021年发布的一种用于图像和文本联合表示学习的模型。CLIP的核心思想是通过对比学习来预训练一个模型&#xff0c;使其能够理解图像和文本之间的关系。以下是CLIP的工…

数据传输安全--SSL VPN

目录 IPSEC在Client to LAN场景下比较吃力的表现 SSL VPV SSL VPN优势 SSL协议 SSL所在层次 SSL工作原理 SSL握手协议、SSL密码变化协议、SSL警告协议三个协议作用 工作过程 1、进行TCP三次握手、建立网络连接会话 2、客户端先发送Client HELLO包&#xff0c;下图是包…

Oracle对比两表数据的不一致

MINUS 基本语法如下 [SQL 语句 1] MINUS [SQL 语句 2];举个例子&#xff1a; select 1 from dual minus select 2 from dual--运行结果 1-------------------------------- select 2 from dual minus select 1 from dual--运行结果 2所以&#xff0c;如果想找所有不一致的&a…

【数据结构】二叉树链式结构——感受递归的暴力美学

前言&#xff1a; 在上篇文章【数据结构】二叉树——顺序结构——堆及其实现中&#xff0c;实现了二叉树的顺序结构&#xff0c;使用堆来实现了二叉树这样一个数据结构&#xff1b;现在就来实现而二叉树的链式结构。 一、链式结构 链式结构&#xff0c;使用链表来表示一颗二叉树…

FPGA:有限状态机

从以下6个实验理解状态机的概念 开发板频率为 50 M H z 50MHz 50MHz&#xff0c;一个时钟周期是 20 n s 20ns 20ns。 1、实验一:LED灯亮0.25秒、灭0.75秒的状态循环 通过之前的分析&#xff0c;我们实现频闪灯时&#xff0c;是让led灯在0.5秒实现一次翻转&#xff0c;而这里…

经典文献阅读之--World Models for Autonomous Driving(自动驾驶的世界模型:综述)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…