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 属性 - 记账信息

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

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

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

相关文章

Centos7没有可用软件包 ifconfig问题解决

问题描述 在Centos7中查看ip没有ifconfig,使用yum安装ifconfig报错没有可用软件包 ifconfig问题解决 [rootlocalhost etc]# yum -y install ifconfig 已加载插件:fastestmirror base …

动手做简易版俄罗斯方块

导读:让我们了解如何处理形状的旋转、行的消除以及游戏结束条件等控制因素。 目录 准备工作 游戏设计概述 构建游戏窗口 游戏方块设计 游戏板面设计 游戏控制与逻辑 行消除和计分 判断游戏结束 界面美化和增强体验 看看游戏效果 准备工作 在开始编码之前…

火灾自动报警及消防联动控制系统主机的九个主要组成部分

关于火灾报警联动系统的主机组成,一般有两种不同的概括,下面分别讨论。 一: 火灾报警主机的组成部分较多,主要包括以下消防设备:主电源、联动电源、打印机、驱动器、直接控制板、总线控制板、消防广播、消防电话主机…

粒子群算法 - 目标函数最优解计算

粒子群算法概念 粒子群算法 (particle swarm optimization,PSO) 由 Kennedy 和 Eberhart 在 1995 年提出,该算法模拟鸟群觅食的方法进行寻找最优解。基本思想:人们发现,鸟群觅食的方向由两个因素决定。第一个是自己当初飞过离食物…

FPGA工程正确的设计流程

1 正确的设计流程 分析项目的具体需求来设计系统的结构,划分系统的层次,确定各个子模块的结构关系和信号之间的相互关系,然后确定模块的端口信号等根据每隔模块的功能和自己的理解,结合芯片手册接口的时序,使用visio画…

基于QGraphicsView的图像显示控件,支持放大、缩小、鼠标拖动

原链接 前言 这是一个Qt平台的基于QGraphicsView类的图像显示控件,支持输入QPixmap、QImage、opencv的从cv::Mat类。 实现平台:Windows 10 x64 Qt 6.2.3 MSVC 2019 opencv 4.5 先来看演示视频 控件类实现 ImageViewer.h文件 #ifndef IMAGEVIEWER…

Docker 笔记(八)--Dockerfile

目录 1. 背景2. 参考3. 原文3.1 Dockerfile 支持的指令3.2 Dockerfile格式3.3 Parser指令syntaxescape 3.4 环境变量替换3.5 docker构建忽略文件3.6 Shell 和 exec 格式Exec 格式Shell 格式使用不同的 shell 3.7 FROM指令了解ARG和FROM如何交互 3.8 RUN指令RUN指令缓存失效RUN …

4 CUDA 环境搭建

4.1 简介 本章面向从未接触过CUDA的初学者。我们将依次介绍如何在不同操作系统上安装CUDA、有哪些可用的CUDA 工具以及CUDA如何编译代码,最后介绍应用程序接口提供的错误处理手段,并帮助读者识别CUDA代码和开发过程中必然碰到的应用程序接口报错。Windo…

java框架 2 springboot 过滤器 拦截器 异常处理 事务管理 AOP

Filter 过滤器 对所有请求都可以过滤。 实现Filter接口,重写几个方法,加上WebFilter注解,表示拦截哪些路由,如上是所有请求都会拦截。 然后还需要在入口处加上SvlterComponentScan注解,因为Filter是javaweb三大组件之…

Leetcode刷题【每日n题】(8)

题目一 思路分析 1.循环遍历直到这个数小于102.获取每个位数之合3.将合赋值给目标数,直到小于10 代码实现 class MyTest{public int addDigits(int num) {//直到目标数小于10while(num>10){//定义各个位数合int sum0;//num不能为0while(num>0){//获取每个位上…

java-ssm-jsp基于javaweb的宠物猫狗商业系统

java-ssm-jsp基于javaweb的宠物猫狗商业系统 获取源码——》公主号:计算机专业毕设大全 获取源码——》公主号:计算机专业毕设大全

leetcode106从中序与后序遍历序列构造二叉树

目录 1.解题关键2.思路3.变量名缩写与英文单词对应关系4.算法思路图解5.代码 本文针对原链接题解的比较晦涩的地方重新进行说明解释 原题解链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/solutions/50561/tu-jie-…

Java程序设计 3 选择

布尔数据类型和逻辑运算符 boolean类型的值为true和false,其字面值也只有true和false(也就是不能等同视为0和非零,这一点和C/C有所不同),且不能和其他数据类型混合运算(包括类型转换)。 Java里面…

Vue2(七):脚手架、render函数、ref属性、props配置项、mixin(混入)、插件、scoped样式

一、脚手架结构(Vue CLI) ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ …

详解main函数参数argc、argv及如何传参

目录 1、main()函数参数 2、main函数如何传参 2.1 环境准备 2.2 通过 Powershell 窗口传参 2.3 通过vs界面传参 3、int main() 和 int main(int argc, char *argv[]) 特点 1、main()函数参数 在C语言中,main函数可以带参数。main函数的原型通常为以下两种形式…

基于Springboot+Vue的在线考试系统

项目介绍 这是一个在线考试系统,使用Maven进行项目管理,基于springbootmybatis框架开发的项目,mysql底层数据库,前端采用VueElementPlus,作为初学springbootvue前后端分离架构的同学是一个很不错的项目,如…

Diff算法详解

简要了解 Diff 算法目的就是找出新旧虚拟dom差异,最小化更新视图;即本质就是比较两个JS对象的差异;并不是页面上所有的更新都需要Diff算法。 在了解Diff算法之前,我们首先需要了解一下什么是虚拟DOM。 虚拟DOM 虚拟DOM是表示真实…

C++初阶:vector相关练习

目录 1. 只出现一次的数2. 杨辉三角3. 删除有序数组中的重复项4. 只出现一次的数II5. 只出现一次的数III6. 数组中出现次数超过一半的数7. 电话号码的字母组合(多叉树遍历) 1. 只出现一次的数 题目信息: 题目链接: 只出现一次的数…

集合系列(六) -IdentityHashMap详解

一、摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properties等等。 应该有很多人不知道 IdentityHashMap 的存在,其中不乏工作很多年的 Java 开发者&am…

网文遇冷、短剧续命,阅文去年营收下滑8%

阅文能否靠短剧“续命”? 3月18日,阅文集团(下称“阅文”,00772.HK)公布了2023年财报,尽管去年净利润增加三成以上,但其营收持续下滑。 「不二研究」据其最新年报发现:2023年,阅文营收同比下滑8.0%。目前…