JavaEE 初阶篇-深入了解操作系统中的进程与 PCB

 🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 关于计算机是如何进行工作的 “常识”

        1.1 关于寄存器、缓存与内存是如何配合 CPU “工作”

        2.0 操作系统概述

        2.1 操作系统内核

        2.2 进程

        2.3 PCB

        2.3.1 PCB 属性 - PID

        2.3.2 PCB 属性 - 内存指针

        2.3.3 PCB 属性 - 文件描述符表

        2.4 进程调度

        2.4.1 PCB 属性 - 进程状态

        2.4.2 PCB 属性 - 进程优先级

        2.4.3 PCB 属性 - 上下文(存档信息)

        2.4.4 PCB 属性 - 记账信息


        1.0 关于计算机是如何进行工作的 “常识”

        一个程序的指令在 CPU 上是如何执行的:指令是存储在内存中的,运行程序的时候,操作系统会先把程序的指令从硬盘(可执行文件),读取到内存中,每执行一个指令,都要经历三个环节:

        1)取指令:把内存中保存的指令,读到 CPU 里。

        2)解析指令:每个 CPU 设计的时候,都约定了指令表,内嵌到 CPU 中。为了搞清楚每一个指令要干啥,后续的参数都是啥意思。

        3)执行指令

        1.1 关于寄存器、缓存与内存是如何配合 CPU “工作”

1)寄存器:

        位于 CPU 内部的一组高速存储器,用于暂存指令、数据和中间结果。寄存器是 CPU 最快速的存储设备,用于临时存储 CPU 执行的指令时需要的数据和地址。

        指令最终会在寄存器(Instruction Register 简称 IR)中进行。需要注意的是,寄存器的类型不止一种,功能也是不一样的,比如,通用寄存器、专用寄存器。

        当 CPU 需要执行指令时,会根据程序计数器( 简称,PC)中的地址从内存中读取指令, CPU 会将读取到的指令存储在寄存器中进行执行,而不是存储在缓存中。

2)缓存:

        位于 CPU 内部或与 CPU 相关联的存储器,用于存储 CPU 访问频繁的数据和指令。缓存是为了解决 CPU 访问内存(主存)速度慢的问题而设计的,通过缓存可以减少 CPU 访问主存的延迟。缓存的访问速度介于寄存器于内存之间。

3)寄存器与缓存之间的区别:

        作用上的区别:

        寄存器,用于临时存储 CPU 执行指令时需要的数据和地址。是最终执行指令的位置。

        缓存,要用于存储 CPU 频繁访问的数据和指令,以加快 CPU 对这些数据和指令的访问速度。

        速度上的区别:

        寄存器存取的速度比缓存快,且缓存的存取速度比内存快。

        2.0 操作系统概述

        操作系统(Operating System)是一种系统软件,操作系统既可以管理计算机硬件资源,也可以管理软件资源。操作系统在计算机系统中扮演着重要的角色,它负责管理和协调计算机系统中的各种资源,包括硬件资源和软件资源。

        1)管理硬件资源:操作系统管理计算机的硬件资源,包括中央处理器(CPU)、内存、硬盘、输入输出设备等。它通过调度算法来分配 CPU 时间片,管理内存的分配和回收,控制硬盘存储和文件系统等,以确保硬件资源能够被有效利用。

        2)管理软件资源:操作系统管理计算机系统中的软件资源,包括进程、文件和用户界面等。它负责创建、调度、暂停、恢复和终止进程,管理文件系统中的文件和目录,提供用户与计算机系统之间的接口,以便用户和应用程序能够方便地利用软件资源。

        目前市场上常见的操作系统主要包括以下几类:Windows 操作系统、macOS、Linux 操作系统和 iOS 等等。

        2.1 操作系统内核

        操作系统内核是操作系统的核心组件,负责管理系统资源、提供系统调度、实现进程管理、文件系统管理等核心功能。内核通常被设计为一个独立的运行在特权模式下的软件,控制着系统的底层硬件和资源。

1)从软件角度讲解操作系统内核:

举个例子:

        现在在敲出一串代码:

System.out.println("hello world");

        写出来的代码就是一个应用程序,这里需要操作显示器,显示器是一个硬件,不是由程序直接操作的,而是通过以上的代码程序“告诉”操作系统,“我要操作显示器”,这样操作系统给你完成这个功能。而操作系统来控制底层硬件主要是由内核完成的。

        操作系统内核 ,就会给应用程序提供一系列的 API 。比如,其中有的 API 是操作显示器,有的 API 是用来响应鼠标的,有的用来操作网卡等等。

        那么以上的代码,这是调用 Java 中内置的标准库函数,这个函数的内部本质上,就需要调用操作系统内核提供的 API ,告知系统,需要控制显示器。进入到操作系统内核中了,内核在通过显示器的驱动程序(显卡驱动),在显示器上绘制对应的内容(字符串)。

2)从硬件角度讲解操作系统内核:

        操作系统内核通过硬件驱动程序,从而来操作硬件。比如,同一种硬件,不同的厂商,产出来的具体细节都会有区别,硬件生产厂商就需要通过驱动程序,告知硬件具体的特点和使用详情。

        2.2 进程

        进程是操作系统进行资源分配和调度的基本单位,操作系统通过管理和调度进程来实现对计算机系统的控制。

        在操作系统中,一个进程通常对应着一个正在运行的程序实例。当用户启动一个应用程序时,操作系统会为该应用程序创建一个新的进程,该进程包含了应用程序的代码、数据和执行状态。这个进程会被操作系统分配资源(如内存、处理器时间等),并在系统中运行。

        内核控制着系统中所有的进程,并负责对进程进行调度、管理和控制。

        2.3 PCB

        在操作系统中,每个进程都有一个对应的 PCB(Process Control Block),PCB 用于记录和管理进程的各种信息。PCB 是操作系统内核中的数据结构,用来维护进程的状态、程序计数器、寄存器状态、进程标识符、优先级、内存分配情况、打开文件列表等关键信息。

        PCB 通常存储在操作系统内核的内存空间中。当一个进程被创建时,操作系统会为该进程分配一块内存空间来存储其对应的 PCB。这块内存空间通常位于内核空间,因为只有内核才能直接访问和修改进程的 PCB。

        进程本身并不在内核中,而是在用户空间中运行。进程是程序的执行实例,包含了代码、数据和执行状态。当一个程序被加载到内存中并开始执行时,就会创建一个对应的进程。

        简单来说,PCB 是进程的结构体,PCB 中包含了进程的各种属性和状态信息。

        操作系统中通常会类似使用链表这样的结构,来把多个 PCB 串起来。

        2.3.1 PCB 属性 - PID

        唯一标识每个进程的标识符。同一个时刻,进程 id 一定是不同的。

        2.3.2 PCB 属性 - 内存指针

        进程运行时,需要消耗一定的硬件资源。内存就是一个关键的资源。比如,一个程序在运行的时候,就会从硬盘加载到内存中,这时候,就会根据内存指针加载这个程序的指令和依赖的数据。

        这指的是一组指针,不光是一个,一组指针就告诉操作系统,该进程,要运行的指令都在内存的那些位置。

        2.3.3 PCB 属性 - 文件描述符表

        记录进程打开的文件和文件描述符等信息。一个进程运行的时候,会操作一些文件,就通过一个 “顺序表” 这样的数据结构,记录下当前这个进程,都打开了哪些文件。

        2.4 进程调度

        进程调度是操作系统中的一个重要功能,用于决定哪个进程可以在 CPU 上执行。进程调度的主要目标是提高系统的性能、资源利用率和响应时间。

1)并行执行:一个核心,同一时刻,只能运行一个进程,完全同时执行。

2)并发执行:CUP 把总的执行时间,切换成若干个小的片段,每个片段执行一个进程,每个片段称为“时间片”,由于时间片比较短,CUP 切换进程的速度很快,人感知不到。站在人的角度来看,就是这若干个进程在“同时执行”,但是本质上不是同时。

        因此,操作系统会按照并发与并行相互搭配,运行所有的进程。PCB 提供常见以下四种属性来支持进程调度:

        2.4.1 PCB 属性 - 进程状态

        记录了进程当前的状态,如运行、就绪、阻塞等。进程调度时需要根据进程的状态来确定哪些进程可以被调度执行。

        2.4.2 PCB 属性 - 进程优先级

        记录了进程的优先级,用于确定进程在就绪队列中的执行顺序。优先级高的进程通常会被优先调度执行。

        2.4.3 PCB 属性 - 上下文(存档信息)

        当前进程调度结束后,需要将未完成,等待下次完成的信息或者数据进行存档,以便下次该进程调度的时候,可以找回上一次调度的信息或者数据。

        2.4.4 PCB 属性 - 记账信息

        包括进程的调度策略、调度算法以及进程的调度参数等等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Grok-1开源革新:探索人工智能的新境界

Grok-1开源革新:探索人工智能的新境界 在科技发展的马拉松中,Elon Musk旗下的xAI公司稳步前进,推出了名为Grok-1的语言模型。这个巨型模型,作为目前参数量最大的开源人工智能语言模型,赋予了机器学习领域全新的活力。 …

Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(二)

概览 我们在第一篇博文: 《Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(一)》中讨论了 Swift 语言中的钩子(Hook)机制,以及如何用它来“勾”住 NSObject 的 init 构造器方法。 不过,目前“疑云重重”的实现显然“虐”的你在一直“怀疑人生”…

信雅纳400/800G网络测试仪之 CDF/ Extended Payload 功能:完全用户自定义的协议报文支持/可编程的协议内容支持

Note# 2024-3-21 今天被一个做芯片测试的客户追着问,应该合作在测试仪上做完全自定义的报文,添加自己的私有协议进去,他觉得每次都导入报头太麻烦了,然后就看了下Application Note关于CDF功能的描述,照着机翻的版本来…

回归学术圈,何恺明MIT第一堂AI课

大家好,3月7日,麻省理工学院电气工程与计算机科学系副教授何恺明,迈上讲台,并成功地进行了他人生中的首堂教学课程。 第一堂课 课程官网:https://advances-in-vision.github.io/ 作为麻省理工学院(MIT&am…

处理器方法的返回值--返回对象Object

处理器方法也可以返回Object对象。这个Object可以是Integer,String,自定义对象, Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。 返回对象,需要使用ResponseBody注…

【前端工程化】TypeScript概念及使用

前端工程化(2)- TS 文章目录 前端工程化(2)- TSTS概念TS声明变量方式TS的类访问修饰符静态属性抽象类 TS的数据类型tuple元祖enum枚举anyvoidnever enum枚举使用例子反向映射枚举和常量枚举(const枚举)的区…

一文读懂融资融券交易技巧!在上海开融资融券账户交易利率一般是多少?

融资融券交易技巧包括以下几点: 熟悉股票市场:了解市场走势、公司基本面等信息,根据趋势选择合适的股票进行交易。 做好风险管理:对买卖的风险进行合理评估,设定止损价位,防止损失过大。 控制杠杆比例&am…

PowerShell 一键更改远程桌面端口

前言 提高工作效率,安全性和规范化,最终实现一键更改Windows 远程桌面端口 前提条件 开启wmi,配置网卡,参考 一键更改远程桌面端口自动化脚本 默认端口3389变更后的端口3390win+r mstsc YOU_ip常规更改的连接方式win+r mstsc YOU_ip:3390需要恢复到原来的端口3390更改成3…

【Linux笔记】汇编

汇编笔记 启动方式

IoT 物联网场景中 LoRa + 蓝牙Bluetooth 室内场馆高精定位技术全面解析

基于LoRa蓝牙的室内场景定位技术,蓝牙主要负责位置服务,LoRa主要负责数据传输。 01 LoRa和蓝牙技术 LoRa全称 “Long Rang”,是一种成熟的基于扩频技术的低功耗、超长距离的LPWAN无线通信技术。LoRa主要采用的是窄带扩频技术,抗干…

【spring】@Lazy注解学习

Lazy介绍 Lazy 注解是一个配置注解,用于指示 Spring 容器在创建 bean 时采用延迟初始化的策略。这意味着,除非 bean 被实际使用,否则不会被创建和初始化。 在 Spring 框架中,默认情况下,所有的单例 bean 在容器启动时…

如何在Ubuntu使用宝塔部署Emlog网站并发布到公网实现任意浏览器访问

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…

5G网络架构与组网部署03--5G网络组网部署

1. SA组网与NSA组网 (1)NSA 非独立组网:终端同时接入4G基站和5G基站,只能实现5G部分功能 (2)SA组网【最终目标】:5G基站可以单独提供服务,接入的是5G核心网 区别:同一时间…

从0到1:Java构建高并发、高可用分布式系统的实战经验分享

文章目录 引言基础架构选择与设计微服务架构分布式储存与计算 高并发处理策略异步处理与消息队列并发控制与资源隔离 高可用性设计与故障恢复冗余与集群化容错与自我修复监控与运维自动化 引言 随着互联网业务的快速发展和技术迭代升级,作为Java架构师,…

yank+mermaid+甘特图实例

因为notion对于mermaid支持很一般,尤其是甘特图,如果时间跨度大、节点多,字号会小到看不见,非常不方便。 同样的代码,在notion中如下图所示:(下图是我的一份年度规划) (…

【C++ leetcode 】双指针问题

1. 183. 移动零 题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 题目链接 . - 力扣(LeetCode) 画图 和 文字 分…

云效 AppStack + 阿里云 MSE 实现应用服务全链路灰度

作者:周静、吴宇奇、泮圣伟 在应用开发测试验证通过后、进行生产发布前,为了降低新版本发布带来的风险,期望能够先部署到灰度环境,用小部分业务流量进行全链路灰度验证,验证通过后再全量发布生产。本文主要介绍如何通…

九.pandas绘图基础

目录 九.pandas绘图基础 1-柱状图 --参数stackedTrue堆积 --参数figsize(宽,高) --自定义横坐标 --设置字体&显示负号 2.箱型图 3. 折线图 九.pandas绘图基础 Pandas的DataFrame和Series,在matplotlib基础上封装了一个简易的绘图函数, 使得我们在数据处…

刷题训练之滑动窗口

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握滑动窗口算法,并且能把下面的…