计算机的基本工作

计算机的基本工作

了解计算机的核心工作机制,有利于理解我们平时编程的一些行为,打破大众对计算机的神秘感

CPU基本工作流程

缓存 Cache

缓存是一个小而快的临时存储数据,用来一部分将来会可能会再次使用到的数据,从而减少访问较慢的资源的次数(如内存,硬盘),对缓存分配的空间比内存要小,访问速度更快,一般有L1,L2,L3层级缓存。空间越大,速度越慢,故一般L1的访问速度是最快的在这里插入图片描述
在这里插入图片描述

寄存器

寄存器同样是cpu内部的存储数据的硬件设施,空间比缓存更小,速度比缓存更快速,进行临时的计算和保存

一般是几十个寄存器,每个寄存器8个字节左右(64位cpu),总的空间上百个字节(1kb不到)

CPU内部有很多寄存器,用于保存当前程序运行的状态

  • 除了保存数据的一些寄存器外,还有一些特殊的寄存器,能记录当前指令执行到哪一条、记录当前程序的函数调用关系…

指令

cpu工作的指令,一般八位的指令,前4位是操作码,后四是操作数

Q:那指令都存储在哪里?

A:指令最初会存储在内存中,但如果每次执行都从内存中访问,速度就很慢了,所以第一次执行时会被加载指令缓存中,避免每次执行都从内存访问,从而大幅提升效率

更深入的执行流程:在这里插入图片描述

例如有一组数据列出了地址与数据,演示一个指令执行的周期在这里插入图片描述

总结

  1. CPU中的寄存器是决定CPU执行哪条指令的关键
  2. 指令是由 动作+操作 组成
  3. CPU眼里只有指令,没有其他概念

操作系统

✨操作系统最主要的功能就是管理~~

  1. 管理好各种硬件设备
  2. 给软件提供稳定的运行环境

常见的操作系统有

  • Android——安卓本质上也是Linux,Android在Linux基础上做了许多改进,使它更适合移动端
  • Windows
  • Linux

API——Application Programming Interface

API是应用程序访问操作系统服务的接口,是软件与硬件协同运作的桥梁,程序通过它进行访问文件、内存、设备,而不是直接操控硬件,起到了“中介机制”

  • 软件如果想控制硬件设备,需要向操作系统申请调用API
  • 所以操作系统封装了一套统一的接口API,由它来控制硬件,软件只能请求服务,不能直接操作硬件

💥进程

计算机上运行起来的程序就叫做进程(process),也叫任务(task)在这里插入图片描述

进程的运行需要消耗一定的硬件资源,((20250721190527-d0ai27y “一个可执行文件中可能有多个进程”))——操作系统中,进程是资源分配的基本单位

  • 与执行文件的区别?在这里插入图片描述

    .exe这些就是执行文件,.dll这些是动态链接库,在.exe被执行的时候会使用到。可执行文件是编译生成的,在硬盘上的静态内容,当双击exe可执行文件的时候,操作系统就会把exe加载到内存RAM中,此时变成了动态内容

🧮管理进程

操作系统管理进程大致分为两部分

  1. 描述

    通过一个结构体变量,描述进程的各种属性,这个结构体变量称为PCB(进程控制块)Process Control Block

  2. 组织

    使用一定的数据结构,将N个PCB串在一起,一般使用链表的方式

PCB

它是进程管理的核心,记录和管理着进程的所有关键信息

PCB的核心属性

  1. PID

    相当于一个进程的身份证,独一无二,确保同一时刻,操作系统不会出现重复的PID。

    有的进程可能是一组,运行了一个exe,出现了一组进程——一个可执行文件中可能有多个进程

  2. 内存指针

    众所周知,进程的运行需要内存,而在一个进程的内存空间里,有的部分是”指令”,有的是“数据”。

    内存指针则是告诉操作系统,哪部分是指令,哪部分是数据

  3. 文件描述符 File Description

    文件描述符是操作系统用来标识打开的文件的一个编号,确定文件内容在硬盘的哪个位置

    1)文件描述符FD vs 文件

    1. 文件是在硬盘中存储的,让各种进程来读写操作、打开或关闭
    2. FD是存储在内存的内核表,是操作系统创建的,相当于打开文件的一个钥匙🔑,提供了一个访问通道
    3. 所有的文件操作(读/写/打开/关闭)实际上都是通过这个🔑完成的

    一个进程想要读写文件,需要先打开需要先打开,打开的时候就会在PCB中构建一个文件相关的结构体,放到PCB的文件描述符中

    文件描述符表,可以当成一个数组,里面包含了许多结构体,每个结构体都包含了每个文件的具体信息

  4. 进程状态

    一般可以分为两大状态

    • 就绪状态——随叫随到

    • 堵塞状态——该进程无法参与CPU的调度上

      以前也遇到过堵塞状态:Scanner 不输入则无法进行下一步 一直等待在这里插入图片描述

  5. 进程的优先级

    进程(程序)的优先级,决定哪个进程要优先安排cpu的资源

  6. 进程的上下文

    对于计算机来说,“上下文”具体指的是寄存器的值

    一个进程调度到cpu上执行,他可能会离开,过一段时间又回到cpu上,继续之前的位置往下执行。类似于存档

    • 进程在cpu执行的时候,寄存器的值不断的在改变,当进程离开cpu的时候,会把这一时刻寄存器的值记录拷贝出来保存到内存PCB结构体(存档)
    • 进程后序回到cpu,也是把之前PCB保存的这些寄存器的值,重新写入cpu寄存器内,恢复上下文(读档)
  7. 进程的记账信息

    统计机制,统计每个进程都运行了多长时间

    • 优先级机制下,就可能使某个进程吃到的cpu资源非常少
    • 通过统计机制可以更加合理灵活的分配cpu的资源

操作系统对PCB的各种信息进行评估,对进程进行各种调度,面对多任务的场景,CPU执行的方式有并行与并发两种方式

并行:两个CPU核心运行不同进程的指令

并发:一个CPU核心,通过”分时复用“的方式实现”同时执行“

每个进程有自己独立的空间(进程的隔离性),多个进程同时执行互不影响

🧭线程

也叫轻量级进程,创建销毁线程的开销远比进程的开销要小许多。进程包含了线程,一个进程可能包含一个/多个线程,更准确的说,进程的调度=>线程调度

随着计算机发展,业务规模扩大,服务器在同一时间需要给更多的客户提供服务,此时服务器运行很多的进程

服务器也需要频繁创建/销毁——这是消耗资源的,故在处理并发的处理许多客户端的请求,此时可以用”多线程“的解决方案,在Java中,鼓励多线程而不鼓励多进程的方案

  • 多线程是并发编程的核心解决方案

  • 线程是操作系统调度执行的基本单位——每一个线程都是一个”执行流“,都能被放到CPU上执行

  • 线程是共用进程里的资源的

    进一步的,同一个进程内的多个线程会共用PCB的内存指针、文件描述符,但是各自有各自的状态,上下文,记账信息,优先级

但是多线程也会出现问题,我们可以画图来更进一步理解多线程在这里插入图片描述

线程的相关操作,操作系统提供了对应的API,但这有些问题

  • 原生的API是C语言写的
  • 不同的操作系统的API不一样

Java作为跨平台的语言,Java标准库对操作系统的API进行了封装,实现了自己的类/方法——Thread

💯进程与线程的关系

  • 进程包含线程,一个进程可能包含多个线程
  • 他们的隔离性不同,多进程执行互不影响,一个进程异常不影响其他的进程;同一个进程的线程挂了,可能会把着其他的线程一起带走
  • 进程之间通常不会有资源冲突的情况,而同一个进程之间的线程很容易出现资源冲突,因为多个线程共享一个进程的资源
  • 进程是操作系统调度分配的基本单位,线程是操作系统调度执行的基本单位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值