操作系统底层工作原理

操作系统底层架构与内核设计及实现原理 CPU的全称是CentrolProcessingUnit,它是你的电脑中最硬核的组件,这种说法一点不为过。CPU是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。通过在单个计算机芯片上放置数十亿个微型晶体管来构建CPU,这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说CPU决定了你电脑的计算能力。 阅读详情

1、CPU指令结构

CPU内部结构

  • 控制单元
  • 运算单元
  • 数据单元

在这里插入图片描述
1)控制单元,给我们提供些指令进行控制, 那为什么要用到控制单元呢?像我们的程序代码中,经常要使用到if判断都操作时,就需要使用到控制单元中的指令。

2)运算单元,将运算的逻辑都放在运算单元。

3)存储单元,主要是用来运算结果临时存储的功能,存储单元主要由寄存器和CPU的缓存组成,是CPU中暂时存放数据的地方。存储单元存储了两部分东西,一部分是指令,一部分是数据。

4)内存,内存主要是存放指令和数据。java中的代码通过javac命令编译成class文件,字节码class文件被类加载器加载到JVM的元空间里面,元空间就有了这些指令和数据。

2、CPU缓存结构

现代CPU为了提升执行效率,减少CPU与内存的交互(交互影响CPU效率),一般在CPU上集成了多级缓存架构,常见的为三级缓存结构
一个CPU可以使多核的,一台电脑上也可安装多个CPU
以下CPU是一个单CPU 4核(物理核)、8个逻辑处理器(一个物理核可以同时执行两个线程)、三级缓存(L1、L2、L3)
在这里插入图片描述
1)为什么要在CPU上设计三级缓存呢?
摩尔定律:每18个月CPU性能至少提升一倍。
内存的发展速度远远跟不上CPU的发展速度,因此,CPU的性能远远要高于内存,由于CPU到内存中读取指令是一个很复杂的过程,效率很低。CPU和内存在主板的不同位置,两者之间的通信就相当耗时了。那么为了减少CPU和内存之间的交互,在CPU上设计了缓存。

2)为什么三级缓存的大小依次递增的?
三级缓存的速度:
CPU中的寄存器 > L1 > L2 > L3 > 内存
存储器存储空间大小:内存 > L3 > L2 > L1 > 寄存器

L1一级缓存是离CPU内核最近的缓存
内存中读取的数据会先放到L3,再将L3的数据拷贝到L2,再将L2的数据拷贝到L1,再从L1中的数据拷贝到CPU的寄存器中,CPU操作的存储空间永远是寄存器中存取。每一个CPU都有一个自己独有的寄存器,这个寄存器只有自己的CPU可以访问,其他的CPU不能访问。
在这里插入图片描述
L3缓存是整个CPU上所有内核共享的,L1和L2是CPU上每个内核独享的。L1在上图中做了逻辑上的划分,划分为两部分,一部分存储指令,一部分存储数据。

3)CPU读取数据的过程:
首先CPU从L1缓存中找,如果没有找到则从L2缓存中找,如果没有找到,则从L3缓存中找,如果没有找到,则从内存中找。
读取到的数据不能立刻存放到寄存器中,会先存放到L3缓存中,再拷贝一份到L2缓存和L1缓存中,再读取到寄存器中。

4)空间局部性原则(Spatial Locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。比如顺序执行的代码、连续创建的两个对象、数组等。CPU会将它相邻的数据加载进内存。

public class TwoDimensionalArraySum {

    private static final int RUNS = 100;
    private static final int DIMENSION_1 = 1024 * 1024;
    private static final int DIMENSION_2 = 6;
    private static long[][] longs;

    public static void main(String[] args) throws Exception {
        /*
         * 初始化数组
         */
        longs = new long[DIMENSION_1][];
        for (int i = 0; i < DIMENSION_1; i++) {
            longs[i] = new long[DIMENSION_2];
            for (int j = 0; j < DIMENSION_2; j++) {
                longs[i][j] = 1L;
            }
        }
        System.out.println("Array初始化完毕....");

        long sum = 0L;
        long start = System.currentTimeMillis();
        for (int r = 0; r < RUNS; r++) {
            for (int i = 0; i < DIMENSION_1; i++) {//DIMENSION_1=1024*1024
                for (int j=0;j<DIMENSION_2;j++){//6
                    sum+=longs[i][j];
                }
            }
        }
        System.out.println("spend time1:"+(System.currentTimeMillis()-start));
        System.out.println("sum1:"+sum);

        sum = 0L;
        start = System.currentTimeMillis();
        for (int r = 0; r < RUNS; r++) {
            for (int j=0;j<DIMENSION_2;j++) {//6
                for (int i = 0; i < DIMENSION_1; i++){//1024*1024
                    sum+=longs[i][j];
                }
            }
        }
        System.out.println("spend time2:"+(System.currentTimeMillis()-start));
        System.out.println("sum2:"+sum);
    }
}

结果:
在这里插入图片描述

以上代码是创建了一个二维数组,第一种方式是按行循环相加,第二种是按列循环相加。安装CPU的空间局部性原则,第一种的循环方式远远要高于第二种,因为CPU在按行循环的时候就将相邻的数据加载到内存中,而按列则只能一个一个加载到CPU的内存中。

5)时间局部性原则:如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。CPU不会立即将其清除。

6)内核空间和用户空间
在这里插入图片描述
4 GB 的内存空间中,只有 3 GB 可以用于用户应用程序。
用户方式下用的是
一般的堆栈(用户空间的堆栈),而内核方式下用的是固定大小的堆栈(内核空间的对战,一
般为一个内存页的大小),即每个进程与线程其实有两个堆栈,分别运行与用户态与内核
态。
内核线程模型
在这里插入图片描述

用户线程模型
在这里插入图片描述

一般像JVM、第三方APP、360浏览器等软件都是运行在用户空间中。操作系统一般运行在内核空间。为什么要分用户空间和内核空间,主要是为了保护我们的操作系统。

JVM在创建线程的时候,实质上是调用操作系统中的库进行创建的,而JVM是位于在用户空间,操作系统是位于在内核空间中,原来所在的用户空间的堆栈就不在有了,而是转移到了内核空间里面。所有一个进程或一个线程其实不是只有一种堆栈,而是有两个堆栈,一个在用户空间,一个在内核空间。

内核线程模型和用户线程模型的本质区别
线程的创建、调度、销毁又程序本身管理的则是用户线程模型(ULT)
线程的创建、调度、销毁又操作系统管理的则是内核线程模型(KLT)
java用的是KLT(内核线程模型)

在这里插入图片描述

这是一篇让你了解系统底层工作原理的文章 深入计算机底层硬件,理解计算机的工作原理,为理解cpu、内存、cache等具有良好的指导性和准确性 阅读详情

相关推荐

操作系统-课堂笔记系列博客(南航)-考研or期末

操作系统课堂笔记 简介 写此系列博客的初衷 我们操作系统老师讲的真的非常好,所以将所获得知识记录保存起来。 既能起到分享的作用,又能帮助笔者复习。 知识来源NUAA-刘老师。 推荐参考资料 《操作系统精髓与设计原理(原书第6版)》PDF中文版.pdf 提取码:wi9h 《Linux内核完全注释-赵炯编著》 提取码:4teu 我的另外一系列博客:Linux内核完全注释-读书笔记 目录 - 持续...

鹏鹏的博客 7162

计组--操作系统底层原理

计算机的组成 pc(程序计数器):存储的是内存中程序下一条指令的地址 Registers(寄存器): 通过PC的值,找到对应的指令,通过总线把这条数据拿到CPU中来做计算,数据从内存中拿进来存储在CPU的Registers中 ...

qq_43204550的博客 1419

【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析

Elasticsearch的Master选举机制是其分布式架构的基石,确保集群高可用性和数据一致性。通过多数派协议,节点间交换信息并投票选举Master,以维护集群状态和处理请求。该机制自动处理故障转移,保障服务连续性。

weixin_40736233的博客 1773

电脑为什么需要操作系统?底层原理是什么?

因此,操作系统提供了一种管理和控制计算机硬件和软件资源的方式,使得应用程序可以运行在计算机上并与硬件设备进行交互。操作系统通过将计算机硬件和软件资源抽象成一组接口和服务,为应用程序提供了一致的编程模型,使得应用程序可以跨不同的硬件平台和操作系统环境进行开发和部署。电脑需要操作系统,因为它提供了一种管理和控制计算机硬件和软件资源的方式,使得应用程序可以运行在计算机上并与硬件设备进行交互。操作系统是一种软件程序,它运行在计算机硬件上,并管理和控制计算机的所有资源,包括处理器、内存、硬盘、网络等。

长风破浪会有时的博客 1454

别再折腾虚拟机了!手把手教你用WSL2在Windows 11上安装Kali Linux(含汉化与图形界面)

本文详细介绍了如何在Windows 11上通过WSL2安装和配置Kali Linux,包括汉化与图形界面设置。通过WSL2,用户可以享受接近原生性能的Linux体验,同时保持与Windows系统的无缝集成,特别适合网络安全爱好者和开发者。文章还提供了常见问题解决和性能优化建议,帮助用户高效使用Kali工具集。

weixin_42525369的博客 322

linux 4.19在龙芯平台上编译出错解决方法

OS: Loongnix server 1.7 工具链为:系统自带的gcc-4.8.5 和 gcc-7.3 平台:3A3000/3A4000 源码:kernel: 4.19 编译步骤 ··· make loongson3_defconfig make -j4 ··· 出错信息: HOSTCC arch/mips/boot/compressed/calc_vmlinuz_load_addr arch/mips/boot/compressed/head.S: Assembler messages: arch/m

sense的专栏 1124

操作系统底层工作原理简述

本文系统阐述了计算机底层工作原理,重点包括:1)基于冯诺依曼模型的五大核心组件(控制器、运算器、存储器、输入/输出系统)及其工作流程;2)CPU三级缓存架构(L1-L3)设计原理,缓存行概念及局部性原理(时间/空间)对性能的影响;3)CPU安全等级(ring0-ring3)与操作系统内存管理模式(用户/内核空间划分);4)进程与线程的本质区别及两种线程模型(KLT/ULT)特点;5)虚拟机栈指令集与寄存器指令集的架构差异。内容涵盖计算机体系结构、CPU优化技术及操作系统核心机制,为理解程序执行过程提供了基础

iamyaya365的专栏 1012

LPDDR4x 深度解析(3) - SDRAM核心操作机制

本文深入解析LPDDR4x SDRAM的核心操作机制,包括基础架构、刷新操作、读写流程及低功耗设计。详细介绍了存储阵列、地址解码器等关键模块,以及自刷新与自动刷新模式的区别。通过实测数据和技术细节,揭示LPDDR4x在性能优化和功耗控制方面的创新设计,为硬件工程师提供实用参考。

weixin_29278805的博客 307

[并发编程] - 操作系统底层工作原理

文章目录冯诺依曼计算机模型CPU内部结构控制单元控制单元存储单元CPU缓存结构CPU读取存储器数据过程CPU为何要有高速缓存带有高速缓存的CPU执行计算的流程CPU运行安全等级操作系统内存管理内核线程模型 (KLT)用户线程模型 冯诺依曼计算机模型 计算机五大核心组成部分 **控制器、运算器、存储器、输入、输出 ** 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 运算器(D

小工匠 2万+

PotPlayer 史诗级更新!实时字幕生成+实时翻译,看片真的无敌了!

potplayer已经更新实时字幕生成+实时字幕翻译功能

阿虚同学的博客 1万+

第十二段:基于env的重用

现代芯片的验证通常分为两个层次, 一是模块级别( block level, 也称为IP级别、 unit级别) 验证, 二是芯片级别( 也称为SOC级别) 验证。 一个大的芯片在开发时, 是分成多个小的模块来开发的。 每个模块开发一套独立的验证环境, 通常每个模块有 一个专门的验证人员负责。 当在模块级别验证完成后, 需要做整个系统的验证。 假设某个系统分成了三个模块,如下图: 这三个模块在模块级别验证时, 分别有自己的driver和s...

年糕的博客 421

并发编程系列【操作系统底层工作原理】(一)

冯诺依曼计算机模型 冯...

法号钦尘的博客 406

Ollama本地大模型-个性化AI:训练自己的风格模型和数据投喂打造专属智能体验

之前我们使用Ollama下载了deepseek模型,现在我想将其训练成自己风格的模型,应该怎么做?

瑶山的博客 1782

PHP底层工作原理

最近搭建服务器,突然感觉lamp之间到底是怎么工作的,或者是怎么联系起来?平时只是写程序,重来没有思考过他们之间的工作原理: PHP底层工作原理 图1 php结构 从图上可以看出,php从下到上是一个4层体系 ①Zend引擎 Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处

ToBeTheBestman的专栏 706

CenterPoint 工程复现

CenterPoint 工程复现,本文中使用版本:BEVerse工程下的mmdet3d (`MMDet3d v0.17.3`)版本,MMDetection3D中其他版本的使用`大同小异`。

Darchan的博客 5663

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

L12D1 计算机硬件基础

内存存储数据,指令不一定只占一个字节,任何运算都是在数字电路中,在运算器中完成。CPU是串行,寄存器存在于CPU内部。

m0_57508000的博客 116

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【操作系统】操作系统最全的总结,5万字干货

这不是一篇教你如何创建一个操作系统的文章,相反,这是一篇指导性文章,教你从几个方面来理解操作系统。

杰西笔记 3621

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

操作系统系统底层工作总体认识

操作系统系统底层工作总体认识1、计算机整体介绍1、现代计算机的大致运行过程2、计算机的五大核心组成部分3、CPU指令结构4、CPU缓存结构 1、计算机整体介绍 1、现代计算机的大致运行过程 计算机在运行时,先从内存中取到一条指令,通过控制器的译码,按照指令的要求进行逻辑处理及加工,然后在按地址将结果送到内存中,接着再取出第二条,再控制器的指挥下完成操作,依次往复,直到遇到停止指令。 按照程序的顺序逐步的取出指令去操作,自动完成指令中的具体逻辑处理,是计算机最基本的工作模型。这一原理最初是由美籍匈牙利数学家

qq_41931364的博客 1166

Linux 操作系统太难?先爬过这 6 个陡坡

如今的软件开发行业,服务器端市场基本被 Linux 系统占领了。移动端中的 Android 系统是基于 Linux 内核开发的,那些很火的虚拟化、消息队列、云计算、大数据等技术,都默认支持...

朱小厮的博客 1082

LAMP 系统性能调优(LAMP 系统的工作原理、性能度量方法及底层操作系统的调优方法)

文章来源:http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-1/index.html     简介: 如今,使用 LAMP(Linux®、Apache、MySQL 和 PHP/Perl)架构的应用程序不断被开发和部署。 但是,服务器管理员对应用程序本身几乎没有控制能力,因为应用程序是别人编写的。这份共三部分的系列文章将讨论许多服务器配置

xc_gxf的专栏 734

开篇

不知不觉,已当码狗7年。 项目经验越来越多,知识体系越来越复杂,可是近两年越发觉得进步缓慢,最近停下来理了理整个7年,蓦然回首,才发现根源在于对计算机的了解如此浅薄。计算机工作原理,操作系统,编译原理,高级语言的底层设计。 既然发现了,那就重新出发吧。    ...

djh624的博客 201

《操作系统基础》,知识体系一共包含哪些部分?底层原理是什么?

核心问题:操作系统是什么?为什么需要它?主题内容操作系统的定义管理硬件资源、为应用程序提供服务的系统软件操作系统的角色资源管理者(CPU、内存、I/O)用户与硬件之间的接口多任务、多用户的协调者 || 操作系统类型 |批处理系统分时系统(如 Linux)实时系统(如嵌入式)分布式系统个人操作系统(Windows、macOS、Linux) || 内核(Kernel) vs 用户态 |内核:运行在特权模式,管理硬件。

长风破浪会有时的博客 1194

美团架构师的底层知识总结(CPU、汇编语言、操作系统)太硬核了

想必能看到这篇文章的小朋友,大都是有一定编程能力的「程序媛、程序猿」。无论,你是从事切图的前端工作,还是对数据有一种爱而不得的后端开发。更甚者,是和底层打交道的嵌入式开发人员。无论你平时在工作环节中,对编程语言API做到如何的得心应手,但是在遇到一些比较「底层」的逻辑和知识时。或多或少,有点「捉襟见肘」。

m0_57042151的博客 249

java io底层机制_请问编程语言中阻塞机制在操作系统最底层是如何实现的?

首先大致问题如上,有以下两个疑问场景:高级编程语言中的阻塞,如 socket,sleep 等有一种说法是程序阻塞不占用 CPU 资源。根据我所查阅到的资料,JAVA 为例,阻塞机制最后都到了 native 方法,也就是 C 语言实现,调用到了操作系统的方法(这个说法有点不准确),然后是关于 Linux 阻塞队列的原理,有一个__wait_event 方法,具体如下:#define __wait_e...

weixin_39715652的博客 275
上一篇: Java开发中常见的坑
下一篇: MyBatis中的LambdaQueryWrapper构造器
程序员老石
博客等级 码龄8年 286粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值