版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信号处理程序示例voidint_handler(intsig){
safe_printf("Process%dreceivedsignal%d\n",getpid(),sig);exit(0);}voidfork13(){
pid_t
pid[N];
int
i,child_status;
signal(SIGINT,int_handler);for(i=0;i<N;i++)if((pid[i]=fork())==0){while(1);/*childinfiniteloop}for(i=0;i<N;i++){
printf("Killingprocess%d\n",pid[i]);kill(pid[i],SIGINT);}for(i=0;i<N;i++){
pid_t
wpid=wait(&child_status);if(WIFEXITED(child_status))
printf("Child%dterminatedwithexitstatus%d\n",
wpid,WEXITSTATUS(child_status));else
printf("Child%dterminatedabnormally\n",wpid);}}N=5信号处理程序示例voidint_handler(intsig){
safe_printf("Process%dreceivedsignal%d\n",getpid(),sig);exit(0);}voidfork13(){
pid_t
pid[N];
int
i,child_status;
signal(SIGINT,int_handler);for(i=0;i<N;i++)if((pid[i]=fork())==0){while(1);/*childinfiniteloop}for(i=0;i<N;i++){
printf("Killingprocess%d\n",pid[i]);kill(pid[i],SIGINT);}for(i=0;i<N;i++){
pid_t
wpid=wait(&child_status);if(WIFEXITED(child_status))
printf("Child%dterminatedwithexitstatus%d\n",
wpid,WEXITSTATUS(child_status));else
printf("Child%dterminatedabnormally\n",wpid);}}N=5信号处理程序示例voidint_handler(intsig){
safe_printf("Process%dreceivedsignal%d\n",getpid(),sig);exit(0);}voidfork13(){
pid_t
pid[N];
int
i,child_status;
signal(SIGINT,int_handler);for(i=0;i<N;i++)if((pid[i]=fork())==0){while(1);/*childinfiniteloop}for(i=0;i<N;i++){
printf("Killingprocess%d\n",pid[i]);kill(pid[i],SIGINT);}for(i=0;i<N;i++){
pid_t
wpid=wait(&child_status);if(WIFEXITED(child_status))
printf("Child%dterminatedwithexitstatus%d\n",
wpid,WEXITSTATUS(child_status));else
printf("Child%dterminatedabnormally\n",wpid);}}N=5《计算机系统》虚拟存储器概念
篇《计算机系统》课程教学组2025年春季学期43512简单内存系统示例地址翻译目标问题地址空间存储映射地址空间缓存内存管理内存保护虚存解决了什么问题地址翻译简单内存系统示例存储映射学习内容43512简单内存系统示例地址翻译目标问题地址空间存储映射地址空间本讲学习内容Q1:满足所有进程需要?Q2:内存如何管理?Q3:如何保护与共享?解决方案:增加一个层次……每个进程有其自己的私有存储空间
之前提及的问题均得以解决……
解决方案每一个进程有其自己的内存私有映像
“如何选择存储位置”“其他进程之间的存储空间不互相影响”使得每个进程都按需获得所需存储资源地址翻译
地址映射函数将私有地址映射到物理地址每一次加载或存储都会进行上述映射
上述映射即为虚拟存储器的核心,程序实际引用的是虚存地址虚存抽象程序实际引用的是虚存地址movl(%ecx),%eax概念上是很大的字节数组每个字节有自己的地址以多种类型的存储层次共同实现系统为“进程”提供私有的地址空间虚存抽象分配:编译器和运行时系统不同的程序保存在何处?在单一虚拟地址空间如何进行分配?为什么要使用虚存?为什么不直接使用物理内存?使用物理地址例如电梯、现代家电、显示屏等“简单”系统中的嵌入式微控制器0:1:M-1:MainmemoryCPU2:3:4:5:6:7:Physicaladdress(PA)Dataword8:...4使用虚拟地址例如:现代服务器、桌上电脑、笔记本电脑……
0:1:M-1:MainmemoryMMU2:3:4:5:6:7:Physicaladdress(PA)Dataword8:...CPUVirtualaddress(VA)CPUChip44100地址空间线性地址空间:连续的非负整数地址空间
{0,1,2,3…}虚拟地址空间:N=2n
虚拟地址
{0,1,2,3,…,N-1}物理地址空间:M=2m
物理地址
{0,1,2,3,…,M-1}明确区分数据data(字节)及其属性(地址)每个对象有多重地址内存的每个字节具有:
一个物理地址,一个或多个虚拟地址虚存功能
高效使用主存简化内存管理隔离地址空间43512简单内存系统示例地址翻译目标问题地址空间存储映射缓存内存管理内存保护虚存解决了什么问题本讲学习内容虚存作为缓存工具虚拟内存是存储在硬盘上的N个连续字节的数组硬盘上的内容缓存在物理内存(DRAM缓存)中这些缓存块称为页面(大小为P=2p字节)PP2m-p-1PhysicalmemoryEmptyEmptyUncachedVP0VP1VP2n-p-1VirtualmemoryUnallocatedCachedUncachedUnallocatedCachedUncachedPP0PP1EmptyCached0N-1M-10Virtualpages(VPs)storedondiskPhysicalpages(PPs)cachedinDRAMDRAM缓存组织结构DRAM缓存的组织结构源于未命中引起的巨大代价DRAM比SRAM慢大约10倍DRAM比硬盘(NAND为例)快大约1,000倍结论大页面:通常为4-8KB,甚至达4MB全相联任何虚存页VP都可以放在任何物理页PP中需要“大”映射功能-与CPU缓存不同高度复杂,昂贵的替换算法更为复杂精密,超出本课程的讨论范畴回写而非直写页表将虚拟页面映射到物理页面的页表条目(PTE)的数组保存于DRAM中的是每一个进程的核心数据结构nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP4Virtualmemory(disk)Valid01010101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3页命中Pagehit:引用的VM字就在物理主存中(DRAM缓存命中)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP4Virtualmemory(disk)Valid01010101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress页不命中Pagefault:引用的VM字不在物理存储器中(DRAM缓存不命中)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP4Virtualmemory(disk)Valid01010101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress页故障的处理页不命中引发页故障(一种异常)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP4Virtualmemory(disk)Valid01010101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress页故障的处理页不命中导致页故障页故障处理程序选择一个victim页被换出(如下图中的VP4)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP3Virtualmemory(disk)Valid01100101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress页故障的处理页不命中导致页故障页故障处理程序选择一个victim页被换出(如下图中的VP4)被中断的指令重新执行:页命中nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP3Virtualmemory(disk)Valid01100101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress局部性,虚存才能工作具有良好时间局部性的程序有较小的工作集程序倾向于访问称之为工作集的一组活跃虚页在强制不命中后,展示良好性能If(工作集size<主存空间size)抖动:页被不断换进换出,性能极差
If(SUM(工作集sizes)>主存空间size)01020304局部性页故障“页故障”何时发现?如何发现?执行每条指令都要访存(取指令、取操作数、存结果)(在保护模式下)每次访存都要进行逻辑地址向物理地址转换在地址转换过程中会发现是否发生了“页故障”?逻辑地址向物理地址的转换由硬件(MMU)实现,故“页故障”事件由硬件发现所有异常和中断事件都由硬件检测发现!异常中的“页故障”以下几种情况都会发生“页故障”缺页:页表项有效位为0地址越界:地址大于最大界限访问越级或越权(保护违例):越级:用户进程访问内核数据(CPL=3/DPL=0)越权:读写权限不相符(如对只读段进行了写操作)可通过读硬盘恢复故障不可恢复,称为“段故障(segmentationfault)”
假设在IA-32/linux系统中一个C语言源程序P如下所示:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知页大小为4KB,若在运行P对应的进程时,系统中无其他进程在运行,则:(1)对于上述三条指令的执行,在取指令时是否可能发生页故障?(2)在数据访问时分别会发生什么问题?(3)哪些问题是可恢复的?哪些问题是不可恢复的?看一个例子假设编译、汇编和链接后,第4、5和6行源代码对应的指令序列如下:48048300:c7052890040801000000movl$0x1,0x804902858048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40假设在IA-32/linux系统中一个C语言源程序P如下所示:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知页大小为4KB,若在运行P对应的进程时,系统中无其他进程在运行,则:(1)对于上述三条指令的执行,在取指令时是否可能发生页故障?(2)在数据访问时分别会发生什么问题?(3)哪些问题是可恢复的?哪些问题是不可恢复的?看一个例子假设编译、汇编和链接后,第4、5和6行源代码对应的指令序列如下:48048300:c7052890040801000000movl$0x1,0x804902858048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40正常的控制流为…、0x8048300、0x8048309、0x8048313、…可能的异常控制流是什么?假设在IA-32/linux系统中一个C语言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知页大小为4KB,若在运行程序P
对应的进程时,系统中无其他进程在运行,则:(1)对于上述三条指令的执行,在取指令时是否可能发生页故障?(2)在数据访问时分别会发生什么问题?(3)哪些问题是可恢复的?哪些问题是不可恢复的?一个例子假设编译、汇编和链接后,第4、5和6行源代码对应的指令序列如下:8048300:c7052890040801000000movl$0x1,0x80490288048309:c705a09f040803000000movl$0x3,0x8049fa08048313:c705402c050804000000movl$0x4,0x8052c40假设在IA-32/linux系统中一个C语言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知页大小为4KB,若在运行P对应的进程时,系统中无其他进程在运行,则:(1)对于上述三条指令的执行,在取指令时是否可能发生页故障?(2)在数据访问时分别会发生什么问题?(3)哪些问题是可恢复的?哪些问题是不可恢复的?一个例子假设编译、汇编和链接后,第4、5和6行源代码对应的指令序列如下:8048300:c7052890040801000000movl$0x1,0x80490288048309:c705a09f040803000000movl$0x3,0x8049fa08048313:c705402c050804000000movl$0x4,0x8052c40三条指令在读指令时都不会发生缺页,Why?它们都位于起始地址为0x8048000(即一个4KB页面的起始位置)的同一个页面,执行这三条指令之前,该页已经调入内存。因为没有其他进程在系统中运行,所以不会因为执行其他进程而使得调入主存的页面被调出到磁盘。因而都不会在取指令时发生页故障。
假设在IA-32/linux系统中一个C语言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知页大小为4KB,若在运行P对应的进程时,系统中无其他进程在运行,则:(1)对于上述三条指令的执行,在取指令时是否可能发生页故障?(2)在数据访问时分别会发生什么问题?(3)哪些问题是可恢复的?哪些问题是不可恢复的?一个例子假设编译、汇编和链接后,第4、5和6行源代码对应的指令序列如下:8048300:c7052890040801000000movl$0x1,0x80490288048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40假设在IA-32/linux系统中一个C语言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知页大小为4KB,若在运行P对应的进程时,系统中无其他进程在运行,则:(1)对于上述三条指令的执行,在取指令时是否可能发生页故障?(2)在数据访问时分别会发生什么问题?(3)哪些问题是可恢复的?哪些问题是不可恢复的?一个例子假设编译、汇编和链接后,第4、5和6行源代码对应的指令序列如下:8048300:c7052890040801000000movl$0x1,0x80490288048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40第4行指令取数据时是否发生页故障,Why?对a[10](地址0x8049028)的访问是对所在页面(首址为0x08049000)的第一次访问,故不在主存,缺页处理结束后,再回到这条movl指令重新执行,再访问数据就没有问题了。假设在IA-32/linux系统中一个C语言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知页大小为4KB,若在运行P对应的进程时,系统中无其他进程在运行,则:(1)对于上述三条指令的执行,在取指令时是否可能发生页故障?(2)在数据访问时分别会发生什么问题?(3)哪些问题是可恢复的?哪些问题是不可恢复的?一个例子假设编译、汇编和链接后,第4、5和6行源代码对应的指令序列如下:48048300:c7052890040801000000movl$0x1,0x804902858048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40第5行指令取数据时是否发生页故障,Why?对a[1000](地址0x8049fa0)的访问是对所在页面(首址为0x08049000)的第2次访问,故在主存,不会发生缺页。但a[1000]实际不存在,只不过编译器未检查数组边界,0x8049fa0处可能是x的地址,故该指令执行结果是x被赋值为3假设在IA-32/linux系统中一个C语言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知页大小为4KB,若在运行P对应的进程时,系统中无其他进程在运行,则:(1)对于上述三条指令的执行,在取指令时是否可能发生页故障?(2)在数据访问时分别会发生什么问题?(3)哪些问题是可恢复的?哪些问题是不可恢复的?一个例子假设编译、汇编和链接后,第4、5和6行源代码对应的指令序列如下:48048300:c7052890040801000000movl$0x1,0x804902858048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40第6行指令取数据时是否发生页故障,Why?地址0x8052c40偏离数组首址0x8049000
(0x9C40即40,000)已达4×10000
+4=40004个单元,即偏离了9个页面,很可能超出“读/写段“范围,故执行该指令时可能会发生保护违例。页故障处理程序发送一个“段错误”信号(SIGSEGV)给用户进程,用户进程接受到该信号后就调出一个信号处理程序执行,该信号处理程序根据信号类型,在屏幕上显示“段故障(segmentationfault)”信息,并终止用户进程。43512简单内存系统示例地址翻译目标问题地址空间存储映射缓存内存管理内存保护虚存解决了什么问题本讲学习内容虚存作为内存管理工具Keyidea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物相容反应驱动分子影像探针构建与生物分析的创新探索
- 生物炭输入对农田土壤重金属迁移的影响及机制探究
- 生物炭对北方寒区典型黑土水热环境效应的多维度解析与应用展望
- 生物炭与菌剂协同调控对猪粪气体排放影响的深度解析
- 2026年全球餐厅品牌25强报告-
- 生物油轻质组分水相重整制氢:工艺、机理与展望
- 2026福建福州市船政幼儿园教师招聘1人备考题库含答案详解(夺分金卷)
- 2026云南西双版纳勐腊海关招聘2人备考题库含答案详解(精练)
- 2026四川九洲环保科技有限责任公司招聘运营专员1人备考题库含答案详解(综合题)
- 高中生通过大数据方法研究社交媒体对青少年价值观影响课题报告教学研究课题报告
- 人教版九年级化学上册《跨学科实践活动5:基于碳中和理念设计低碳行动方案》同步讲义(带答案解析)
- 库房提货协议书范本
- JJG1036-2022天平检定规程
- 2025至2030中国汽车租赁行业发展现状及前景趋势与投资报告
- 箱涵结构和配筋计算算表(Excel输入数据自动计算得到计算书)
- 抗体效价与免疫记忆持久性关联-洞察及研究
- 2025小学五年级英语语法专项训练题
- 幼儿园数学启蒙教学活动计划
- 2026年中考数学压轴题专项练习-垂美四边形模型(学生版+详解版)
- 水培蔬菜培训课件
- 2025年中煤集团笔试题目及答案
评论
0/150
提交评论