重温基础:操作系统
感谢图灵和冯诺依曼两位大佬赏饭吃
本文只记录我个人知道且感觉需要知道的知识点,系统学习请网上查找资料
计算机基本结构(也叫冯诺依曼模型)
运算器、控制器、存储器、输入设备、输出设备
存储器:我们常说的内存
运算器、控制器:我们常说的CPU(中央处理器),有寄存器、控制单元和逻辑运算单元等组件
输入设备、输出设备:鼠标、键盘、显示器…
32位和64位的区别
32 和 64 指的是CPU 的位宽,代表的是 CPU 一次可以计算(运算)的数据量,所以64位(0~2^64-1)的电脑可以兼容32(0~2^32-1)的软件,反之不行
寄存器
是一种内存,存在于cpu里面的内存
常见的有通用寄存器(存放需要进行运算的数据),程序计数器(存放下一个指令的内存地址),指令寄存器(存放当前正在执行的指令)。
GHz(CPU的参数),千兆赫兹的简写
1GHz=1000000000Hz
1GHz,代表着 1 秒会产生 1G 次数的脉冲信号,每一次脉冲信号高低电平的转换就是一个周期,称为时钟周期
程序执行时间=指令数量每个指令需要的是时钟周期时钟周期
结论:买电脑和服务器选那种赫兹数大的选,还有架构不同也会影响速度,涉及知识盲区了
存储器
看另一篇文章
http://laiyong.wang/2024/05/08/storage
虚拟内存、物理内存
1、为了解决多进程之间地址冲突的问题,每个进程都有自己的页表,所以每个进程的虚拟内存空间就是相互独立的。进程也没有办法访问其他进程的页表,所以这些页表是私有的
2、虚拟内存可以使得进程对运行内存超过物理内存大小,因为程序运行符合局部性原理,CPU 访问内存会有很明显的重复访问的倾向性,对于那些没有被经常使用到的内存,我们可以把它换出到物理内存之外,比如硬盘上的 swap 区域
3、还涉及到内存分段和分页,自己去看,我也只懂皮毛
内存满了会发生什么
这个内存指的是物理内存,如果没有空闲的物理内存,且又被申请,则会触发内存回收:
1、后台内存回收(kswapd):在物理内存紧张的时候,会唤醒 kswapd 内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的执行。
2、直接内存回收(direct reclaim):如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,这个回收内存的过程是同步的,会阻塞进程的执行。
用户在小内存的电脑上申请大内存时会咋样
假设有 4GB 物理内存,用户申请 6GB
32 位系统的内核空间占用 1G,位于最高处,剩下的 3G 是用户空间;64 位系统的内核空间和用户空间都是 128T,因为用户申请的都是虚拟内存,若还未使用,不会申请物理内存所以 32 系统会失败,64 位的会成功
Swap 分区机制(当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,与磁盘进行换入换出)
如果没有 Swap 分区,因为物理空间不够,进程会被操作系统杀掉,原因是 OOM(内存溢出),被 killed
如果有 Swap 分区,即使物理内存只有 4GB,程序也能正常使用 8GB 的内存,进程可以正常运行,但也不是无限大
$li-margin-bottom = 0.8rem
$post-tool-button-width = 2.5rem
.post-tools-container {
padding-top var(--component-gap)
.post-tools-list {
li {
margin-bottom $li-margin-bottom
&:last-child {
margin-bottom 0
}
}
li.tools-item {
position relative
box-sizing border-box
width $post-tool-button-width
height $post-tool-button-width
color var(--text-color-3)
font-size 1.2rem
background var(--background-color-1)
border-radius 50%
box-shadow 2px 2px 5px var(--shadow-color)
cursor pointer
&:hover {
box-shadow 2px 2px 8px var(--shadow-hover-color)
}
i {
color var(--text-color-3)
}
&:hover {
color var(--background-color-1)
background var(--primary-color)
i {
color var(--background-color-1) !important
}
}
&.toggle-show-toc {
display none
}
&.go-to-comments {
.post-comments-count {
position absolute
top 0
right -1rem
display none
align-items center
justify-content center
box-sizing border-box
min-width 1.1rem
height 1.1rem
padding 0 0.2rem
color var(--badge-color)
font-size 12px
background var(--badge-background-color)
border-radius 0.4rem
+keep-tablet() {
display none !important
}
}
}
}
li.status-item {
width $post-tool-button-width
height $post-tool-button-width
color var(--text-color-3)
font-size 1.6rem
cursor pointer
&.post-lock {
cursor default
.fa-lock-open {
display none
color var(--keep-success-color)
}
&.decrypt {
cursor pointer
.fa-lock-open {
display block
}
.fa-lock {
display none
}
}
}
}
}
}