From ae311d49a7ad0b69d0be27be09743ef0e572b0dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9E=97=E4=BC=9F?= Date: Tue, 15 Oct 2024 14:46:47 +0800 Subject: [PATCH] Update 2address-space.rst --- source/chapter4/2address-space.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/chapter4/2address-space.rst b/source/chapter4/2address-space.rst index d3223b58f..a62dd184f 100644 --- a/source/chapter4/2address-space.rst +++ b/source/chapter4/2address-space.rst @@ -24,7 +24,7 @@ 地址虚拟化出现之前 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -我们之前介绍过,在远古计算机时代,整硬件资源只用来执行单个裸机应用的时候,并不存在真正意义上的操作系统,而只能算是一种应用函数库。那个时候,物理内存的一部分用来保存函数库的代码和数据,余下的部分都交给应用来使用。从功能上可以将应用占据的内存分成几个段:代码段、全局数据段、堆和栈等。当然,由于就只有这一个应用,它想如何调整布局都是它自己的事情。从内存使用的角度来看,批处理系统和裸机应用很相似:批处理系统的每个应用也都是独占内核之外的全部内存空间,只不过当一个应用出错或退出之后,它所占据的内存区域会被清空,而应用序列中的下一个应用将自己的代码和数据放置进来。这个时期,内核提供给应用的访存视角是一致的,因为它们确实会在运行过程中始终独占一块固定的内存区域,每个应用开发者都基于这一认知来规划程序的内存布局。 +我们之前介绍过,在远古计算机时代,整个硬件资源只用来执行单个裸机应用的时候,并不存在真正意义上的操作系统,而只能算是一种应用函数库。那个时候,物理内存的一部分用来保存函数库的代码和数据,余下的部分都交给应用来使用。从功能上可以将应用占据的内存分成几个段:代码段、全局数据段、堆和栈等。当然,由于就只有这一个应用,它想如何调整布局都是它自己的事情。从内存使用的角度来看,批处理系统和裸机应用很相似:批处理系统的每个应用也都是独占内核之外的全部内存空间,只不过当一个应用出错或退出之后,它所占据的内存区域会被清空,而应用序列中的下一个应用将自己的代码和数据放置进来。这个时期,内核提供给应用的访存视角是一致的,因为它们确实会在运行过程中始终独占一块固定的内存区域,每个应用开发者都基于这一认知来规划程序的内存布局。 后来,为了降低等待 I/O 带来的无意义的 CPU 资源损耗,多道程序出现了。而为了提升用户的交互式体验,提高生产力,分时多任务系统诞生了。它们的特点在于:应用开始多出了一种“暂停”状态,这可能来源于它主动 yield 交出 CPU 资源,或是在执行了足够长时间之后被内核强制性放弃处理器。当应用处于暂停状态的时候,它驻留在内存中的代码、数据该何去何从呢?曾经有一种省内存的做法是每个应用仍然和在批处理系统中一样独占内核之外的整块内存,当暂停的时候,内核负责将它的代码、数据保存在外存(如硬盘)中,然后把即将换入的应用在外存上的代码、数据恢复到内存,这些都做完之后才能开始执行新的应用。