CS 基础知识的笔记,不算是总结性的笔记,只是曾经备忘录上记录下来的和对于自己陌生的点,或许应该保存到blog上,抑或是考试教育的一种印证。

CO

1、

10^3 千、6 百万million、9 十亿billion、12 万亿trillion

15 千万亿 PFLOPS、18 百亿亿 EPLOPS

(mgtpez MGTPEZ)

2、指令系统——指令集架构ISA(Instruction Set Architecture)是软硬件的交界。

3、RISC只能通过load/store指令实现访存,所有运算指令都是对寄存器操作。

4、工具链在编译链接应用程序时,会将代码段地址默认设置为一个相对较低的地址(但这个地址一般不会为0,地址0在多数操作系统中都会被设为不可访问的地址,以便捕获空指针访问)。

5、进程的上下文切换主要由软件来完成。

发生切换的时机主要有两种:

  • 进程主动调用某些系统调用时因出现无法继续运行的情况(如等待 IO 完成或者获得锁)而触发切换。

  • 进程分配到的时间片用完了或者有更高优先级的就绪进程要抢占 CPU 导致的切换。

    切换工作的实质是实现对 CPU 硬件资源的分时复用。操作系统把当前进程的运行上下文信息保存到内存中,再把选中的下一个进程的上下文信息装载到 CPU 中。

    特定时刻只能由一个进程使用的处理器状态信息,包括通用寄存器、eflags 等用户态的专有寄存器以及当前程序计数器(PC)、处理器模式和状态、页表基址(例如 X86 指令系统的 CR3 寄存器和 LoongArch 的 PGD 寄存器)等控制信息,都需要被保存起 来,以便下次运行时恢复到同样的状态。

    如果一些不支持共享的硬件状态信息在内存里有最新备份,切换时可以采用直接丢弃的方法。例如,有些指令系统的 TLB 不能区分不同进程的页表项(早期的X86 指令系统就是如此),那么在进程切换时需要把已有的表项设为无效,避免被新的进程错误使用。

    而可以共享的硬件状态信息(如 Cache 等),以及用内存保存的上下文信息(如页表等), 则不需要处理。

6、线程是程序代码的一个执行路径。一个进程可以包含多个线程,这些线程之间共享内存空间 和打开文件等资源,但逻辑上拥有独立的寄存器状态和栈

现代系统的线程一般也支持线程私有存储区(Thread Local Storage, 简称 TLS)。例如,GCC 编译器支持用 __thread int number; 这样的语句来定义一个线程私有的全局变量,不同线程看到的 number 地址是不一样的。

7、使用闪存技术构建的永久存储器存在一个问题,即闪存的存储单元随着擦写次数的增多存在损坏的风险。

为了解决这个问题,大多数 NAND 型闪存产品内部的控制器采用地址块重映射的方式来分布写操作,目的是将写次数多的地址转移到写次数少的块中。该技术被称为磨损均衡(Wear Leveling)。闪存的平均擦写次数在 10 万次左右。这样,通过磨损均衡技术,移动电话、数码相机、 MP3 播放器等消费类产品在使用周期内就不太可能达到闪存的写次数限制。闪存产品内部的控制器还能屏蔽制造过程中损坏的块,从而提高产品的良率。

8、中断源即中断的源头,比如用户敲击一下键盘,单击一下鼠标,或者 DMA 的一次传输完成了, 对应的控制器会产生一个中断信号。中断信号可以是一根信号线,也可以是一个消息包。这个中断信息会传送到中断控制器中。中断控制器是负责中断汇集、记录和转发的硬件逻辑。中断控制器一般都具有可编程功能,因此被称为可编程中断控制器(Programmable Interrupt Controller,简称 PIC)。典型的中断控制器如Intel的8259A。8259A支持中断嵌套和中断优先级,可以支持8个中断源, 并可以通过级联的方式进行扩展。

键盘鼠标是低速设备,使用中断方式;DMA用于存在大量数据传输的高速设备,比如硬盘,网络,显示等设备。

中断(设备产生、异步)

  • 可屏蔽:设备产生的信号,通过中断控制器与处理器相连,可被暂时屏蔽(如,键盘、网络事件)
  • 不可屏蔽:一些关键硬件的崩溃(如,内存校验错误)

异常(软件产生、同步)

  • 错误(Fault): 如缺页异常(可恢复)、段错误(不可恢复)等
  • 陷阱(Trap): 无需恢复,如断点(int 3)、系统调用(int 80)
  • 中止(Abort): 严重的错误,不可恢复(机器检查)

注意:中断处理没有进程上下文

  • 中断(和异常相比)和具体的某条指令无关
  • 也和中断时正在跑的进程、用户程序无关
  • 中断处理handler不能睡眠!

9、实模式和保护模式 实模式和保护模式

10、系统调用提供用户程序和操作系统之间的接口

CN

”物链网输会示用“

波特:每秒传输多少个码元(B)

”泄气工程“:机械 电气 功能 规程特性

PCI ( Protocol Control Information): 协议控制信息

SDU (Service Data Unit): 服务数据单元

PDU ( Protocol Data Unit): 协议数据单元

三者关系:PCI + SDU = PDU

OS

文件系统

一个磁盘对应一张FAT表

每一个进程对应一个PCB和一个页表

页表初始化的时候就建立了页号物理块号(磁盘号)的映射关系

页号 页框号 有效位 修改位 物理块号

FAT表和根目录表常驻内存

FAT支持随机访问:可以直接读入想要的逻辑块对应的物理块,不需要读入中间逻辑块对应的物理块

FAT: 文件是否空闲+文件块链

位示图: 文件是否空闲 + inode 文件块关系

inode: index node

阮一峰的这篇《理解inode》,比较简洁易懂:

http://www.ruanyifeng.com/blog/2011/12/inode.html

这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:

  • 首先,系统找到这个文件名对应的inode号码;
  • 其次,通过inode号码,获取inode信息;
  • 最后,根据inode信息,找到文件数据所在的block,读出数据。

硬链接 软链接

https://linux.cn/article-12270-1.html

SSD

传统硬盘是机械式硬盘,而 SSD 盘同U盘一样,基于闪存,也就是 Flash Memory ,它不存在机械部件,这就是它快的原因。 SSD 全称是 Solid State Disk, 翻译过来就是固态硬盘。 不过这个“固态”和“三态”无关,不是说其他硬盘是“液态”或者是“气态”的,而是突显了其优势:稳定与牢固。

于是固态硬盘的优势开始显山露水,其最大的优点是速度快,但缺点也明显,容量低,价格也很贵。所以在个人电脑中很少见到 ssd 硬盘,目前主要还是运用在要求存储速度较快的生产环境中,如数据库系统、分布式管理中心 zookeeper。

按照这种想法写数据:当0 面上的某磁道空间不足时,其他数据写入第 1面相同编号的磁道上。若新磁道空间还是不足,再写第2 面相同编号的磁道上,直到同一柱面上的磁道(所有盘面上的编号相同的磁道)都不够用时才会写到新的柱面上。所以,在这一点上,盘面越多,硬盘越快。

之所以把 SRAM和寄存器放到一块说,是因为很多同学在感观上觉得寄存器是 CPU 直接使用的存储单元,所以寄存器比SRAM 更快,其实它们在速度上是同级别的东西,因为寄存器和 SRAM 都是用相同的存储电路实现的,用的都是触发器,它可是工作速度极快的,属于纳秒级别。

微内核

微内核的优缺点分析:

优点

  • 易于扩展:直接添加一个用户进程即可为操作系统增加服务

  • 易于移植:大部分模块与底层硬件无关

  • 更加可靠:在内核模式运行的代码量大大减少

  • 更加安全:即使存在漏洞,服务与服务之间存在进程粒度隔离

  • 更加健壮:单个模块出现问题不会影响到系统整体

缺点

  • 性能较差:内核中的模块交互由函数调用变成了进程间通信
  • 生态欠缺:尚未形成像Linux一样具有广泛开发者的社区
  • 重用问题:重用宏内核操作系统提供兼容性,带来新问题