碎玉零珠————计算机组成原理
什么是缓存(Cache)?为什么需要缓存?如何提高缓存的命中率?缓存是不是最快的?
Cache即CPU的高速缓冲存储器,是一种是用于减少处理器访问内存所需平均时间的部件;
由于CPU的计算速度远远大于从CPU向内存取数据的速度,如果每次都让CPU去内存取数据,会导致CPU计算能力的浪费,所以人们设计了缓存,CPU通过读写缓存来获取操作数,结果也通过缓存写入内存;
注意程序的局部性原理,在遍历数组时按照内存顺序访问;充分利用CPU分支预测功能,将预测的指令放到缓存中执行;此外缓存的容量和块长是影响缓存效率的重要因素。
缓存不是最快的,寄存器更快。
附 Cache 的基本原理
编译器、汇编器和链接器的基本概念编译器
编译器把高级语言翻译为机器语言
得到 hello.s 文件,这个是汇编语言程序
不同的高级语言翻译的汇编语言相同
汇编器
汇编器将 hello.s 翻译成机器语言指令,把这些指令打包成可重定位目标程序。
得到 .o 文件,是一个二进制文件,它的字节码是机器语言指令,不再是字符。前面两个阶段都还有字符。
链接器
链接器负责 .o 文件的合并。得到的是可执行目标文件。
gcc ...
进程、线程、协程之间的区别
简述进程、线程、协程的概念进程
保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,不同进程间可以进行进程间通信,上级挂靠单位是操作系统。一个应用程序相当于一个进程,操作系统会以进程为单位,分配系统资源(CPU 时间片、内存等资源),进程是资源分配的最小单位。
线程
线程从属于进程,也被称为轻量级进程,是程序的实际执行者。线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条- 线程并行执行不同的任务。一个线程只有一个进程。
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。
协程
协程是伴随着主线程一起运行的一段程序。
协程与协程之间是并行执行,与主线程也是并行执行,同一时间只能执行一个协程提起协程,自然是要想到线程,因为协程的定义就是 ...
进程调度算法
进程的调度方式
通常有以下两种进程调度方式:
非剥夺(非抢占)调度方式:当一个进程正在处理机上执行时,即使有某个更为重要或者紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞态时,才把处理机分配给更为重要或紧迫(优先级更高)的进程。其优点是实现简单,系统开销小,适用于大多数批处理系统,但它不能用于分时系统和大多数实时系统。
剥夺(抢占)调度方式:当一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程(优先级更高)的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给这个更重要的进程。这种方式对提高系统吞吐率和响应效率都有明显的好处。但抢占也要遵循一定原则。
调度的基本准则
主要有以下几种:
CPU利用率:CPU是计算机系统中最重要和最昂贵的资源之一,所以应该尽可能使得CPU保持忙的状态,资源利用率尽可能高。
系统吞吐量:单位时间内CPU完成的作业数量。长作业需要消耗较长的处理机时间,会降低系统的吞吐量。对于短作业,他们所需消耗的处理机时间较短,因此能提高系统吞吐量。调度算法和方式不同,也会对系统的吞吐量产生较大影响。
周转时 ...
进程内存分布
内存分布
以32位系统为例,共有4G的寻址能力,进程在内存中的分布如下图所示。Linux默认将高地址的1G空间分配给内核,称为内核空间,剩下的3G空间分配给进程使用,称为用户空间。
操作系统内核区
用户不可见
用户栈
栈指针,向下扩展
动态堆
向上扩展
全局区(静态区)
.data初始化 .bss未初始化
文字常量区(只读数据)
常量字符串
程序代码区
栈指针,向下扩展
栈区
由编译器自动分配释放,速度较快
用来存储函数调用时的临时信息的结构,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。这些局部变量等空间都会被释放
程序运行过程中函数调用时参数的传递也在栈上进行,如递归调用栈
当栈过多的时候,就是导致栈溢出(比如大量的递归调用或者大量的内存分配)
栈是向低地址扩展的数据结构,是一块连续的内存的区域,空间有限
堆区
由程序员分配 (new,malloc) 释放 (delete,free) ,并指明大小,速度较慢
若程序员不释放,导致内存泄漏,new 完没有 delete
不过在整个程序结束时由操作系统回收,但是这样无疑增加 ...
页面置换算法
页面置换算法简介
进程运行时,若其访问的页面不在内存而需将其调入(缺页异常),但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区,其中选择调出页面的算法就称为页面置换算法。
好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出。
页面置换算法的目标是最小化缺页中断的次数,常见的页面置换算法有最佳⻚⾯置换算法(OPT)、先进先出置换算法(FIFO)、最近最久未使⽤的置换算法(LRU)、时钟页面置换算法和最不常⽤置换算法等。
最佳页面置换算法(淘汰未来不会使用/最长时间不访问的页面)
理论上的最佳算法,因为它可以保证最低的缺页率。但在实际应用中,由于无法预知未来的访问模式,OPT 通常无法实现。
先进先出置换算法(优先淘汰最早进入内存的页面)
FIFO 算法维护一个队列,新来的页面加入队尾,当发生页面置换时,队头的页面(即最早进入内存的页面)被移出。
FIFO 和 OPT 算法的区别在于:除了在时间上向后或向前看之外,FIFO 算法使用的是页面调入内存的时间,OPT 算法使用的是页面将来使用的时间
...
碎玉零珠————计算机操作系统
并发与并行
并发:在一段时间内,多个任务都会被处理。但在某一时刻,只有一个任务在执行。单核处理器做到的并发,其实是利用时间片的轮转,例如有两个进程 A 和 B,A 运行一个时间片之后,切换到 B,B 运行一个时间片之后又切换到 A。因为切换速度足够快,所以宏观上表现为在一段时间内能同时运行多个程序。
并行:在同一时刻,有多个任务在执行。这个需要多核处理器才能完成,在微观上就能同时执行多条指令,不同的程序被放到不同的处理器上运行,这个是物理上的多个进程同时进行。
进程的状态
运⾏状态(Runing):该时刻进程占用 CPU;
就绪状态(Ready):可运行,由于其他进程处于运行状态而暂时停止运行;
阻塞状态(Blocked):该进程正在等待某⼀事件发生(如等待输⼊/输出操作的完成)而暂时停止运行,这时,即使给它 CPU 控制权,它也无法运行;
创建状态(new):进程正在被创建时的状态;
结束状态(Exit):进程正在从系统中消失时的状态;
进程与线程
进程是一个正在执行的程序的实例。每个进程有自己独立的地址空间、全局变量、堆栈、和文件描述符等资源。
线程是进程中的一个执行单元。 ...
三次握手,四次挥手
三次握手
第一次握手:SYN(最开始都是 CLOSE,之后服务器进入 LISTEN)
发起连接:客户端发送一个 TCP 报文段到服务器。这个报文段的头部中,SYN 位被设置为 1,表明这是一个连接请求。同时,客户端会随机选择一个序列号(Sequence Number),假设为 x,发送给服务器。
目的:客户端通知服务器它希望建立连接,并告知服务器自己的初始序列号。
状态:客户端进入 SYN_SENT 状态。
第二次握手:SYN + ACK
确认并应答:服务器收到客户端的连接请求后,如果同意建立连接,它会发送一个应答 TCP 报文段给客户端。在这个报文段中,SYN 位和 ACK 位都被设置为 1。服务器也会选择自己的一个随机序列号,假设为 y,并将客户端的序列号加 1(即 x+1)作为确认号(Acknowledgment Number),发送给客户端。
目的:服务器告诉客户端,它的连接请求被接受了,并通知客户端自己的初始序列号。
状态:服务器进入 SYN_RCVD 状态。
第三次握手:ACK
最终确认:客户端收到服务器的应答后,还需要向服务器发送一个确认。这个 TCP 报文段的 ...
TCP 长连接和短连接
TCP 长连接和短连接什么是长连接和短连接
长连接(long connnection),指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
短连接(short connnection),是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时才去建立一个连接,数据发送完成后则断开此连接,即每次连接只完成一项业务的发送。
TCP 长短连接的优势TCP 短连接
模拟一下TCP短连接的情况:client 向 server 发起连接请求,server 接到请求,然后双方建立连接。client 向 server 发送消息,server 回应 client ,然后一次读写就完成了,这时候双方任何一个都可以发起 close 操作,不过一般都是 client 先发起 close 操作。
从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作。
短连接优点:管理起来方便,存在的连接都是有效的连接,不需要额外的控制手段。
TCP 长连接
模拟一下TCP长连接的情况,client 向 server 发起连接,serve ...
局域网中的主机之间通信
局域网中的主机之间通信
局域网中的主机间通信分为 2 种:
两台主机处于同一网段
两台主机之间处于不同网段
局域网中处于同一网段中的主机通信
假如:主机 A 要和主机 B 通信,主机 A 知道主机 B 的 IP 地址。知道 IP 地址是通信的前提。首先,要通进行通信,IP 地址和 MAC 地址是必不可少的,IP 地址已经知道了,那么主机 A 必须要知道主机 B 的 MAC 地址,先在 ARP 表中查看有无该 IP 地址,如果有,就找出对应的硬件 MAC 地址,如果没有,主机 A 广播发送 ARP 请求来获取目的 MAC 地址,说 who is 192.168.1.102 ?
当 IP 地址是 192.168.1.102 的主机 B 收到后,会回复主机 A ,说 “我是 192.168.1.102 ,我的 MAC 地址是:xx-xx-xx-xx-xx-xx”(ARP应答)。这样一来,主机 A 就知道主机 B 的 MAC 地址了,当然,由于主机 A 在广播发送的 ARP 报文时,主机 A 的 MAC 地址被作为源 MAC 地址而封装在 MAC 帧中,所以主机 B 收到广播报文后 ...
碎玉零珠————计算机网络
OSI 七层模型
理论上的网络通信模型
应用层:最靠近用户的层,负责处理特定的应用程序细节。这一层提供了网络服务与用户应用软件之间的接口。例如,Web 浏览器、FTP 客户端和服务器、电子邮件客户端等。
表示层:确保从一个系统发送的信息可以被另一个系统的应用层读取。它负责数据的转换、压缩和加密。例如,确保数据从一种编码格式转换为另一种,如 ASCII 到 EBCDIC。
会话层:管理用户的会话,控制网络上两节点间的对话和数据交换的管理。它负责建立、维护和终止会话。例如,建立一个会话令牌,以便在网络上的两个节点之间传递。
传输层:提供端到端的通信服务,保证数据的完整性和正确顺序。这一层包括 TCP 和 UDP 等。
网络层:负责在多个网络之间进行数据传输,确保数据能够在复杂的网络结构中找到从源到目的地的最佳路径。这层使用的是 IP(Internet Protocol)协议。
数据链路层:在物理连接中提供可靠的传输,负责建立和维护两个相邻节点间的链路。包括帧同步、MAC(媒体访问控制)。
物理层:负责在物理媒介上实现原始的数据传输,比如电缆、光纤和无线信号传输。涉及的内容包括电压、接口、针 ...














