惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
D
DataBreaches.Net
G
Google Developers Blog
博客园 - Franky
V
V2EX
博客园 - 叶小钗
D
Docker
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog RSS Feed
月光博客
月光博客
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
IT之家
IT之家
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research
V
Visual Studio Blog
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
J
Java Code Geeks
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
T
Tailwind CSS Blog
T
The Blog of Author Tim Ferriss
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Blog — PlanetScale
Blog — PlanetScale
Jina AI
Jina AI
C
Check Point Blog
Y
Y Combinator Blog
MyScale Blog
MyScale Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
B
Blog
小众软件
小众软件
云风的 BLOG
云风的 BLOG
I
InfoQ
Recorded Future
Recorded Future
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队

博客 on 打工人日志

k8s RKE2 cilium L2 + envoy gateway 安装配置 k8s RKE2 vSphere 存储配置 OpenClaw 全能指南:从安装到进阶自动化实战 (2026 最终版) Kubernetes — skywalking + banyanDB APM监控部署 Kubernetes — promtail + loki + grafana 日志系统部署 k8s master 节点 Unauthorized Kubernetes — metalLB + Traefik 部署 Kubernetes — SSL 证书自动更新 Kubernetes — RKE2 + kube-vip + cilium 部署 使用TLSv1.3 升级nginx和openssl Proxmox VE(PVE) 更新到最新版本 kindle 邮件发送失败,错误代码E999 metallb + ingress-nginx + argocd 本地部署 iStoreOS(旁路由)使用openclash实现dns劫持 异常流量分析:图片库服务黑客入侵 openwrt 硬盘扩容 搭建ip地址检索服务 Kubernetes — k8s 手动安装 1.17.9 SELinux 问题:导致端口无法创建,无法访问 【福利】免费!本地部署!去除视频中移动的物体 通知:《打工人日报》迁移到独立板块 KyBook 3 | calibre-web - IOS系统最佳图书伴侣 Tmux 安装和使用教程 DockerHub 加速镜像部署 - 使用cloudflare 代理 docker的零停机部署 SD-webui 批量处理图片 ubuntu 安装 ComfyUI ubuntu 安装 stable-diffusion-webui 测试策略:微服务架构 单元测试:测试单元质量提升 端到端测试:模拟用户体验 Kubernetes — containerd 安装和部署 CI/CD 可观察性-基于grafana Argo cd 安装和部署 linux服务器进程打开文件过多导致服务异常 使用 ElasticSearch Curator 7天定期删除日志 sonarqube docker安装和配置 SSH 通过 443 端口连接 GitHub iOS 17 「待机显示」适配普通 iPhone(非 Pro/Max),屏幕在充电时常亮 GNU/Linux 一键更换系统软件源脚本 解决Elasticsearch索引只读(read-only) 【福利】埃隆·马斯克传 [沃尔特·艾萨克森] 在线下载 【破解】小鹏P5和小鹏G9开启adb和网络adb Kubernetes — kubecost 分析 Kubernetes 成本 3D Gaussian Splatting:3D模型渲染 Linux 系统收包流程以及内核参数优化 2023亚运会电竞门票民购买指南(报名+抽签) Vue3 + vite + nginx项目部署后404问题 大麦抢票辅助软件(福利 TFBOYS十年之约演唱会 2023 全机位 视频) 黑群晖最新安装教程 Ansible部署ceph集群 最好的微信朋友圈集赞神器-福利推荐 推荐一下 容器云资源 2010年的天涯神贴聊房价 如何礼貌回绝不合理的需求 nginx 配置和编译 github 国内代理访问下载 使用scrapy-redis实现增量爬取 逆境和成长-2022年终总结 优雅的使用Conda管理python环境 Jenkins 编译Android apk 流水线 Kubernetes — 更新证书 shell功能脚本集合 Nexus3 使用和部署 githubAction set-output弃用错误 Kubernetes — Rook云存储介绍和部署 Kubernetes — 基于K8S搭建Ceph分布式存储 Kubernetes — 探针和生命周期 Kubernetes — 开放标准(OCI、CRI、CNI、CSI、SMI、CPI)概述 kubernetes 部署插件 (Flannel、Web UI、CoreDNS、Ingress Controller) Cloudflare Zero Trust 内网穿透 k8s CNI 问题 连接认证失效 k8s.gcr.io国内无法连接解决方法 headscale 部署使用 羊了个羊小程序 破解通关 K8S 问题排查:cgroup 内存泄露问题 RocketMQ k8s部署 4主4从集群 docker 问题处理 kubernetes 存储 linux服务器 删除空间却未释放 kubernetes 从1.23.x 升级到 1.24.x 编写 kubernetes 资源描述文件 nginx ssh-key connection exception kubernetes manual expansion VSCode插件推荐=> Code Runner ant build.xml 编写 kubernetes 调度过程 记录一次上门打散工 k8s本地联调神器kt-connect Ant中如何添加第三方jar包依赖 OpenELB:让k8s私有环境对外暴露端口 linux 网络测速 安装 docker 出现 ERROR: Unsupported distribution 'ol' 问题 logrotate 日志滚动的使用 nginx 编译参数详解 nginx 重写规则 rewrite模块 nginx.conf 配置文件详解 rsync 文件同步 163企业邮箱设置教程 2021年第50周记
基础知识-计算机系统
2023-01-01 · via 博客 on 打工人日志

计算机硬件

计算机的基本硬件系统由运算器控制器存储器输入设备输出设备五大部件组成

  • 运算器控制器等部件被集成在一起统称为中央处理单元(Central Processing Unit,CPU)。
  • 存储器是计算机系统中的记忆设备,分为内部存储器外部存储器
    • 内部存储器:速度高、容量小,一般用于临时存放程序、数据及中间结果
    • 外部存储器:者容量大、速度慢,可长期保存程序和数据。
  • 输入设备输出设备合称为外部设备(简称外设),输入设备用于输入原始数据及各种命令,而输出设备则用于输出处理结果

CPU

cpu
CPU 主要由运算器控制器寄存器组和内部总线等部件组成

功能

  • 程序控制:通过执行指令来控制程序的执行顺序
  • 操作控制:一条指令功能的实现需要若干操作信号配合完成,CPU产生每条指令的操作信号并将操作信号送往不同的部件,控制相应的部件按指令的功能要求进行操作
  • 时间控制:CPU对各种操作进行时间上的控制,即在指令执行过程中操作信号的出现时间、持续时间及出现的时间顺序都需要严格的控制
  • 数据处理:CPU通过对数据进行算术运算及逻辑运算等方式进行加工处理,数据加工处理的结果被人们所利用。所以,对数据的加工处理也是CPU最根本的任务。

运算器

运算器由算术逻辑单元累加寄存器数据缓存寄存器状态条件寄存器组成。功能:1.执行所有算术运算2.执行所有的逻辑运算并进行逻辑测试。如与、或、非、零值测试或两个值的比较等

  • 算术逻辑单元(ALU):负责处理数据,实现对数据的算术运算和逻辑运算
  • 累加寄存器(AC):也称为累加器,是一个通用寄存器,功能是当运算器的算术逻辑单元执行算术运算或逻辑运算时,为ALU提供一个工作区
  • 数据缓存寄存器(DR):在对内存储器进行读/写操作时,用DR暂时存放由内存存储器读/写的一条指令或一个数据字,将不同时间段内的读/写数据隔离。主要作用是作为CPU和内存、外部设备之间数据传送中转站;作为CPU和内存、外围设备之间在操作速度上的缓冲;在单累加器结构的运算器中,数据缓冲寄存器还可兼作为操作数据寄存器。
  • 状态条件寄存器(PSW):由算数指令和逻辑指令运行或测试的结果建立的各种条件码内容,主要分为状态标志和控制标志

控制器

运算器只能完成运算,而控制器用于控制整个 CPU 的工作,它决定了计算机运行过程的自动化。它不仅要保证程序的正确执行,而且要能够处理异常事件。一般包括指令控制逻辑时序控制逻辑总线控制逻辑中断控制逻辑等几个部分。

指令控制逻辑

  • 指令寄存器(IR): 当 CPU 执行一条指令时,先把它从内存储器取到缓冲寄存器中,再送入 IR 暂存,指令译码器根据 IR 的内容产生各种微操作指令,控制其他的组成部件工作,完成所需的功能。
  • 程序计数器(PC): 具有寄存信息和计数两种功能,又称为指令计数器。程序的执行分为两种情况,一是顺序执行,二是转移执行
  • 地址寄存器(AR): 保存当前 CPU 所访问的内存单元的地址
  • 指令译码器(ID): 指令分为操作码地址码两个部分,为了执行任何给定的命令,必须对操作码进行分析,以便识别所有完成的操作。

时序控制逻辑

为每条指令按时间顺序提供应有的控制信号

总线逻辑

是为多个功能部件服务的信息通路的控制电路。

中断控制

逻辑用于控制各种中断请求,并根据优先级的高低对中断请求进行排队,逐个交给 CPU 处理。

寄存器组

寄存器组分为专用寄存器通用寄存器。运算器和控制器中的寄存器是专用寄存器,其作用是固定的。通用寄存器的用途广泛,并且由程序员规定其用途,其数目因处理器的不同有所差异。

机器数

各种数值在计算机中表示的形式称为机器数,特点是采用二进制计数制,数的符号用 0 和 1 表示,小数点则隐含,表示不占位置。机器数对应的实际数值称为数的真值。

  • 原码: 一个数的正常二进制表示,最高位表示符号。+0(00000000),-0(10000000)
  • 反码:正数的反码即原码,负数的反码是在原码的基础上,除符号位外,其他各位按位取反。+0(00000000),-0(11111111)
  • 补码:正数的补码即原码,负数的补码是在原码的基础上,除符号位外,其他各位按位取反,而后末位+1,若有进位则产生进位。+0 = -0 = 0 0000000
  • 移码:用作浮点运算的阶码,无论正数负数,都是将该原码的补码的首位(符号位)取反得到移码

原码最高位表示正负号,且不参与计数,而其他编码最高位虽然也是代表正负号,但是参与计数

设机器字长为 n,各种码制下带符号数的范围

码制定点整数定点小数
原码\(-(2^{n-1}-1)\) ~ \(+(2^{n-1}-1)\)\(-(1-2^{-(n-1)})\) ~ \(+(1-2^{-(n-1)})\)
反码\(-(2^{n-1}-1)\) ~ \(+(2^{n-1}-1)\)\(-(1-2^{-(n-1)})\) ~ \(+(1-2^{-(n-1)})\)
补码\(-2^{n-1}\) ~ \(+(2^{n-1}-1)\)\(-1\) ~ \(+(1-2^{-(n-1)})\)
移码\(-2^{n-1}\) ~ \(+(2^{n-1}-1)\)\(-1\) ~ \(+(1-2^{-(n-1)})\)

浮点数的计算

浮点数:表示方法为 \(N=F*2^E\) ,其中 E称为阶码,F称为尾数:类似十进制的科学计数法,如 \(85.125=0.85125*10^2\) ,二进制如: \(101.011=0.101011*2^3\)
在浮点数的表示中,阶码为带符号的纯整数,尾数为带符号的纯小数,要注意符号占最高位(正数0负数1)其表示格式如下所示:

很明显,与科学计数法类似,一个浮点数的表示方法不是唯一的,浮点数所能表示的数值范围由阶码决定,所表示的数值精度由尾数确定。
尾数的表示采用规格化方法,也即带符号尾数的补码必须为1.0xxxx(负数)或者0.1xxxxx(正数),其中x可为0或1
浮点数的运算:对阶(使两个数的阶码相投,小阶向大阶看齐,较小阶码增加几位,尾数就右移动几位)————尾数计算(相加,若是减运算,则加负数)————结果规格化(即尾数表示规格化,带符号尾数转换为1.0xxxx或0.1xxxx)。

算术逻辑和逻辑运算

  • 逻辑与&&:0和1相与,只要有一个0结果为0,两个都为1才为1
  • 逻辑或||:0和1相或,只要有一个为1结果就为1,两个都为0才为0
  • 异或:同0非1,即参加运算的二进制同为0或者同为1结果为0,一个为0另一个为1结果为1
  • 逻辑非!:0的非是1,1的非是0
  • 逻辑左移:二进制整体左移n位,高位若溢出则舍去,低位补0
  • 逻辑右移:二进制整体右移n位,低位若溢出则舍去,高位补0
  • 算术左移算术右移:乘以2或者除以2的算术运算,涉及加减乘除都是算术运算,与逻辑运算区分
    短路计算方式: 指通过逻辑运算符(&&、||) 左边表达式就能推算出整个表达式的值,不再继续执行逻辑运算右边的表达式
    若计算机存储数据采用的是双符号位(00表示正号、11表示负号),两个符号相同的数相加时,如果运算结果的两个符号位经异或运算得1,则可断定这两个数相加的结果产生了溢出。
    从计算的角度理解,正数和负数相加其结果肯定不会溢出,如果有溢出,必然同为正数或者同为负数,结果才会更大,有可能溢出,因此,正常两个同符号数相加时,不考虑溢出,其符号位必然还是00或者11,如果有溢出,那么数据位必然最高位进位1,符号位就需要加1,符号位就变为01或者10,因此当符号位为01或者10时数据溢出,观察这两种溢出情况的两个符号位都是一个为0,一个为1,其异或运算运算必然为1,没有其他可能,而逻辑或运算有可能两个都位也能得出1

校验码

在计算机系统运行时,各部位之间要进行数据交换,为了确保数据在传送过程中正确无误,一、是提高硬件电路的可靠性,二是提高代码的校验能力,包括查错纠错
码距:就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。一般来说,码距越大,越利于纠错和检错。

奇偶校验码

  • 奇偶校验码:奇偶校验码(Parity Code)是一种简单有效的校验方法。这种方法通过在编码中增加一位校验位,使编码中 1 的个数为奇数(奇校验)或偶数(偶校验),从而使码距变为 2。常用的有水平奇偶校验码、垂直奇偶校验码、水平垂直校验码
    奇校验可以可以检测编码中奇数个数位出错,即当合法编码中的奇数位发生了错误时,即编码中的1变成0,或者0变成了1,则该编码中的1的个数的奇偶性就发生了变化,从而检查出错误。但无法纠错。

循环冗余校验码 CRC

  • 循环冗余校验码:循环冗余校验码(Cyclic Redundancy Check,CRC)由两部分组成,左边为信息码(数据),右边为校验码。广泛用于数据通信领域和磁介质存储系统中
    循环冗余校验码(CRC 的代码格式)
    CRC只能检错,不能纠错,其原理是找出一个能整除多项式的编码,因此首先要将原始报文除以多项式,将所得的余数作为检验位加在原始报文之后,作为发送数据发给接收方。
    使用CRC编码,需要先约定一个生成多项式 \(G(x)\) 生成多项式的最高位和最低位必须是1。假设原始信息有m位,则对应多项式 \(M(x)\) .生成检验码思想就是在原始信息位后追加若干检验位,使得追加的信息能被 \(G(x)\) 整除。接收方接收到带检验位的信息,然后用 \(G(x)\) 整除余数为0则没有错误,反之则发生错误。

例子:假设原始信息串为10110,CRC的生成多项式为 \(G(x)=x^4+x+1\) ,求CRC检验码。

(1)在原始信息位后面添0,假设生成多项式的阶为r,则在原始信息位后添加r个0,本题中 \(G(x)\) 阶为4,则在原始信息串后加4个0,得到新串101100000,作为被除数。
(2)由多项式得到除数,多项中x的幂指数存在的位置1,不存在的位置0,本题中,x的幂指数为0,1,4的变量都存在,而幂指数为2,3的不存在因此得到串10011
(3)生成CRC校验码,将前两步得出的被除数和除数进行模2除法运算(即不进位也不错位的除法运算。过程如下:
模2除法
得到余数1111
注意: 余数不足r,则余数左边用若干个0补齐,如求得余数为11,r=4,则补两个0得到0011
(4)生成最终发送信息串,将余数添加到原始信息后。上例中,原始信息为10110,添加余数1111后,结果为101101111。发送方将此数据发送给接收方
(5)接收方进行校验。接收方的CRC检验过程与生成过程类似,接收方接收带检验和的帧后,用多项式 \(G(x)\) 来除。余数为0则表示信息无措;否则要求发送方重传。
收发信息双发需使用相同的生成多项式

海明校验码

  • 海明码:海明码(Hamming Code)是利用奇偶性来查错和纠错的校验方法。
    设数据位是n位,检验位是k位,则n和k必须满足以下关系

    $$ 2^{k}-1 \geq {n+k} $$


    海明码的编码规则如下
    设k个检验位为 \(P_k,P_{k-1}\) ,……, \(P_1\) ,n个数据位为 \(D_{n-1},D_{n-2}\) ,……, \(D_1,D_0\) ,对应的海明码为 \(H_{n+k},H_{n+k-1}\) ,……, \(H_1\) ,那么: