Contents
随笔-计算机原理
按自己的理解串了一下以前学过的知识。如有错误,还请指正。
模电
交流升压降压: 线圈绕组。
交流转直流: 整流桥+电容。
二极管: VA特性曲线。 导通电压, 用作开关,高低电平在数电里作为0/1。反向击穿电压,保护电路。
三极管/MOS管: 其中一极可以控制另外一极的电流/电压。
无源/有源晶振电路: 晶体的压电效应+共振, 起振后可以输出稳定的波形, 然后可以转为方波。
数电
时钟信号: 通过有源/无源晶振电路实现。
0/1逻辑:与高低电平对应 。
与或非 及其他门电路:基于三极管/MOS管实现。
锁存器(寄存器): 基于三极管/MOS管实现。
补码: 统一加减法,方便乘除法计算。
加法器: 基于门电路实现的补码计算。
乘法,除法: 类似加法器实现。
CPU: 包含 ALU+寄存器+控制器。 ALU是数逻运算器(数字运算器+逻辑运算器)。数字运算器包含加法器等。逻辑运算器主要是门电路。 控制器控制取指令,执行指令,转移数据等。
内存:SRAM基于锁存器,大规模实现偏贵。DRAM基于电容+时钟刷新,大规模便宜,但要注意频率适配。
IO电路:输入输出电路。 接收外部信号(数据,中断信号等)。向外输出信号(控制信号,数据等)。
非易失性存储器件: FLASH, 磁盘,光盘等。(存储BIOS引导, 操作系统代码, 数据等)。
操作系统
机器指令: 输入CPU的指令。
汇编指令: 对应机器指令的伪代码。
高级语言(C/C++, Java等): 经过编译,汇编,链接,可以变成机器指令, 加载到裸机或者操作系统欧冠中。
脚本语言(sh脚本, bash脚本, powershell脚本等): 将一些命令和参数,组合起来,解释并执行的语言。
CPU运行级别: 至少有 特权级别/用户级别两种。 特权态可以执行所有指令。 用户级别可以执行有限的指令。
系统调用:用户态程序想要使用特权态的才有的功能时, 用户程序向操作系统发起请求, 由操作系统代为执行(同时cpu从用户级切换到特权级别)
库函数: 操作系统实现的,方便用户使用的接口。 有一部分是系统调用的包装,有一部分是高级一点功能或函数。
(命令行中的)命令:有些是库函数或系统调用的包装, 从命令行或文件中接收参数。有些是自己自己的程序。
程序: 包含代码,初始数据等内容
进程: 运行中的程序。包含了代码,初始数据, 内存中的临时数据(堆),CPU上下文栈(栈)
线程:一个运行中的程序, 可以使用多个CPU. 每个CPU都维护自己的一个栈(CPU上下文栈)。 注意,这里的CPU是虚拟出来的,比如1个进程向操作系统申请了8个线程, 但是实际上底层只有两个CPU硬件, 操作系统就会通过特定的线程调度算法, 分别让8个栈,在底层的CPU上与运行一段时间,并不断轮转。 如果有优先级比较高的栈,还会发生抢占。
线程调度: 多个CPU上下文栈的切换。
进程调度:现代操作系统主要是线程调度。 线程调度的过程中,自然发生着进程调度。
硬件地址:硬件编码的地址。
虚拟地址:操作系统实现的地址, 进程/线程感知到的地址。
锁: mutex互斥锁,semaphore信号量。底层是状态标记+compareAndSet指令(这是一条原子指令,作用是比较并设置值,并返回成功还是失败)+ 线程阻塞/通知。
monitor: 在 mutex 和 semaphore 的基础上,提出了更高层次的同步原语 monitor,不过需要注意的是,操作系统本身并不支持 monitor 机制,实际上,monitor 是属于编程语言的范畴,当你想要使用 monitor 时,先了解一下语言本身是否支持 monitor 原语,例如 C 语言它就不支持 monitor,Java 语言支持 monitor。 一般的 monitor 实现模式是编程语言在语法上提供语法糖,而如何实现 monitor 机制,则属于编译器的工作,Java 就是这么干的。
线程状态:
running(ready,running),
blocked(可中断/不可中断),
waiting(timed_waiting/waiting. jvm中还分出了这两个状态)
线程通信方式: 中断, 共享内存,pipe
线程同步: 锁+线程通信。
发表回复