【操作系统】一文快速入门,很适合JAVA后端看

作者简介:

目录

1.概述

2.CPU管理

3.内存管理

4.IO管理


1.概述

操作系统可以看作一个计算机的管理系统,对计算机的硬件资源提供了一套完整的管理解决方案。计算机的硬件组成有五大模块:运算器、控制器、存储器、输入设备、输出设备。操作系统实际上就是对这个五块资源各自提供了一套管理方案,然后合起来形成一个总的对计算机的管理策略。我们进行软件开发的时候都无法直接和五大模块的硬件进行交互,都需要通过调用操作系统这个中间层暴露出来的API来完成。诸如JAVA之类的高级编程语言,其底层很多东西其实就是基于操作系统暴露出来的API进行二次封装的。

JAVA体系中有哪些东西是对操作系统的二次封装喃?至少有两块儿:线程和IO。这两块儿已经是后端编程里的重点内容了。需要进行并发操作、异步任务、定时任务等需要用到多线程编程,多线程编程时需要熟悉线程模型,而线程模型本质上就是操作系统中CPU管理的一整块内容。需要进行网络通信时,需要用到网络编程,需要熟悉IO模型,而IO模型本质上就是操作系统中IO管理的一整块内容。多线程编程可能平时还会用到,可能很多同学会疑惑,网络编程一般会用在哪儿?在JAVA EE中诸如tomcat、netty之类的web server容器,在通信上都必须用到网络编程,dubbo、nacos之类的微服务注册中心在进行服务注册、调用时也会用到网络编程,这些内容目前开源方案已经封装好了,但是在某些时候需要自研框架时,IO作为一个实现系统高性能的关键点,一定是绕不开的一个点,需要自行进行IO的开发。

综上所述,对JAVA后端而言,操作系统中一些核心内容是很有必要掌握的,了解清楚这几块儿内容才能更好的完成相应方面的开发。

作者之前写过一个操作系统的系列博客,本文其实就是对这个系列的整合,以章节清单的方式,完整整合那些后端需要知道的操作系统的内容。

2.CPU管理

本块内容主要包含:

CPU的大致工作过程:取值执行。

为什么需要进程:为了更好的利用CPU资源,程序需要不断切换执行,因此需要对运行中的程序进行描述。

然后就是进程的状态切换:

最后就是为什么会有线程,线程和进程的关系,以及数据一致性、线程通信、死锁、调度等操作相关的内容。

文章链接:

【进程与线程】最好懂的讲解__BugMan的博客-CSDN博客

操作系统(2)进程管理(上)进程与线程__BugMan的博客-CSDN博客

操作系统(3)进程管理(中)数据一致性_操作系统中什么是数据一致性__BugMan的博客-CSDN博客

操作系统(4)进程管理(下)通信、死锁、调度__BugMan的博客-CSDN博客

3.内存管理

内存中到底存放的是什么东西?内存中存放的是进程,内存中各个进程圈地而治,所圈的地盘中存放各个进程自己的指令和数据,进程执行完毕后,退出内存,还出圈给它的地。如何给各个进程圈地,就是存储管理的核心

这一块儿内容里我们将明白CPU是如何进行地址映射,在内存中找到对应进程的内容的。

文章链接:

操作系统(5)内存管理_页表寄存器在内存中吗__BugMan的博客-CSDN博客简单讨论一下操作系统的内存管理_页表寄存器在内存中吗https://blog.csdn.net/Joker_ZJN/article/details/127768414

4.IO管理

IO管理,管理的主要是计算机的外设,即接入主机的设备(CPU、内存、总线之外的设备)。所管理的内容中最重要的就是如何让IO设备与主机之间高效的进行数据传输。

计算机的IO其实就是在内存中为各个IO设备分配了属于它的一块内存,向这块内存中进行读写即可完成IO。这块内存是位于计算机内存中的内核段中的。

一次完整的IO过程是:

  1. CPU执行IO指令
  2. 将内核段中数据读到用户段
  3. 用户段中数据交给CPU
  4. CPU的执行结果写回用户段
  5. 用户段中存的结果写回内核段

这一块儿里,我们将了解计算机的IO,数据是如何在内存中流转的,以及整个计算机的IO模型,会对我们认识理解BIO、NIO等JDK原生IO支持或者netty等IO框架有很大的帮助。

文章链接:

全网最清晰JAVA NIO,看一遍就会__BugMan的博客-CSDN博客

全网最清晰的零拷贝详解,看一遍就会__BugMan的博客-CSDN博客

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

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

相关文章

ubuntu22.04搭建verilator仿真环境

概述 操作系统为 Ubuntu(22.04.2 LTS),本次安装verilator开源verilog仿真工具,进行RTL功能仿真。下面构建版本为5.008的verilator仿真环境。先看一下我系统的版本: 安装流程 安装依赖 sudo apt-get install git perl python3 make autoc…

多级缓存 架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中,很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格,多次遇到一个很重要的面试题: 20w的QPS的场景下,服务端架构应如何设计?10w的QPS…

【原创】鲲鹏ARM构架openEuler操作系统安装Oracle 19c

作者:einyboy 【原创】鲲鹏ARM构架openEuler操作系统安装Oracle 19c | 云非云计算机科学、自然科学技术科谱http://www.nclound.com/index.php/2023/09/03/%E3%80%90%E5%8E%9F%E5%88%9B%E3%80%91%E9%B2%B2%E9%B9%8Farm%E6%9E%84%E6%9E%B6openeuler%E6%93%8D%E4%BD%9C%E7%B3%BB%…

FPGA优质开源项目 – UDP万兆光纤以太网通信

本文开源一个FPGA项目:UDP万兆光通信。该项目实现了万兆光纤以太网数据回环传输功能。Vivado工程代码结构和之前开源的《UDP RGMII千兆以太网》类似,只不过万兆以太网是调用了Xilinx的10G Ethernet Subsystem IP核实现。 下面围绕该IP核的使用、用户接口…

LLMs NLP模型评估Model evaluation ROUGE and BLEU SCORE

在整个课程中,你看到过类似模型在这个任务上表现良好,或者这个微调模型在性能上相对于基础模型有显著提升等陈述。 这些陈述是什么意思?如何形式化你的微调模型在你起初的预训练模型上的性能改进?让我们探讨一些由大型语言模型开…

TypeScript学习 + 贪吃蛇项目

TypeSCript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,任何的JS代码都可以直…

MySQL高阶语句(三)

一、NULL值 在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失 的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空…

Multisim14.0仿真(五)三角波发生器

一、仿真原理图: 二、仿真效果:

Three.js相机参数及Z-Fighting问题的解决方案

本主题讨论透视相机以及如何为远距离环境设置合适的视锥体。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 透视相机是一种投影模式,旨在模仿人类在现实世界中看待事物的方式。 这是渲染 3D 场景最常用的投影模式。 - three.js 如果你看一下 Three.js 文档…

单元测试:优雅编写Kotlin单元测试

一、MockK简介 MockK是一款功能强大、易于使用的Kotlin mocking框架。在编写单元测试时,MockK能够帮助我们简化代码、提高测试覆盖率,并改善测试的可维护性。除了基本用法外,MockK还提供了许多额外的功能和灵活的用法,让我们能够…

go语言基础操作--二

a : 10str : "mike"//匿名函数,没有函数名字 形成一个闭包,函数定义,还没有调用f1 : func() { //:自动推到类型fmt.Println("a ", a)fmt.Println("str ", str)}f1()//给一个函数类型起别名 这个写法不推荐type FuncType …

04. 函数和函数调用机制

1. 先学习/复习C语言的入门知识 1.1 C语言简介 C语言是一种通用的编程语言,于1972年由丹尼斯里奇(Dennis Ritchie)创建。C语言最初目的是为了开发UNIX操作系统,但由于其简洁的语法、快速的执行速度和可移植性,自此成…

【Python数据分析】数据分析之numpy基础

实验环境:建立在Python3的基础之上 numpy提供了一种数据类型,提供了数据分析的运算基础,安装方式 pip install numpy导入numpy到python项目 import numpy as np本文以案例的方式展示numpy的基本语法,没有介绍语法的细枝末节&am…

ZooKeeper基础命令和Java客户端操作

1、zkCli的常用命令操作 (1)Help (2)ls 使用 ls 命令来查看当前znode中所包含的内容 (3)ls2查看当前节点数据并能看到更新次数等数据 (4)stat查看节点状态 (5&#xf…

【kubernetes】Argo Rollouts -- k8s下的自动化蓝绿部署

蓝绿(Blue-Green)部署简介 在现代软件开发和交付中,确保应用程序的平稳更新和发布对于用户体验和业务连续性至关重要。蓝绿部署是一种备受推崇的部署策略,它允许开发团队在不影响用户的情况下,将新版本的应用程序引入生产环境。 蓝绿部署的核心思想在于维护两个独立的环…

ESP32C3 LuatOS RC522①写入数据并读取M1卡

LuatOS RC522官方示例 官方示例没有针对具体开发板,现以ESP32C3开发板为例。 选用的RC522模块 ESP32C3-CORE开发板 注意ESP32C3的 SPI引脚位置,SPI的id2 示例代码 -- LuaTools需要PROJECT和VERSION这两个信息 PROJECT "helloworld" VERSIO…

前端list列表自定义图标并设置大小

前端list列表自定义图标并设置大小 一、前端list列表基础知识回顾 前端公有两种列表,一种是有序列表(ol),一种是无序列表(ul),它们的子元素都是(li)。 1.1 有序列表&a…

4.0 Spring与Dubbo整合原理与源码分析

#Dubbo# 文章介绍 Dubbo中propertie文件解析以及处理原理Dubbo中@Service注解解析以及处理原理Dubbo中@Reference注解解析以及处理原理1.0 整体架构和流程 应用启动类与配置 public class Application {public static void main(String[] args) throws Exception {Annotation…

【【萌新的STM32学习-27--USART异步通信配置步骤】】

萌新的STM32学习-27–USART异步通信配置步骤 USART/UART 异步通信配置步骤 1.配置串口工作参数 HAL_UART_Init() 我们会在此处调用MSP中的回调函数 2.串口底层初始化 用户定义HAL_UART_MspInit() 配置GPIO NVIC CLOCK 等 3.开启串口异步接收中断 HAL_UART_Receive_IT() 4.…

CXL Memory Cache 分类及 Cacheline 归属问题

🔥点击查看精选 CXL 系列文章🔥 🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…