没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
(1)虚拟寻址
(2)虚拟内存作为缓存工具
(3)页表
使用虚拟寻址,CPU通过生成一个虚拟地址(Virtual Address, VA)来访问主存,这个虚拟地址在被送到内存之前先转
专换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译(address trar nslation)。
磁盘数据(分块)>缓存在主存中>虚存(虚拟页VP)丶物理内
存(DRAM,PP)
虚拟页面:
缓存:有效位1,地址字段表示DRAM中物理页起始位置
未缓存:有效位0,地址字段非null则表示虚拟页在磁盘
中的起始位置
未分配
缓存
未缓存
页表(page table):存放在物理内存的数据结
构,是页表条目(PTE)数组。将虚拟页映射到
物理页。
页命中:CPU想读VP2虚拟内存的一个字时,VP2缓存在
DRAM中,地址翻译硬件将虚拟内存地址作为索引定位PTE2,
并从内存中读取,因为设置了有效位,就知道VP2缓存在内存
中了,使用PET2中的物理内存地址即PP1中缓存页的起始位
置,就可以构造物理内存地址了。
缺页:CPU想读取VP3中的一个字,地址翻译硬件从内存读取
PTE3,有效位0推断VP3未被缓存,触发缺页处理程序,选择
牺牲页,并做替换。并重新执行导致缺页的指令。
(4)虚拟内存作为内存管理工具
简化链接。独立的地址空间允许每个进程的内存映像使用相同的
基本格式。(0x400000开始丶可执行文件独立于物理内存)
简化加载。虚拟内存还使得容易向内存中加载可执行文件和共享对象文件。要把目标文件中.text和.data节加载到一个新创建的进程
中,Linux加载器为代码和数据段分配虚拟页,把它们标记为无效的(即未被缓存的),将页表条目指向目标文件中适当的位置。
简化共享丶简化内存分配
第一步:处理器生成一个虚拟地址,并把它传送给CPU
第二步:MMU生成PTE地址
并从高速缓存/主存上申请
(5)地址翻译
虚拟内存
⼀
≡
⼀
⼀
,
,
(6)利用TLB加速
TLB有T=2的t次方个组那么TLB索性(TLBI)为
VPN低t位组成,而TLB的标记位(TLBT)由VPN
剩余位组成。
如果有一个32位的地址空间、4KB的页面和一个4字节的PTE
那么总需要一个4MB的页表驻留在内存中。
多级页表:一级页表中每个PTE负责映射虚拟地址空间中一个
4MB的片,每个片由1024个连续页面组成。如果片i中每个页面
都未被分配,那么一级PTE i为空。之前一个页是分配了的,那
么PTE i指向一个二级页表的基址。
(7)多级页表
多级页表地址翻译:虚
拟地址被划分成k个
VPN和一个VPO每个
VPN i都是一个到第i级
页表的索引。由于TLB
能够将不同层次上页表
的PTE缓存起来,实际
上,带多级页表的地址
翻译并不比单级页表慢
很多。
(8)综合
假设CPU执行0x03d4处字节的加载指令
部分TLB
,
,
(1) 异常:控制流的突变,用来响应处理器状态中的某些变化
(2)异常处理:在系统启动时,操作系统分配和初始化一张称为异常表的
跳转表,表目 k 包含异常 k 的处理程序地址。(异常表基址寄存器)
(1)异常
与过程调用的区别
a)返回地址可能是当前指令,也可能是下一条指令
b) 处理器也把一些额外的状态压入栈中
c) 如果控制从用户转移到内核,所有项目都压到内核栈中。
d) 如果异常处理程序运行在内核模式下,意味着对所有系统资源都有完
全访问权限。
异常的类别:
a) 中断:异步发生的,是来自处理器外部的I/O设备的结果。
b) 陷阱:陷阱是有意的异常,陷阱最重要的用途是在用户程序和内核之
间提供一个 像过程一样的接口,叫做系统调用。用户程序经常需要向内
核请求服务,比如读 一个文件(read)。为了允许对这些内核服务的受控
的访问,处理器提供了一条特 殊的“syscall n”指令。
c) 故障:当故障发生时,处理器将控制转移给故障处理程序。处理程序
能够修正这个错误情况,它就将控制返回到引起故障的指令,从而重新
执行它。否则,返回到内核中的 abort 例程终止引起故障的应用程序。
d) 终止
X86-64 系统调用:所有到 Linux 系统调用的参数都是通过通用寄存器
而不是栈传递的。 按照惯例,寄存器%rax 包含系统调用号寄存
器%rdi、%rsi、%rdx、%r10、%r8 和%r9 包 含最多 6 个参数。系
统调用返回时%rax 包含返回值。(read 0;write 1;open 2;close 3;fork
57;execve 59;wait4 61;kill 62)
(2)进程
逻辑控制流和私有地址空间两个假象
-个逻辑流的执行在时间上与另一个流重叠,称为并发流。
上下文切换:内核为每个进程维持一个上下文(context)。上下文就是内
核重新启动 一个被抢占的进程所需的状态。它由一些对象的值组成,
这些对象包括通用目的寄存器、 浮点寄存器、程序计数器、用户栈、
状态寄存器、内核栈和各种内核数据结构,比如描述 地址空间的页
表、包含有关当前进程信息的进程表,以及包含进程已打开文件的信息
的文件表。(保存当前,恢复之前,控制转移)
当内核代表用户执行系统调用时,可能会发生上下文切换。如果系统调
用因为等待某个事件发生而阻塞,那么内核可以让当前进程休眠,切换
到另一个进程。比如,如果一个 read 系统调用需要访问磁盘,sleep 系
统调用,它显式地请求让调用进程休眠一般而言,即使系统调用没有阻
塞,内核也可以决定执行上下文切换(中断也可能导致系统调用)
进程控制
fork 创建子进程: 子进程得到与父进程用户级虚拟地址空间相同的(但
是独立的)一份副本,包括代码和数据段、堆、共享库 以及用户栈。子
进程还获得与父进程任何打开文件描述符相同的副本。调用一次,返
回两次:在父进程中,返回子进程的PID。在子进程中,返回 0。返回
值提供一个明确的方法来分辨程序是在父进程还是在子进程中执行。
waitpid 回收子进程:当一个进程由于某种原因终止时,内核不会立即
把它清除。进程被保持在一种已终止的状态中,直到被回收。(僵死
进程:终止未被回收,仍消耗系统的内存资源)。如果一个父进程终
止了,内核会 安排 init 进程成为它的孤儿进程的养父。
默认情况下(当 options=0 时),waitpid 挂起调用进程的执行,直到
它的等待集合(wait set)中的一个子进程终止。如果等待集合中的一个
进程在刚调用的时刻就已经终止了,那么 waitpid 就立即返回。返回
导致 waitpid 返回的已终止子进程的 PID。此终止子进程已经被回
收,内核会从系统中删除掉它的所有痕迹。(等待集合 :单独的子进
程 if pid>0,父进程所有的子进程 if pid=-1)
option:WNOHANG(如果等待集合中中的任何进程都还没有终止,立
即返回0)WUNTRACED(挂起调用进程的执行,等待集合中的一个进
程终止或者被停止)WCONTINUED:(一个进程终止或重新执行);
WIFEXITED(status) if 通过调用exit或者一个返回(return)正常终止,
就返回真。WIFSIGNALED(status):如果子进程是因为一个未被捕获的
信号终止的就返回真
按照惯例,argv[0]是可
执行目标文件的名字。
(3)信号
信号:信号提供了一种机制,通知用户进程发生了这些异常比如,如果一个进程试图 除以 0,
那么内核就发送给它一个 SIGFPE 信号(号码 8)。…一条非法指令, ⋯SIGILL 信号(号码
4)。⋯非法内存引用,⋯ SIGSEGV 信号(号码 11)。进程在前台运行,键入 Ctr1+C,发送一
个 SIGINT 信号(号码 2)给这个前台进程组中的每个进程,默认终止进程。
异常控制流
剩余11页未读,继续阅读
资源评论
aircraft1111
- 粉丝: 626
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功