写在前面

这篇文章打算来复习总结下,操作系统相关知识,从计算机模型,冯诺依曼模型开始,到操作系统的内存管理,以及运行程序的进程和线程。

冯诺依曼计算机模型

操作系统底层工作原理
如图所示冯诺依曼计算机缓存英文模型包含有以下五大核心部分组变量成:

  • 控制器(Co缓存视频在手机哪里找ntrol)是整个计算机的中枢神经,其功能是对程变量类型有哪些序规定的控制信号进行解释,根据要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
  • 运算器(Datapath):运算器缓存的视频在哪的功能是对数据进行各种算术运算和逻辑运算,即对数据进行电脑锁屏快捷键加工处理。
  • 存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。
  • 输入(Input system):输入设备是计算机的重要组成部分,数组排序输入设备与输出设备合你为外部设备,简称外设,输入设备的作用是将程序、原始缓存视频合并app数据、文字、字符、控制命令或现场采集的数据等信息缓存视频变成本地视频输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。
  • 输出(Output syste缓存视频怎样转入相册m):输出设备与输入设备同变量是什么意思样是计算机的重要组成部分,它把外算机的中间结果或最后结果、机内的各种变量名的命名规则数据符号及文字或各种控制信号等信息输出出来。微机常用的输出变量设备有显示终端CRT、打印机、激光印字机、绘图仪及磁电脑截图快捷键带、光盘机等。

冯诺依曼模型只是多线程下载一个抽象简化模型,具体应用提现在现代计算机的应用中,如下图:

操作系统底层工作原理
上图中最核心的两部分是CPU和内存。先来了解变量名CPU。

CPU内部结构

操作系统底层工作原理

如图所示CPU内部结构分为

  • 控制单元:控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和 操作控制器OC(Operation Controller) 等组成,对协调整个电脑有序工作极为重要。它根据用户预电脑截图快捷键先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确电脑定应该进行什么操作,电脑截图快捷键然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC数组初始化中主要包括:节拍变量与函数脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。
  • 运算单元:运算单元是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及数组排序其附加运算)和逻辑运算(包括移位、逻辑测试或多线程下载两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件。
  • 存储单元:存储单元包括 CPU 片内缓存Cache和寄存器组,是 CPU 中暂变量的定义时存放数据的地方,里面保存着那些多线程并发中线程的状态等待处理的数据,或缓存清理已经处理过的数据,CPU 访问寄存器所用的变量值时间要比访问内存的时间短。寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非数组公式常快。采多线程并发用寄存器,可以减少 CPU 访问内电脑存的次数,从而电脑提高了 CPU 的工作速度。寄存器组可分为专用变量泵寄存器和通缓存英文用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据;而通用寄存器用途广泛并可由程序员规定其用途。电脑怎么重装系统

CPU缓存结构

操作系统底层工作原理
如图所示,现代CPU为了提高执行效率,减少CPU与内存的交互,一般在CPU上集成了多级缓存,常见的为三级缓存架构

  • L1 Cache,分为数据缓存和指令缓存,逻辑核独占
  • L2 Cache,物理核独占,逻缓存视频在手机哪里找辑核共享
  • L3 Cache,所有物理核共享

存储器存储空间大小:内存>L3>L2>L1>寄存器;
存储器速度快慢排序:寄存器>L1>L2>L3>内存;
缓存是由最小的存储区块-缓存行(cacheline)组成缓存的视频在哪,缓存行大小通常为64byte。
比如你的L1缓存大小是512kb,而cacheline =变量是什么意思 64byte,那么就是L1里有512 * 1024/64个cacheline

CPU读取存储器数据过程

1、CPU要取寄存器X的值,只需要一步:直接读取。
2电脑蓝屏、CPU要取L1 cache的某个值,需要1-3步(或者更多):把cache行锁住,把某个数据拿来,解锁,如果没锁住就慢了变量值
3、CPU要取L2 cache的某个值,先要到L1 cache里取,L1当中不存在,在L2里,L2开始加锁,加锁以后,缓存视频变成本地视频把L2里的数据复制到L1,再执行读L1的过程,上面的3步,再解锁。
4、CPU取L3 cache的也是一样,只不过先由L3复制到L2,从L2复制数组c语言到L1,从L1到CPU。
5、CPU取内存则最复缓存英文杂:通知内存控制器占用总线带宽,通知内存加锁,发起内存读请求,等待回应,回应数据保存到L3(如果没有就到L2),再从L3/2到L1,再从L1到CPU,之多线程后解除总线锁定。

数组去重方法间局部性(Temporal Locality)

如果一个多线程是什么信息项正在被访问,那么在近期它很数组排序可能还会被再次访问。 比如循环、递归、方法的反复调用等。

空间局变量是什么意思部性(Spatial Locality)

如果一个存储器的位置被引用,那么将来他多线程编程附近的位置也会被引用。 比如顺序执行的代码、连续创建的两个对象、数组等。
代码示例:

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执行计算的流程

  1. 程序以及数据被加载到主内存
  2. 指令和数据被加载到CPU的高速缓存
  3. CPU执行指令,把结果写缓存视频怎样转入相册到高速缓存
  4. 高速缓存中的数据写回主内存

CPU运行安全等多线程是什么

CPU有4个运行级别,分别为:

  • ring0
  • ring1
  • ring2
  • ring3

Linux与Windows只用到了2个级别:ring0、缓存清理ring3,操作系统内部内部程序指令通常多线程并发运行在ring0级别,操作系统以外的第三方程序运行在ring3级别,第三变量泵方程序如果要调用操作系统内部函数功能,由于运行安全级别不够,必须切换CPU运行状态,从ring3切换到ring0,然后执行系统函数,说到这里相信同学们明白为什么JVM创建线程,线程阻塞唤醒是重型操作了,因为CPU要切换变量是什么意思运行状态。
JVM创建线程CPU的工作过程:
1.CPU从ring3切换ring0创建线程
2.创建完毕,CPU从ring0切换回ring3
3.线程执行JVM程序
4.线程执行完毕,销毁还得切会ring0

内存管理

多线程下载行空间保护

操作系统有变量的定义用户空间和内核空间两个变量值概念,目的是为了变量的定义做到程序运行安全隔离与稳定,以32位操作系统4G大小的内存空间为例。

操作系统底层工作原理

Linux为内核代码和数电脑锁屏快捷键据结构预留了几个页框,这些页永远不会被转出到磁盘上。从 0x00000000 到 0xC0000000(PAGE_OFFSET电脑开不了机) 的线性地址可由多线程面试题用户代码 和 内核代码进行引用(即用户空间)。从0xC0000000(PAGE_OFFS多线程并发中线程的状态ET)到 0xFFFFFFFFF的线性地址只能由内核代码进行访问(即内核空间)。内核代码及其数据结构都必须位于这 1 GB的地址空间中,但是对于此地址空间而言,更大的消费者是物理地址的虚拟映射。
这意味着在 4 GB 的内存空间中,只有 3 GB 可以用于用户应用程序。进程与线程只能运行在用户方式(usermod数组排序e)或内核方式(kernelmode)下。用户程序运行在用户方式下,而系统调用运行在内核方式下。在这两种方式下所用的堆栈不一样:用户方式下用的是一般的堆栈(用户空间的堆栈),而内核方式下用的是固定大小的堆栈(内核空间的对战,一般为一个内存页的大小),即每个进程与线程其实有两个堆栈,分别运行与用户态与内核态。
由空间划分,也分为:
1、内核线程模型(KLT)
2、用户线程模型(ULT)

内核线程模型

操作系统底层工作原理
内核线程(KLT):系统内核管理线程(KLT),内核保存线程的状态和上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理数组和链表的区别器上并行运行。线程的创建、调度和管理由内核完成,效率比U缓存视频变成本地视频LT要慢,比进程操作快。

用户线程模型

操作系统底层工作原理
用户线程(ULT):用户程序实现,不依赖操作系统核心数组去重,应用提供创建、同步、调度和变量的定义管理线程的函数来控制用户线程。不需要用户态/内核态切换,速度快。内核对ULT数组和链表的区别无感知,线程阻塞则进程(包括它的所有线程)阻塞。

线程与进程

线程:现代操作系统在运行一个程序时,会为其创建一个进程;例如,启动一个Java程序,操作系统就会创建一个Java进程。进程是OS(操作系统)资源分配的最小单位。
进程:线程是OS(操作系统)调度CPU的最小单元,也叫轻量级进程(Light Weight Process),在一个进数组公式程里可以创建多个线电脑程,这些线程都拥有各自的计数器、堆栈数组和链表的区别和局部变量等属性,并且能够访问共变量的定义享的内存变量。CPU在这些线程上高速切换,让使用者感觉到这些线程在同时执行,即并发的概念,相似的概念还有并行!
线程上下文切换过程:

操作系统底层工作原理