当前位置: 首页 > news >正文

平邑建设局网站首页建设商城网站视频教学

平邑建设局网站首页,建设商城网站视频教学,冠县做网站推广,商丘哪里有网站建设【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》#xff0c;内容非常棒#xff0c;墙裂推荐#xff1b; 【1】 内存使用 【1.1】程序加载到内存 1#xff09;内存使用#xff1a;将程序放到内存中#xff0c;PC寄存器指向开始地址#xff1b; 2…【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》内容非常棒墙裂推荐 【1】 内存使用 【1.1】程序加载到内存 1内存使用将程序放到内存中PC寄存器指向开始地址 2把程序加载到内存 【图解】 _entry入口程序的地址是0Call 40 表示调用偏移量为40的函数 问题 上述代码是存储在磁盘上的加载到内存后call 40 如果还是调用偏移量为40的函数就是有问题的因为操作系统程序在内存中从0地址开始所以call 40调用会报错 解决方法 call 40中的40是相对地址需要修改为 call entry基址40如entry基址是1000则修改为 call 1040 以上修改程序中的内存地址的操作叫做重定位; 3程序加载到内存的过程 需要找一段空闲内存其基址为A将磁盘上的程序加载到这段内存执行重定位修改程序中的内存地址重定位的具体做法是把载入的这段程序中的所有内存偏移量统统加上空闲内存的基址A 然后程序取指执行程序正常运行起来内存也就被顺利使用了 4什么时候完成重定位 1编译时对于嵌入式系统可以在编译时完成重定位但不灵活2载入时程序加载到内存的时候比较灵活非嵌入式系统一般都采用载入时进行重定位 如程序从磁盘载入到内存时程序中的内存地址地址偏移量统统加上程序所在基址 4.1重定位优缺点 编译时重定位的程序只能放在内存固定位置死板编译时需要确定存放程序的空闲内存的基址载入时重定位的程序一旦载入内存就不能动了灵活载入时才确定存放程序的空闲内存的基址补充 补充140是逻辑内存地址是内存相对地址而1040是物理内存地址是内存绝对地址补充2无论编译时重定位还是载入时重定位一旦重定位操作后程序指令操作的内存地址偏移量是不能够修改的这又引入了新的问题 很多时候程序载入内存后还是会移动的即业务场景是程序在运行过程中其操作的内存地址偏移量需要变化的如程序所在内存页的换入换出操作 5一个重要概念交换swap 初始态 内存基址 内存载入的进程 磁盘存储的进程 2000 进程2 进程3 1000 进程1 第1次Swap后 内存基址 内存载入的进程 磁盘存储的进程 2000 进程2 进程1 1000 进程3 第2次Swap后 内存基址 内存载入的进程 磁盘存储的进程 2000 进程1 进程2 1000 进程3 Swap的意思是 内存空间小磁盘空间大。当内存装不下进程3时会先把进程1换出到磁盘再把磁盘上的进程3换入内存简单说swap指的是进程在内存与磁盘间换入换出的操作对进程1的多次换出换入操作其内存地址或基址肯定会发生改变这就造成程序指令操作的内地地址也会发生改变所以在编译时或载入时进行重定位会导致swap后的进程执行错误 所以应该是运行时重定位而不是编译时或载入时进行重定位 【1.2】运行时重定位   1运行时重定位定义指的是 只有当执行指令的时候才把指令的内存偏移量与基址相加得到操作数的内存地址这样无论进行多少次swap运行时重定位的内地地址都是正确的 2地址翻译也叫重定位 运行时重定位也叫地址翻译每执行一条指令都要从逻辑地址算出物理地址每次swap后进程的内存基址都会修改修改后的内存基址base存放在进程结构体PCB里面即初始态下进程1的base等于1000第2次swap后进程1的base等于2000这样就能够正确计算指令中的内存地址偏移量对应的绝对物理地址补充当进程运行时pcb中存储的进程基址base会送入基址寄存器存储以便后续计算 3小结程序如何使用内存 步骤1在内存中找到一段空闲内存并定位基址base这段空闲内存的起始地址并送入该进程pcb进行存储步骤2把程序放入步骤1申请的空闲内存中以base为起始地址步骤3进程调度或上下文切换时pcb里的base基址会送入基址寄存器存储步骤4每执行一条指令的时候都进行地址翻译重定位即把内存地址偏移量加上基址base得到实际的物理内存地址这个物理内存地址或者存放了程序指令或者是程序操作数 经过以上步骤程序就执行起来了 【例】多进程执行时基地址切换 步骤1初始态 进程1的基地址为2000进程2的基地址为1000步骤2cpu执行进程1进程1的pcb存储的基址2000送入基址寄存器PC寄存器寻址到指令 mov ax,[100]并送入IR寄存器步骤3执行指令mov ax,[100]时把100偏移量与基址2000相加得到操作数的物理内存地址基址寻址步骤4cpu从进程1切换到进程2 switch 切换后进程2的pcb存储的基地址1000送入基址寄存器这样后面执行的指令的操作数地址的基址都修改为1000了达到进程切换后 逻辑地址能够正确翻译为物理地址的目的【2】内存分段 1一个程序由若干部分段组成每个段有各自的特点如主程序变量集函数库动态数组栈等 2每个部分或段中程序的内存地址偏移量都是相对于所在段的段基址的相对地址 3如何定位具体指令或数据 段号, 段内偏移 【例】mov [es:bx], ax 需要把以es为段基址bx为偏移量的逻辑地址翻译为物理内存地址 4程序分段对于存储的好处分段存储采用的是分治思想 好处1不是将整个程序放入内存而是将各段分别放入内存提高内存利用率好处2在做swap时不是把整个进程换入或换出而是把进程的某个段换入或换出提高了swap效率且减少了swap次数好处3 程序段或代码段是只读的变量集数据段是可写的分段存储可以避免代码被误写的场景5程序采用分段存储后每个段都有自己的基址 所以进程的pcb需要存储对应程序多个段的段基址如进程段表所示                                  表1 进程段表 段号 基址 长度 保护 0 180K 150K R 1 360K 60K R/W 2 70K 110K R/W 3 460K 40K R 补充段0的偏移量30与段1的偏移量30翻译得到的物理内存地址是不一样因为他们基址不一样 6GDT与LDT 可以把操作系统看做一个进程其对应的段表叫做 GDT结构同表1类似 而每个进程也有自己的段表用于存储程序多个段的基址如表1所示对应的结构体为LDT 小结在程序分段情况下使用内存的步骤 步骤1把程序分为多个段包括代码段数据段等步骤2每个段在内存中找到一块空闲内存并把这一段内存基址起始地址送入LDT表存储如表1结构LDT表就存储了该程序多个段的段基址步骤3把LDT表赋值给对应进程的PCB 至此程序已经被载入到内存中了最后PC寄存器根据pcb设置初值取指执行取指执行在每执行一条指令的时候 都查询LDT表找到段基址并把该段基址加上地址偏移量得到物理内存地址以进行后续的寻址操作补充 ldt表基址送入ldtr寄存器 【例】基于段基址的地址翻译 1进程1的LDT表数据 段序号 段基址 1 1000 0 3000 2进程2的LDT表数据 段序号 段基址 1 7000 0 5000 3指令 进程1的mov [cs:40], ax其中cs代码段寄存器的值为0即从ldt寻址下标为0的段基址3000所以cs:40得到的物理地址是3000403040进程2的mov [cs:40], ax其中cs代码段寄存器的值为0即从ldt寻址下标为0的段基址5000所以cs:40得到的物理地址是5000405040 因为当cpu从进程1切换到进程2时首先pcb从pcb1切换到pcb2所以pcb存储的ldt基址也会切换到ldt2并送入ldtr寄存器存储 所以一旦ldtr被赋予新值则段基址就会从进程1修改为进程2的段基址达到多进程切换运行的目的
http://www.pierceye.com/news/994698/

相关文章:

  • 大寺网站建设公司虚拟机可以做多个网站
  • 网站更新文章承德信息网
  • 做平面图片的网站网络钟点工
  • 网站的功能板块古镇中小企业网站建设
  • cms网站访问人数wordpress 修改网址
  • 万州网站推广1688拿货网
  • 西部数码做网站企业建设官方网站的目的
  • 做什么网站小程序网站开发怎么样
  • 西安建设网站电话号码上海公司查询官网
  • 空间除了可以做网站还能干什么北京王府井在哪个区
  • 网站的下载二维码怎么做网站地图 模板
  • 网站建设必要性阳江房产网0662
  • 南阳网站推广优化公司哪家好企业网站免费
  • jsp与asp做的网站网页微信登录不了
  • 网站开发登录要做哪些验证wordpress如何修改电子邮箱
  • 网站空间租用合同wordpress更改主题名称
  • 宁波网站推广找哪家wordpress 搜索标签
  • 购物网站建设特色沈阳公司网站制作
  • seo网站编辑是做什么的微博seo排名优化
  • 南通网站建设方案托管关键词优化排名首页
  • 哈尔滨全员核酸检测福建整站优化
  • 电子商务网站建设汉狮辽宁移动网站
  • 厂西建设厅网站网站流量依赖率
  • 手机能看的网站企业网站开发市场
  • 企业建设网站的过程世界各大网站搜索引擎提交入口
  • 网站建设云南做静态网站成本
  • 超低价的锦州网站建设网站开发有哪些软件有哪些
  • 中英文网站后台photoshop做网站
  • 优秀网站开发公司软件开发工具与环境实践报告
  • 茂名网站开发网站关键词优化步骤