自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 操作系统导论——第20章 分页:较小的表

因此,页表的这两页就驻留在内存中。因此,多级页表的工作方式:它只是。

2025-04-14 19:42:19 77

原创 操作系统导论——第19章 分页:快速地址转换(TLB)

使用作为核心机制来实现,可能会带来较高的性能开销。使用分页,就要将,并且需要。因为这些一般存储在中,所以在转换虚拟地址时,。每次指令获取、显式加载或保存,都要额外读一次内存以得到转换信息,这慢得无法接受。因此我们面临如下问题:如何才能加速虚拟地址转换,尽量避免额外的内存访问?需要什么样的硬件支持?操作系统该如何 支持?硬件。增加所谓的,它就是频繁发生的虚拟到物理地址转换的。对每次内存访问,硬件先检查TLB,看看其中是否有期望的转换映射,如果有,就完成转换(很快),不用访问页表 (其中有全部的转换映射)

2025-04-14 18:54:17 422

原创 操作系统导论 第18章 分页:介绍

操作系统有两种方法,来解决大多数问题。①第一种是,就像虚拟内存管理中的分段。遗憾的是,这个解决方法存在 有的问题。具体来说,,随着时间推移,分配内存会变得比较困难。。在虚拟内存中,我们称这种思想为,可以追溯到一个早期的重要系统,Atlas[KE+62, L78]。,每个单元称为。相应地,我们把看成是定长槽块的阵列,叫作。。我们的挑战是:如何通过页来实现虚拟内存,从而的问题?基本技术是什么?如何让这些技术运行良好, 并?

2025-04-01 14:43:09 759

原创 操作系统导论 第17章:空闲空间管理

管理空闲空间当然可以很容易,我们会在讨论分页概念时看到。如果需要管理的空间被划分为固定大小的单元,就很容易。在这种情况下,只需要,如果有请求,。如果要管理的空闲空间,管理就变得困难(而且有趣)。这种情况出现在(如malloc()和free()),或者(segmentation) 的方式实现虚拟内存。在这两种情况下,出现了(external fragmentation)的问题: 空,后续的请求可能失败,因为没有一块足够大的连续空闲空间,即使这时总的空闲空间超出了请求的大小。上面展示了该问题的例子。

2025-03-31 13:56:53 727

原创 计算机网络 第二章:应用层(1)

应用层协议定义①交换报文的类型,例如请求报文和响应报文。② 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的。③ 字段的语义,即这些字段中的信息的含义。④ 确定一个进程何时以及如何发送报文,对报文进行响应的规则。有些应用层协议是。

2025-03-29 18:41:01 903

原创 计算机网络 第二章:应用层(2)

HTTP 服务器是无状态的。这简化了服务器的设计,并且允许工程师们去开发可以同时处理数以千计的 TCP 连接的高性能 Web 服务器。然而一个 Web 站点通常希望能够识别用户,可能是因为服务器希望限制用户的访问,或者因为它希望把内容与用户身份联系起来。为此, HTTP 使用了 cookie。cookie 在 [RFC 6265 ]中定义,它。目前大多数商务 Web 站点都使用了 cookie。;;;使用图 2-10 ,我们通过一个典型的例子看看 cookie 的工作过程。

2025-03-29 18:40:45 808

原创 操作系统导论——第16章 分段

到目前为止,我们一直假设。利用基址和界限寄存器,操作系统很容易将不同进程重定位到不同的物理内存区域。。从图16.1 中可知,如果我们,那么。因此,另外,如果剩余物理内存无法提供连续区域来放置完整的地址空间,进程便无法运行。这种基址加界限的方式看来并不像我们期望的那样灵活。因此怎样支持大地址空间,同时栈和堆之间(可能)有大量空闲空间?在之前的例子里,地址空间非常小,所以这种浪费并不明显。但设想一个32位(4GB)的地址空间,通常的程序只会使用几兆的内存, 但需要整个地址空间都放在内存中。

2025-03-27 14:51:22 700

原创 操作系统导论——第15章 机制:地址转换

需要两种 CPU 模式。操作系统在特权模式(privileged mode,或内核模式可以访问整个机器资源。应用程序在用户模式(user mode)运行只能做有限的操 作。只要一个位,也许保存在处理器状态字(processor status word)中,就能说明当前的 CPU运行模式。在一些特殊的时刻(如系统调用、异常或中断),CPU 会切换状态。

2025-03-27 13:37:18 853

原创 操作系统导论——第 9 章 调度:比例份额

这时,算法选择最小的行程值,是C,执行并增加为80(C的步长是40)。然后C再次运行(依然行程值最小),行 程值增加到120。现在运行A,更新它的行程值为200(现在与B相同)。然后C再次连续运行两次,行程值也变为200。此时,所有行程值再次相等,这个过程会无限地重复下去。表9.1 展示了一段时间内调度程序的行为。可以看出,

2025-03-25 13:43:02 779

原创 操作系统导论——第8章 调度:多级反馈队列

多级反馈队列需要解决两方面的问题。。这通过。然而,,而这又是 SJF(或 STCF)等算法所必需的。(如用户坐在屏幕前,等着进程结束)很好的交互体验,。然而,像轮转这样的算法虽然降低了响应时间,周转时间却很差。关键问题:没有完备的知识如何调度??

2025-03-25 11:51:37 1110

原创 计算机网络 第一章:计算机网络和因特网(2)

分组交换网中的时延、丢包和吞吐量。

2025-03-23 18:01:02 1210

原创 操作系统导论——第14章 插叙:内存操作API

本章所关注的问题:在 UNIX/C 程序中,理解如何分配和管理内存是构建健壮和可靠软件的重要基础。?哪些错误需要避免?

2025-03-23 17:13:50 788

原创 操作系统导论——第13章 抽象:地址空间

从内存来看,早期的机器并没有提供多少抽象给用户。基本上,如图13.1所示操作系统曾经是,在内存中(在本例中,从),然后有一个,目前在物理内存中(在本例中,从),。这里几乎没有抽象,用户对操作系统的要求也不多。

2025-03-22 17:16:21 955

原创 操作系统导论——第7章:进程调度

先做一些简化假设。这些假设与系统中运行的进程有关,有时候统称为。确定工作负载是。一个完全可操作的调度准则。

2025-03-22 15:46:23 826

原创 计算机网络 第一章:计算机网络和因特网(1)

协议定义了在两个或多个通信实体之间交换的报文的格式和顺序以及在报文发送和/或接收一条报文或其他事件方面所采取的动作。

2025-03-17 19:13:09 931

原创 操作系统导论——第六章 机制:受限直接执行

为了保存当前正在运行的进程的上下文,操作系统会执行一些。

2025-03-16 13:26:10 1027

原创 操作系统导论——第五章:插叙:进程API

比如,总是让MenuMeters(来自Raging Menace公司)运行在 Mac 计算机 的工具栏上,这样就能随时了解当前的 CPU 利用率。因此,即使父进程先运行,它也会等待子进程运行完毕,然后wait()返回,接着父进程才输出自己的信息。除了上面提到的 fork() 、exec() 和 wait() 之外,在 UNIX 中还有其他许多与进程交互的方 式。因此,它并没有创建新进程,而是直接将当前运行的程序(以前的p3)替换为不同的运行程序(wc)。在上面的例子中,父进程先运行并输出信息。

2025-03-13 14:07:38 599

原创 操作系统导论——第四章 抽象:进程 ​

所有现代操作系统都以某种形式提供这些 API① 创建:用于创建新的进程。在 shell 中键入命令或双击应用程序图标时,会调用操作系统例程来创建新进程,运行指定的程序。② 销毁:用于强制销毁进程。大多数程序在运行完成后会自动退出,但如果它们不退出而用户希望终止它们,则可以使用该接口。③ 等待:有时等待进程停止运行是有用的,因此提供等待接口。④ 状态:通常有一些接口可以获得有关进程的状态信息,例如运行了多长时间、处于何种状态。

2025-03-13 14:04:55 659

原创 深入理解计算机系统——进程(三)

有时候主程序需要。例如,当 Linux shell 创建一个前台作业时,在接收下一条用户命令之前,它,被 SIGCHLD 处理程序回收。图 8-41 给出了一个基本的思路。它阻塞 SIGCHLD 信号,避免 8.5.6 节中讨论过的父进程和子进程之间的竞争。,然后以循环的方式。,把它非零的 PID。这会终止循环,父进程继续其他的工作,然后开始下一次迭代。当这段代码正确执行的时候,。我们可能会想要修补这个问题,在循环体内插入 pause:while(!*/pause();

2025-01-13 09:49:28 536

原创 深入理解计算机系统——进程(二)

是下面中的一种:进程终止。进程终止并转储内存。进程停止(挂起)直到被SIGCONT信号重启。进程忽略该信号。图 8-26 展示了与每个信号类型相关联的默认行为。比如,收到。

2025-01-13 09:14:32 654

原创 深入理解计算机系统——进程,异常控制流(一)

因此对任何 x86-64 系统都是一样的。32~255 的号码对应的是。

2025-01-12 20:50:22 1175

原创 深入理解计算机系统——链接(二)

此时,链接器就知道。

2025-01-12 15:34:51 827

原创 深入理解计算机系统——链接(一)

链接器的输入是一组可重定位目标模块。每个模块定义一组符号,有些是局部的(只对定义该符号的模块可见)有些是全局的(对其他模块也可见如果 多个模块 定义同名的全局符号,会发生什么呢?下面是 Linux 编译系统采用的方法。在编译时,编译器向汇编器输出每个全局符号,或者是强(strong)或者是弱(weak),而汇编器把这个信息隐含地编码在可重定位目标文件的符号表里。函数和已初始化的全局变量是强符号未初始化的全局变量是弱符号。根据强弱符号的定义,不允许有多个同名的强符号。

2025-01-11 17:13:51 842

原创 深入理解计算机系统——优化程序性能(二)

图5-12 提供了 Intel Core i7 Haswell 参考机的一些算术运算的性能,有的是测量出来的,有的是引用 Intel 的文献。这些时间对于其他处理器来说也是具有代表性的。每个运算都是由以下这些数值来刻画的:一个是延迟(latency),它表示完成运算所需要的总时间;另一个是发射时间(issue time),它表示两个连续的同类型的运算之间需要的最小时钟周期数;还有一个是容量(capacity),它表示能够执行该运算的功能单元的数量。 从整数运算到浮点运算,延迟是增加的。还可以

2025-01-09 21:40:19 794

原创 深入理解计算机系统——优化程序性能(一)

编写高效程序需要做到以下几点:① 必须选择一组适当的算法和数据结构② 必须编写出编译器能够有效优化以转换成高效可执行代码的源代码。理解优化编译器的能力和局限性是很重要的,编写程序方式中只是一点小小的变动,都会引起编译器优化方式很大的变化。③ 技术针对处理运算量特别大的计算,将任务分成多个部分,这些部分可以在多核和多处理器的某种组合上并行地计算。描述许多提高代码性能的技术,理想情况:编译器能够接受我们编写的任何代码,并产生尽可能高效的,具有指定行为的机器级程序。现代编译器采用了复杂的分析和优化形式,而且变得越

2025-01-09 19:48:40 637

原创 深入理解计算机系统—虚拟内存(4)

隐式空闲链表为我们提供了一种介绍一些基本分配器概念的简单方法。然而,(尽管对于堆块数量预先就知道是很小的特殊的分配器来说它是可以的)一种更好的方法是。根据定义,。例如,堆可以组织成一个双向空闲链表,在每个空闲块中,都包含一个 pred(前驱)和 succ(后继)组织,图9-48使用双向链表而不是隐式空闲链表,。不过,,这。一种方法是用,将处。使用。在这种情况下,释放一个块可以在常数时间内完成。。另一种方法是按照。在这种情况下,。平衡点在于,,接近最佳适配的利用率。一般而言,

2025-01-05 18:32:46 709

原创 深入理解计算机系统—虚拟内存(3)

例如,如果一个分配器在 1 秒内完成 500 个分配请求和释放请求,那么它的吞吐率就是每秒 1000 次操作。一般而言,

2025-01-05 16:50:28 1260

原创 深入理解计算机系统—虚拟内存(2)

通过一个具体端到端的地址翻译实例,综合上述内容,这个示例运行在有一个 TLB 和 L1 d-cache 的小系统上。做出如下假设: ① 内存是按字节寻址的。 ② 内存访问是针对 1 字节的字的(不是4字节)。③ 虚拟地址是14位长的(n=14)④ 物理地址是 12 位长的(m=12)⑤ 页面大小是 64 字节(P=64)⑥ TLB 是四路组相联的,总共有 16 个条目。 ⑦ L1 da-cache 是物理寻址,直接映射的,行大小为 4 字节,而总共有 16组。 图 9-19 展示

2025-01-03 19:10:03 1045

原创 深入理解计算机系统—虚拟内存(一)

然而,共享主存会形成特殊的挑战。随着对 CPU 需求的增长,进程以某种合理的平滑方式慢了下来。但是如果太多的进程需要太多的内存,那么它们中的一些就根本无法运行。为了更加有效地管理内存并且少出错,现代系统提供了一种对主存的抽象概念,叫做。,它为。通过一个清晰的机制,虚拟内存有三个重要能力①,通过这种方式,高效地使用了主存。② 为每个进程,从而简化了内存管理。③。

2025-01-03 18:29:23 984

原创 深入理解计算机系统—存储器层次结构(二)

不过,由于 CPU 和 主存之间逐渐增大的差距,系统设计者被迫在CPU寄存器文件和主存之间插入了一个,称为。如图6-24,L1 高级缓存的访问速度几乎和寄存器一样块,典型的是大约4个时钟周期。随着CPU和主存之间性能差距不断增大,在 L1 高速缓存和主存之间又插入了一个更大的高速缓存,L2 高速缓存,可以大约在 10 个时钟周期内访问到它。有些现代系统还包括一个更大的高速缓存,称为 L3 高速缓存。在存储器层次结构中,它位于 L2 高速缓存和主存之间,大约50个周期内访问到它。

2025-01-02 13:37:17 930

原创 深入理解计算机系统-存储器层次结构(一)

注意,虽然 SRAM 的性能滞后于 CPU 的性能,但还是在保持增长。不过,DRAM 和 磁盘性能与CPU性能之间的差距实际上是在加大的。直到 2003 年左右。

2024-12-30 12:44:31 777

原创 深入理解计算机系统-程序的机器级表示(二)

和整数运算操作不同,AVX 浮点操作不能以立即数值作为操作数。相反,编译器必须为所有的常量值分配和初始化存储空间。然后代码再把这些值从内存读入。函数从标号为 .LC2 的内存位置读出值 1.8,从标号为 .LC3 的位置读出值 32.0,观察这些标号对应的值,可以看出每一个都是通过一对 .long 声明和十进制表示的值指定的。把这些数解释为浮点值,标号为 .LC2 的声明,有两个值 3435973837(0xcccccccd因为机器采用的是小端法字节顺序,第一个值给出的是低位4字节,第二个给出的是。

2024-11-15 00:24:33 1137

原创 深入理解计算机系统-程序的机器级表示(一)

假设一个C程序,有两个文件p1.c p2.c,用Unix命令行编译代码:gcc指的就是GCC编译器,它是linux系统上默认的编译器,编译选项-Og是用来告诉编译器生成符合原始C代码整体结构的机器代码的优化等级。(在实际项目中,为了获得更高的性能,会使用-O1或者-O2,甚至更高的编译优化选项。但是使用高级别的优化产生的代码会严重变形,导致产生的机器代码与最初的源代码之间的关系难以理解,这里为了理解方便,因此选择-Og这个优化选项) gcc命令调用了一整套程序,将源代码转化成可执行代码:

2024-11-11 20:13:13 663

原创 深入理解计算机系统-信息的表示和处理

二进制值是计算机编码,存储和操作信息的核心。最简单的布尔代数是在二元集合{0,1}基础上的定义,定义布尔代数中的几种运算。① ~ (逻辑运算 NOT ) 取反运算,即 ~0=1 ,~1=0 对每一位数都取反② & (逻辑运算 AND),∩ ,两者为真(1)才为真(1),其余都是假(0)③ | (逻辑运算 OR),或,两者只要有一真(1)即为真(1),二者都为假(0)才为假(0)④ ^ (逻辑运算 异或)二者为真(1)但不同时为真(1)时,结果才为真(1)

2024-11-10 20:44:28 453

原创 深入理解计算机系统--计算机系统漫游

汇编语言为不同高级语言的不同编译器。

2024-10-17 16:50:32 1280

原创 最大团问题--回溯法

给定一个无向图,其中 V 是图的顶点集,E图的边集完全图:如果无向图中的任何一对顶点之间都有边,这种无向图称为完全图完全子图:给定无向图,如果,且对应任意且,则称U是G的完全子图。(即完全子图中的任意两个顶点之间都有边)团(最大完全子图):U 是 G 的团当且仅当若存在一个最大完全子图包含U,那么 U 不是一个团。最大团:G 中所包含顶点数最多的团最大团问题是一个NP-C问题,无法在多项式时间内求出最大团,通常只能在数据规模较小的情况下适用。

2024-06-27 13:27:42 1137

原创 数据结构——并查集

并查集是一种,用来处理问题。思想:用一个数组表示整片森林,,只要找到某个元素对应的树根,就能确定它的集合。

2024-06-04 15:49:11 726 1

原创 数据结构--拓扑排序

对于一个进行拓扑排序,是将G中所有节点排成一个线性序列,该序列满足以下两个条件:① 每个节点有且仅出现一次 ② 若存在一条从节点A到节点B的路径,则在序列中A一定出现在B前面。对于求一个有向无环图的拓扑排序步骤:1.在图中找到一个没有前驱(入度为0)的节点,然后输出2. 从图中删除该节点和所有以它为起点的有向边3.重复操作1和操作2,直到图为空 或 当前图不存在无前驱的顶点为止第一步操作,删除节点 1第二步操作,删除节点 2第三步操作,删除节点4最后拓扑排序依次为 3 5,不再画图讲述。

2024-05-31 19:04:21 2768

原创 图论(五)-最短路

(n为节点个数,m为边总数)与前面所述的dijkstra算法不同,Bellman-Ford 算法,同时可以判断是否存在负权回路。算法描述:①初始化:将除起始点 s 以外的 dis 数组设置为 无穷大, dis[ s ] = 0②迭代:遍历图中的每条边,对边的两个顶点分别进行松弛操作,一共遍历 n 次 m条边,直到没有节点能够松弛③判断负环:Bellman-Ford算法迭代后,再迭代一次,若最短路距离发生改变,则存在负环。Bellman-Ford算法,

2024-05-28 16:28:34 1350

原创 图论(四)—最短路问题(Dijkstra)

概念:从某个点 A 到另一个点B的最短距离(或路径)。从点 A 到 B 可能有多条路线,多种距离,求其中最短的距离和相应路径。

2024-05-27 20:01:57 1977

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除