💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 简介 如果每个程序员都不得不掌握系统的所有细节,那就不可能再编写代码了.而且管理这些部件并加以优化使用,是一个挑战性极强的工作.所以计算机安装了一个操作系统 # 运行模式 **多数计算机有2种运行模式:内核态和用户态.** 软件最基础是操作系统,他运行在内核态(也称为管态,核心态),在这个模式中,操作系统对所有硬件有完全访问权,可以执行机器能够运行的任何指令. 软件其他部分运行在用户态,在用户态下,只使用了机器指令中的一个子集.特别的,哪些会影响机器的控制或可进行I/O操作的指令,在用户态是完全禁止的 ![](https://box.kancloud.cn/6d4d4bd7a064f0241f225d0e511b04e7_920x518.png) # 作为一个可扩展的操作系统 **抽象是管理所有复杂性的一个关键.好的抽象可以把一个几乎不可能管理的任务划分成2个可管理的部分. 其第一部分是有关抽象的定义和实现. 第二部分是随时用这些抽象解决问题** 操作系统的任务是创建好抽象,并实现和管理它所创建的抽象 # 作为资源管理者的操作系统 **把操作系统看作应用程序提供的基本抽象概念,是一种自顶向下的观点. 按照另一种自底向上的观点,操作系统则用来管理一个复杂系统的各个部分** **资源管理者包括用以下2种不同方式实现多路复用(共享)资源,在时间和空间上复用** 当一种资源在时间上复用时,不同的程序或用户轮流使用它 空间复用,每个客户都得到资源的一部分,从而取代客户排队,通常在运行程序之间分割内存,这样每一个运行程序都可以同时入驻内存,假设有足够多的内存可以放多个程序,那么在内存中同时存放若干个程序的效率,比把所有内存给一个程序效率要高的多,特别是程序只需要内存中的一部分,更是这样 # 简单的个人计算机中部件 ![](https://box.kancloud.cn/632caf5a70ef4640fb45860ec8cb10dd_1427x636.png) # 处理器 每个cpu都有一套可执行的专门指令集,所以x86的处理器不能执行ARM程序,而ARM处理器不能处理X86程序 **寄存器** 除了用来保存变量和临时结果的通用寄存器之外,多数计算机还有一些对程序员可见的专用寄存器.其中之一是**程序计数器**,它保存了将要取出的下一条指令的内存地址,在指令取出之后,程序计数器就被更新以便指向后继的指令 另一个寄存器是**堆栈指针**,它指向内存中当前栈的顶端,该栈包含了每个执行过程的栈帧.一个过程的栈帧中保存了有关的输入参数,局部变量以及那些没有保存在寄存器中的临时变量 当前还有**程序状态字**寄存器,这个寄存器包含了条件码位(由比较指令设置),cpu优先级,模式(用户态和内核态),以及各种其他控制位,用户程序通常读入整个psw,但是只对其中少量的字段写入.在系统调用和I/O中,psw很重要 无论32位的寄存器,还是64位的寄存器,他们存储容量都小于1kb 为了改善性能,cpu设计师早就放弃了同时读取,解码和执行一条指令的简单模型.许多现代cpu具有同时取出多条指令的机制 比流水线更先进的设计是超标量的cpu ![](https://box.kancloud.cn/32c336e1f12cc1399c3783074587b4d8_927x357.png) 除了在嵌入式系统中非常简单的cpu之外,多数cpu有2种模式,前面提到的内核态和用户态 psw有一个二进制位控制这2个模式,当在内核态运行时,cpu可以执行指定集中的每一条指令,并且使用硬件的每种功能 用户程序在用户态下运行,仅允许执行整个指令集的一个子集和访问所有功能的一个子集,当然将psw模式位设置为内核态也是禁止的 从操作系统中获得服务,用户程序必须使用系统调用(system call)以陷入内核态并调用操作系统,TRAP指令把用户态切换成内核态,并启用操作系统,操作完成切换为用户态 # 超线程 ![](https://box.kancloud.cn/a82f7ea8b361e7cec970a498c7faa60c_1417x888.png) # GPU 其实在绝对数目方面,没什么能跑赢现代的GPU.GPU指的是由成千上万个微核组成的处理器.他们擅长处理大量并行的简单计算,比如在图像应用中渲染多边形.他们不太能胜任串行任务,并且很难编程.虽然CPU对操作系统很有用(比如加密或处理网络传输),当操作系统本身不太可能运行在GPU上 # 高速缓存 高速缓存命中,缓存满足了请求,就不需要通过总线把访问请求送往主存. 高速缓存命中通常需要2个时钟周期.高速缓存没有命中就要访问主存了,这需要付出大量的时间代价 由于高速缓存价格昂贵,所以大小有限,有些机器具有2级甚至3级高速缓存,每一级缓存比前一级慢并且容量大 现代cpu设置了2个缓存,第一级称为L1缓存,总是在cpu中,用来将已解码的指令调入cpu的执行引擎.对于那些频繁使用的数据字,多数芯片安排有第二个L1缓存,典型的L1缓存大小为16kb,另外,往往还设计有二级缓存称为L2缓存,用来存放进来使用过的若干兆字节的内存字,L1和L2缓存之间的差别在于时序.对于L1缓冲的访问,不存在任何延迟,而对于L2缓存的访问,则会延迟1或2个时钟 # 磁盘 磁盘结构 ![](https://box.kancloud.cn/a0f436b7d2be9372aea52310c1896a47_1429x652.png) 最近流行的固态硬盘,叫闪存,如果闪存擦除的次数过多,就被磨损了 # 总线 ![](https://box.kancloud.cn/72886c6f8872178ffd2942573824baf6_723x519.png) # posix