【第 7 周】深入理解计算机系统共读心得体会

所在小组

第六组

组内昵称

吴彬

心得体会

  • 所有程序共享内存资源,这容易造成很多问题。虚拟内存用于管理内存,保护内存访问,对程序无感知
    物理寻址流程:CPU 执行加载指令时,生成一个物理地址,通过内存总线传递给主存。主存取出物理地址对应的内存,并返回给 CPU,CPU 将其存放在寄存器中
  • 虚拟寻址流程:CPU 执行加载指令时,生成一个虚拟地址,通过内存总线传递给主存,主存将其转换成物理地址(页表)。主存取出物理地址对应的内存,并返回给 CPU,CPU 将其存放在寄存器中。转换过程叫做地址翻译 address translation。这个过程增加了一个虚拟内存地址到物理地址的映射,就是我们平时所说的页表。
  • 虚拟内存:线性地址空间是一个连续的非负整数集合,可以根据需要自由定义其大小和范围(线性空间)
    虚拟内存会被分割成固定大小的虚拟页,物理内存对应分割为物理页,大小与虚拟内存一致
    虚拟页存在三种状态:未分配,缓存(到物理页),未缓存(到物理页)。
    页表 page table 存放在内存(DRAM)中,记录虚拟页到物理页的映射关系。地址翻译硬件转换地址时都会读取页表,而操作系统负责维护这个页表,以及在磁盘和内存中来回传送页。

所在小组

第三组

组内昵称

kippa

心得体会

  • 程序执行中的两个控制流 —— 跳转和调用,但是这只是对于一个程序内部的控制,如果系统本身发生变化或者程序需要和系统交互,就需要新的控制方式,异常控制流(ECF)
  • 用户代码通系统内核提供的接口将异常号传递给内核,内核通过内置的异常表决定采取的行动

  • 进程的两个关键抽象

逻辑控制流,通过上下文切换让每个程序好像单独占用处理器,上下文切换保存的状态包括:存放在内存中的程序代码和数据、栈和寄存器、PC、环境变量等

私有地址空间,通过虚拟内存让每个程序感觉在单独占用内存,每个虚拟地址空间都有相同的通用结构

  • 进程控制

创建一个子进程,除了返回的PID(进程ID)不同,其余全部相同。两者互不影响,并发执行,fork返回两次,一次返回到父进程,一次返回到子进程,fork返回两次,一次返回到父进程,一次返回到子进程
当子进程完成后,会发送一个信号给父进程让他来回收自己

所在小组

第六组

组内昵称

慎思明辨笃行

你的心得体会

第八章 异常控制流(8.5信号)

一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。

低层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。

8.5.2发送信号

进程组:每个进程都只属于一个进程组,进程组是由一个进程组ID来标识的。默认的,一个子进程和它的父进程同属于一个进程组。
在任何时刻,至多只有一个前台作业和0个或多个后台作业。外壳为每个作业创建一个独立的进程组,一个作业对应一个进程组。

8.5.3接收信号

进程可以通过使用signal函数来修改和信号相关的默认行为。唯一的例外是SIGSTOP和SIGKILL,它们的默认行为不能被修改。

8.5.4信号处理问题

当一个程序捕获多个信号时,容易有一些细问问题:

第九章 虚拟存储器(9.1~9.5)

需要知道:

  • 虚拟存储器是硬件异常,硬件地址翻译,主存和磁盘文件,内核软件的完美交互
  • 为每一个进程提供一个大的,一致的和私有的地址空间
  • 将主存作为磁盘地址空间的高速缓存
  • 保护每个进程的地址空间不被其他进程破坏

虚拟存储器遍布在计算机系统所有层次,硬件异常,汇编器,链接器,加载器,共享对象,文件和进程中扮演重要角色

虚拟存储器是危险的:

引用变量,间接引用指针,调用malloc动态分配程序,就会和虚拟存储器交互

如果使用不当,将遇到危险复杂的与存储器有关的错误:段错误,保护错误

物理寻址:

计算机主存被组成为m个连续的字节大小的单元数组,每个字节地址叫做物理地址;

cpu访问存储器最自然方式是使用物理地址,该方式成为物理寻址

虚拟寻址

cpu生成一个虚拟地址,来访问主存

地址翻译

将虚拟地址转为物理地址就叫做地址翻译

地址翻译需要cpu和操作系统之间的合作

​ 主要利用储存在主存中的查询表来动态翻译虚拟地址
​ 查询表则由操作系统进行管理

地址空间

地址空间就是一个非负整数地址的有序集合

如果地址空间中整数连续,则成为线性地址空间

一个地址空间大小由表示最大地址需要的位数来描述

虚拟地址空间就是在一个带虚拟存储器的系统中,cpu从一个有N=2^n个地址的地址空间中生成虚拟地址,这个地址空间成为虚拟地址空间

那当然也有物理地址空间,与系统中物理存储器的M=2^m个字节对应

所在小组

第六组

组内昵称

之昂

心得体会

  • 虚拟寻址内存

    CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址,讲一个虚拟地址转换为物理地址的任务叫做地址翻译。和异常处理一样,地址翻译需要CPU硬件和操作系统之间紧密相连。

d9e8b9a2255ccef64b3fda5e2aac025

  • 地址空间:非负整数地址的有序集合

  • 虚拟内存作为缓存的工具

    任意时刻,虚拟页面的集合都分为三个不想交的子集:

    (1)未分配的:VM系统还未分配(或者创建)的页。未分配的块没有任何数据和它们相关联,因此不占用任何磁盘空间。

    (2)缓存的:当前已缓存在物理内存中的已分配页。

    (3)未缓存的:未缓存在物理内存中的已分配页。
    b4eecbdad73f7fd3c0921352a7db692

  • 虚拟内存作为内存管理的工具

    ​ 按需页面调度和独立的虚拟地址空间的结合,对系统中内存的使用和管理造成了极大影响。VM简化了链接和加载、代码和数据共享,以及应用程序的内存分配。

  • 虚拟内存作为内存保护的工具
    d397117fba5a648f8aa3f00f1d52b2b

所在小组

第四组

组内昵称

彳亍

你的心得体会

回收子进程:

内核并不是立即把终止的进程从系统中清除->终止但还未被回收的进程称为僵死进程(不运行,但仍消耗系统内存资源)(zombie);init进程的PID为1,系统启动时由内核创建,它不会终止,是所有进程的祖先->内核会安排init进程去回收孤儿进程;waitpid、wait->P516;waitpid返回已终止子进程的PID时,这个进程已经被回收;

逐级缓存的思想。

(1)前有硬件上弥补CPU与内存间速度差距的SRAM高速缓存;

(2)现有软件上虚拟内存系统中页面的调度(缓存PTE的TLB、SRAM、DRAM、磁盘)(在硬件上缓存的不止指令和数据,还有虚拟寻址用的页表、页表条目、虚拟页)(页作为磁盘和较高层的主存之间的传输单位)(主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址)

(3)再细到对内存空闲块的管理,页是分类快速“逐级”索引的思想,划分大小类级别,维护一个空闲链表数组。

所在小组

第二组

组内昵称

可可

心得体会

虚拟寻址

  1. 内存我们可以看做一个连续的字节数组

通过MMU(memory management unit) 计算机把虚拟地址转变为虚拟地址

虚拟内存作为缓存工具

  1. 虚拟内存在磁盘
  2. 磁盘的开销很大,引入DRAM老缓存虚拟内存
  3. DRAM写回策略为写回,而不是直写(简单说这样减少开销)
  4. DRAM与虚拟内存直接全相联

这里虚拟内存做为媒介存储这真正的数据,也和物理内存打着交道。

页表

位于内存的页面,由操作系统维护

  1. 表示某个页是否缓存在页中

命中

  1. OS → PTE → PP → return address

缺页

  1. OS->PTE->VP->PP->return address
    1. 可能会涉及写回

内存管理

操作系统为每个进程提供了一个独立的页表

  1. 独立的地址空间,这样我们不用关心代码和数据的实际地址
  2. 内存分配, 连续的虚拟地址可以再不连续的物理内存上,而这一切都由OS保证

Q: vp → pp如何进行地址翻译

内存保护

通过在pte上加一些特殊标志位来规范全县

地址翻译

  1. n位虚拟地址 = VPO + VPN
  2. VPN +PTE → PPN
  3. PPN-> Address + PPO = 具体地址

TLB(加速)

不是改进了什么方法,而是改变了位置

把内存中的PTE缓存进MMU中的TLB

多级页表

扛不住的内存

  1. PPN来自最后一个
  2. 多个页表大小不一

内存映射

fork share都变的得心应手

所在小组

第五组

组内昵称

郑伟钊

心得体会

第八章,异常控制流

1.异常:异常是异常控制流的一种形式,它由硬件和操作系统实现。

在任何情况下,处理器检测到有事件发生,会通过一张异常表,进行一个过程进程调用(异常处理程序)

2.系统调用错误,通常返回 -1,并且设置全局整数变量来表示什么错误。

3.子进程可以得到父进程用户级级虚拟地址空间相同的一个副本(数据/代码段/堆/共享库/用户栈,子进程还能获得父进程的任何打开文件描述符相同的副本(子进程可以读写父进程任意打开的文件)。

4.子进程结束,内核将子进程退出状态传给父进程。

5.Linux 的信号表

20201031161117.jpg

6.Linux 提供了控制和操作进程的有效工具

  • PS:列出当前的进程(包括僵尸进程)
  • TOP: 打开关于当前进程资源的使用情况
  • PMAP: 显示进程的内存映射情况
  • STRACE:打印一个正在进行的进程和它的子进程调用的每个系统的调用轨迹

所在小组

第五组

组内昵称

肖思成

你的心得体会

  • Linux 信号是一种更高层的软件形式的异常,它允许进程和内核中断其他进程
  • 一个信号就是一条小消息,它通知进程系统中发生了一个某种类型的事件
  • 每种信号类型都对应于某种系统事件
  • 发送一个信号到目的进程由两个不同步骤组成:发送信号和接受信号。
  • 发送信号:内核通过更新目的进程上下文中的某个状态,发送一个信号给目的进程。一个进程可以发送信号给自己。
  • 发送信号的两种原因:① 内核检测到一个系统事件,比如除零错误或者子进程终止。② 一个进程调用了 kill 函数,显式的要求内核发送一个信号给目的进程
  • 接受信号:进程可以忽略这个信号,终止或者通过执行一个称为信号处理程序的用户层函数捕获这个信号。
  • 一个发出而没有被接收的信号叫做待处理信号
  • 在任何时刻,一种类型至多只会有一个待处理信号
  • 一个进程可以有选择的阻塞接受某种信号。
  • 一个待处理信号最多只能被接收一次
  • Unix 系统提供了大量向进程发送信号的机制,所有这些机制都是基于进程组这个概念
  • 每个进程都只属于一个进程组,进程组是由一个正整数进程组 ID 来标识的

所在小组

静默组

组内昵称

清风环佩

心得体会

  1. 异常控制流存在于系统的每个层级,最底层的机制称为异常 ,用以改变控制流以响应系统事件,通常是由硬件的操作系统共同实现的。更高层次的异常控制流包括进程切换、信号和非本地跳转,也可以看做是一个从硬件过渡到操作系统,再从操作系统过渡到语言库的过程。进程切换是由硬件计时器和操作系统共同实现的,而信号则只是操作系统层面的概念了。
  2. 异步异常称之为中断,是由处理器外面发生的事情引起的。比较常见的中断有两种:计时器中断和 I/O 中断。
  3. 进程是计算机科学中最为重要的思想之一,进程才是程序的真正运行实例。因为进程给每个应用提供了两个非常关键的抽象:一是逻辑控制流,二是私有地址空间。逻辑控制流通过称为上下文切换的内核机制让每个程序都感觉自己在独占处理器。私有地址空间则是通过称为虚拟内存的机制让每个程序都感觉自己在独占内存。这样的抽象使得具体的进程不需要操心处理器和内存的相关适宜,也保证了在不同情况下运行同样的程序能得到相同的结果

所在小组

第七组

组内昵称

高华

心得体会

异常做为异常控制流的一种形式,一部分由硬件实现,一部分由软件实现;

信号是一种更高层的软件形式的异常,一个信号就是一条小消息,通知进程系统中发生了一个某种类型的事件;

虚拟内存提供了三个重要的能力:

  1. 它将主存看作是一个存储在磁盘上的地址空间的告诉缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效的使用了主存
  2. 它为每个进程提供了一致的地址空间,从而简化了内存管理
  3. 它保护了每个进程的地址空间不被其他进程破坏

虚拟内存是沉默地、自动地工作的,不需要应用程序员的任何干涉,这是它成功的最重要的原因。

所在小组

第四组

组内昵称

魏琮

你的心得体会

9.虚拟存储器 为了更加有效地管理存储器且少出错,现代系统提供了对主存的抽象概念,叫做虚拟存储器(VM)。

虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互。
为每个进程提供一个大的,一致的和 私有的地址空间。
提供了3个重要能力。
将主存看成磁盘地址空间的高速缓存。
只保留了活动区域,并根据需要在磁盘和主存间来回传送数据,高效使用主存。
为每个进程提供一致的地址空间
简化存储器管理
保护了每个进程的地址空间不被其他进程破坏。
程序员为什么要理解它?
虚拟存储器是中心的。
遍布在计算机系统所有层次,硬件异常,汇编器,连接器,加载器,共享对象,文件和进程中扮演重要角色。
虚拟存储器是强大的。
可以创建和销毁存储器片(chunk)
将存储器片映射到磁盘文件的某个部分。
其他进程共享存储器。
例子
能读写存储器位置来修改磁盘文件内容。
加载文件到存储器不需要显式的拷贝。
虚拟存储器是危险的
引用变量,间接引用指正,调用malloc动态分配程序,就会和虚拟存储器交互。
如果使用不当,将遇到复杂危险的与存储器有关的错误。
例子
一个带有错误指针的程序可以立即崩溃于段错误或者保护错误。
运行完成,却不产生正确结果。
本章从两个角度分析。
虚拟存储器如何工作。
应用程序如何使用和管理虚拟存储器。
虚拟内存作为缓存工具 在讲述这一小章之前,必须交代一下我对虚拟存储器概念的存疑。 原本我以为虚拟存储器=虚拟内存。 以下是虚拟内存的定义 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换 而在下面的定义我们可以看到CSAPP中认为虚拟存储器是存放在磁盘上的。 在此,我们姑且当做两者是不同的东西,以后有更深刻的理解,再思考。 缺页 在虚拟存储器的习惯说法中,DRAM缓存不命中称为缺页。 处理过程如下:

读取虚拟地址所指向的PT。
读取PTE有效位,发现未被缓存,触发缺页异常。
调用缺页异常处理程序
选择牺牲页。
如果牺牲页发生了改变,将其拷贝回磁盘(因为是写回)
需要读取的页代替了牺牲页的位置。
结果:牺牲也不被缓存,需要读取的页被缓存。
中断结束,重新执行最开始的指令。
在DRAM中读取成功。
虚拟存储器是20世纪60年代发明的,因此即使与SRAM缓存使用了不同的术语。

块被称为页。
磁盘和DRAM之间传送页的活动叫做交换(swapping)或者页面调度(paging)。
有不命中发生时,才换入页面,这种策略叫做按需页面调度(demand paging)。
现代系统基本都是用这个

所在小组

第七组

组内昵称

李佳

心得体会

• 上下文切换:内核为每个进程维持一个上下文,重启一个被抢占的进程所需的状态。
• 调度:内核决定可以抢占当前进程,重新启动一个进程的决定。1.保存当前进程上下文。2.恢复某个被抢占的进程。3.将控制权交给这个新恢复的进程。
• 虚拟存储器:为每个进程提供一个大的,一致的和私有的地址空间,根据需要在磁盘和主存之间来回传送数据,保护了每个进程的地址空间不被其他进程破坏。
• 虚拟寻址:通过虚拟地址来访问主存,虚拟地址先转换为物理地址。
• 虚拟存储器,主存中每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。
• 未分配的页在物理存储器中不存在,未缓存的页在主存中不存在,缓存的当前缓存在物理存储中已分配。
• 当页未命中时,系统会牺牲一个页,将其修改为未缓存的状态,然后从磁盘拷贝需要的内容到存储器中随后返回。
• 虚拟存储器管理存储器:允许每个进程的存储器使用相同的基本格式,并且可以按照需要自动调入数据页
• 虚拟寄存器似的每个进程只能修改自己的虚拟页面,使得分离不同进程的私有寄存器变得容易。

所在小组

第四组

组内昵称

Murphy

心得体会

虚拟化的概念在计算机科学中是非常重要的,当你准备虚拟化一个资源的时候,你就要向请求该资源的用户展现这个资源的不同类型的视图,这种视图通常是资源的某种抽象。

我们可以通过干预和介入对资源的访问过程来完成虚拟化的过程。

磁盘是一种经典的例子。尽管磁盘的结构复杂,但是磁盘控制器给上层应用的视图是一系列的逻辑块。磁盘控制器就是拦截了内核发送的逻辑块转换为了实际的物理地址。

对于访问内存的指令的拦截,是由一个叫MMU的内存管理单元所完成的。

当CPU执行一个指令的时候,其访问的虚拟地址,这个虚拟地址会被MMU转换为实际的物理地址,然后对应我们想要的数据的物理地址。

使用MMU管理内存的优点?

  • 更为有效的使用主存(你可以将虚拟内存视为存储在磁盘上的字节序列,而主存DRAM就像是虚拟内存的缓存)
  • 更为简单的管理内存
  • 地址空间独立,防止其他进程访问,保护内存。

虚拟地址空间通常比物理地址空间大的多,且对于所有进程中,其看到自己的虚拟空间是相同的。这种简单易操作的模型正是MMU所想提供的。

虚拟内存中将数据分成页。每一个页都将分配一个数字,这些页面的一部分被存储在了物理的DRAM中,而有一些则没有。系统中存在map帮我们缓存虚拟内存到DRAM的映射。

DRAM在未命中的情况下就得去磁盘里面去取数据,这会是巨大的消耗。这时候,块的大小变成了一个关键的议题,块太小会导致经常性的未命中,而块太大则会导致内存不够用,也会导致未命中。

虚拟内存系统很少直接写入磁盘,而是会尽可能的延缓这个过程而增加运行速度。

负责映射的map称之为page table(PTE),存储在内存中,由内核维护,每个进程都有,key是虚拟页的编号,而value是其存储的物理地址。

如果未命中,就会导致缺页异常,然后从磁盘里把数据读到内存中,之后重新执行。如果内存满了,就要将一个内存页删掉再读。

虚拟内存找到对应物理地址的方法和高速缓存相近,是由虚拟页的号码和在此页中的offset所组成的,虚拟块中的偏移量和物理块中的offset是相等的。除此以外还有个valid记录此条信息是否合法。

因为page table是存储在内存中的,内存页毕竟还是不够快,所以我们很明显可以用SRAM缓存来加速这个过程,而这块SRAM就是TLB。

尽管本质上目前计算机的最高寻址位是2的48次方,但是这个数量依旧是过于庞大,对于一页2的12次方大小的页,需要2的36次方条记录才可以完成完备的映射。

所以在现代计算机中使用了多页表的方式,不存储大多数不用的地址空间,从而达到减少内存使用的目的。

所在小组
第一组

组内昵称
广州-盆栽

心得体会

这里

并发(concurrency/concurrent)和并行(parallel)

一个逻辑流的执行在时间上与另一个流重叠,称为并发流(concurrent flow).这两个流被称为并发的运行

  • 多个流并发地执行的一般现象被称为并发(concurrency)
  • 一个进程和其他进程轮流运行的概念称为多任务(multitasking)
  • 一个程序执行它的控制流的一部分的每一时间段叫做时间片(time slice)
  • 多任务也叫做时间分片(time slicing)
  • 一个逻辑流可以有多个不连续的时间片

并发流的思想与流运行的处理器核数或者计算机数无关。如果两个流在时间上重叠,那么它们就是并发的,即使运行在同一个处理器上

如果两个流并发地运行在不同的处理器核心或者计算机上,即为并行流(parallel flow)。它们并行地运行(running parallel ),且并行地执行(parallel execution)

brk: 重置堆顶

/proc 文件系统就许多内核数据结构的内容输出为一个用户程序可以读的文本文件的 层次结构

/sys 输出关于系统总线和设备的额外的底层信息

进程

  • 每个进程都有一个父进程
  • 当子进程终止时,父进程会得到通知并能取得子进程的退出状态
    命名空间–> PID, UTC

进程组

  • 每个进程也属于一个进程组
  • 每个进程主都有一个进程组号,改号等于该进程组组长的PID号
  • 一个进程只能为它自己或子进程设置进程组ID号
    进程组组长-groupleader

信号

更高层的软件形式的异常

  1. 一个待处理处理信号最多只能被接受一次
  2. 一个进程处理多个信号时,会出现阻塞
  3. 系统调用可以被中断

虚拟内存

页表

判定虚拟页是否缓存
即提供了怎么样的映射关系

你可以利用Linux的getrusage函数监测缺页的数量

虚拟内存作为内存管理的工具的优点

  • 简化链接,即每个进程看到的都是同样的映射关系,共享函数的偏移量也是一致的
  • 简化加载
  • 简化共享
  • 简化内存分配,程序看到的是连续的内存,但是可能在物理内存的多个不连续的位置,充分利用物理内存空间

所在小组
第六组

组内昵称
杨凯伟

心得体会

异常控制流(Exceptional Control Flow)是系统改变控制流的方式,用于发送系统事件消息。

异常

异常是 ECF 的一种形式,它一部分由硬件实现,一部分由操作系统实现。异常的处理需要硬件和软件紧密合作。系统中可能的每种类型都分配了一个唯一的非负正数的异常号,一部分由处理器的设计者分配,其他号码由操作系统内核的设计者分配。

  • 中断(Interrupt):来自处理器外部的异常称作异步异常(Asynchronous Exception),也称作中断。引发中断的事件一般由处理器引脚电平的变化导致,比如数据到达或键盘按下Ctrl+C。系统无法预测中断何时到来,所以是异步的
  • 陷阱,程序执行系统调用(syscall)的方式。内核的代码与资源是用户级程序无法访问的。为了请求系统资源,用户级程序主动发起一个异常,使控制流切换到内核状态,调用系统资源。系统库提供的函数,如open,read等,实际上是系统调用的封装。
  • 故障,用户级程序执行某条指令时发生错误,比如除0,缺页,段错误(Segmentation Fault)等引发异常,有些是可恢复的,比如缺页,恢复异常时,这条指令重新执行。
  • 终止,如不可恢复的致命错误导致,一般是硬件错误。如段错误,会导致程序中止(Abort)。

进程

进程是程序可执行文件的实例化,因为可执行文件只存储一份在磁盘中,而可执行文件可以被加载到内存的不同位置产生多个进程。操作系统为进程提供了两个抽象:逻辑控制流(Logical Control Flow,即貌似独占的CPU资源)和私有的地址空间(虚拟内存)。

  • 子进程

新创建的子进程与父进程由相同的但是独立的地址空间(由相同的变量,但是改变变量的只不会影响对方)。

在进程中 frok 创建新进程是,父进程和子进程是并发运行的独立进程,是并发执行的,没有顺序保证。

子进程执行完后变成僵尸进程(Zombie),需要父进程回收资源。如果父进程比子进程更早退出,子进程成为init进程的子进程,被自动回收。如果父进程一直不退出,僵尸子进程在内存中越积越多,将导致内存泄漏。

信号

信号是一种软件形式的异常,它允许进程和内核中断其他进程。

  • kill -<signum> <pid>,当pid为负数,表示gpid(进程组 PID)

未处理信号不会排队的,所以不能使用信号来统计事件发生的次数。
如果两个类型 k 的信号发送给一个目的进程,而因为目的进程当前正在执行信号 k 的处理程序,所以信号 k 被阻塞了,那么第二个信号就简单的丢弃了。
关键思想是,如果存在一个未处理的信号就表明至少又一个信号到达了。

所在分组
第二组

组内昵称
文弱书生

心得体会

1.计算机主存是一个M个连续的字节大小的单元组成的数组,每个字节对应一个唯一的物理地址;
2.虚拟寻址,CPU通过生成一个虚拟地址来访问内存,虚拟地址在传输到内存之前会转换成物理地址;
3.地址空间是一个非负整数地址的有序集合;
4.虚拟内存可以作为缓存工具,在作为缓存工具时:
任意时刻,虚拟页面的集合都分为三个不相交的子集:
未分配的:虚拟地址还没分配的页。没分配的部分没有任何数据相关联,不占用任何磁盘空间。
缓存的: 当前已经缓存在物理内存的。
未缓存的:没缓存在物理内存中的已分配的页。
5.虚拟内存可以作为内存管理的工具。
好处是简化链接、简化加载、简化共享、简化内存分配。
6.虚拟内存可以作为内存保护的工具
计算机为操作系统提供控制内存访问的方法,不允许用户进程修改它的只读代码段。

所在小组

第六组

组内昵称

钟荣荣

你的心得体会

虚拟内存 1.理解虚拟内存的作用:虚拟内存在计算机各个层面都扮演了重要角色,理解它有助于理解计算机系统;熟练使用虚拟内存可以给应用程序助力;避免虚拟内存使用不当的错误;
2.物理和虚拟寻址:物理寻址看起来好像访问数组;虚拟寻址通过虚拟地址访问主存,先将虚拟地址翻译成物理地址;
3.地址空间:地址空间是一个非负整数的有序集合;地址空间的概念区分了数据对象和它们的属性;
4.虚拟页面的集合:未分配的:不占用任何磁盘空间;缓存的:当前已缓存在物理内存中已分配页;未缓存的:未缓存在物理内存中的已分配页

所在小组

第二组

组内昵称

陶鑫

心得体会

  • 异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。
  • 异常处理:1)异常表,当处理器检测到有事件发生时,它会通过跳转表,进行一个间接过程调用(异常),到异常处理程序。
    2)异常号,系统中可能的某种类型的异常都分配了一个唯一的非负整数的异常号。异常号是到异常表中的索引。
  • 异常的类别——中断、陷阱、故障和终止
  • 进程(操作系统层):逻辑控制流,私有地址空间,多任务,并发,并行,上下文,上下文切换,调度。 进程就是一个执行中的程序实例。系统中的每个程序都是* 运行在某个进程的上下文中的。进程提供给应用程序的关键抽象:a)一个独立的逻辑控制流 ;b)一个私有的地址空间
  • 信号(操作系统和应用程序之间):进程之间传送信号.一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。
  • 非本地跳转 c语言提供了一种用户级异常控制流形式,称为本地跳转。通过setjmp和longjmp函数来提供。
  • 为了更加有效地管理内存并且少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟内存(VM)。虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。
  • 前面提到在计算机系统中,主存在逻辑上是一个线性的字节数组,每个字节都有其唯一的地址。这里提到的地址即为物理地址。地址从0开始,其后是1,2,以此类推。CPU直接通过物理地址访问内存即为物理寻址。
  • 前面提到虚拟内存基本思想是把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。磁盘上的数据需被分割成块作为与主存之间的传输单元。虚拟内存被分割成的大小固定的块称为虚拟页(VP),大小为P=2p字节,同样的,物理内存被分割成物理页(VP),亦称页帧,大小也为P字节。

所在小组

第二组

组内昵称

叶王

心得体会

  • 信号是进程间通信的底层形式
    • Linux 有标准信号 32 个,从 32-63 的信号是实时信号
    • 发送信号的原因:
      • 硬件异常:如 0 作为除数,内核会发送 SIGFPE(信号值 8)
      • 软件异常:如进程终止时,内核会给父进程发送 SIGCHLE(信号值 17),窗口大小调整,应用程序会收到 SIGWINCH(信号值 28)
    • 写后台程序时经常会用到,比如做程序热重启
      1. 服务端启动时多开启一个协程用来监听关闭信号
      2. 当协程接收到关闭信号时,将拒绝接收新的连接,并处理好当前所有连接后断开
      3. 启动一个新的服务端进程来接管新的连接
      4. 关闭当前进程
  • 虚拟存储器为每个进程提供了一个一致的虚机的内存,让每个进程以为自己占用全部内存空间
    • CPU 上的存储器管理单元,通过内存里的查询表来动态翻译虚机地址,使虚机地址转换成适当的物理地址
    • DRAM 缓存不命中叫缺页,缺页本身是一种中断,与一般的中断一样,需要经过 4 个处理步骤
      1. 保护 CPU 现场
      2. 分析中断原因
      3. 转入缺页中断处理程序进行处理
      4. 恢复 CPU 现场,继续执行
    • 缺页的调度算法主要有 FIFO(先进先出)、LRU(最少使用)、OPT(最佳置换)
    • 跟生活中的二八准则一致,计算机充满了局部性法则,缺页调度有效的原因也是因为程序往往在一个很小的活动页面集合上工作(工作集)