2-4小时突击操作系统(3)

本节内容:地址转换、分段、空闲空间管理

地址转换

       受限直接访问LDE:让程序运行的大部分指令直接访问硬件,只在一些关键点(如进程发起系统调用或发生时钟中断)由操作系统介入,来保持对硬件的控制。

       地址转换:硬件对每次内存访问进行处理(即指令获取、数据读取或写入),将指令中的虚拟地址转换为数据实际存储的物理地址。

       动态重定位:每个cpu需要两个硬件寄存器:基址base寄存器和界限bound寄存器,这组基址和界限寄存器,让我们能够将地址空间放在物理内存的任何位置,同时又能确保进程只能访问自己的地址空间。统称为内存管理单元MMU

       128: movl 0x0(%ebx), %eax

       程序计数器(PC)首先被设置为128。当硬件需要获取这条指令时,它先将这个值加上基址寄存器的32KB(32768),得到实际的物理地址32896,然后硬件从这个物理地址获取指令。

       界限寄存器提供了访问保护,在上面的例子中,界限寄存器被置为16KB。如果进程需要访问超过这个界限或者为负数的虚拟地址,CPU将出发异常。

虚拟地址

 

物理地址

0

16KB

1KB

17KB

3000

19384

4000

错误(越界)

       操作系统问题:

       第一,在进程创建时,操作系统必须采取行动,为进程的地址空间找到内存空间。

       第二,在进程终止时(正常退出,或因行为不端被强制终止),操作系统也必须做一些工作,回收它的所有内存,给其他进程或者操作系统使用。

       第三,在切换进程时,操作系统必须保存和恢复基址寄存器和界限寄存器。

       第四,操作系统必须提供异常处理程序,或要一些调用的函数。

操作系统@启动

硬件

 

初始化陷阱表

 

 

 

记住一下地址:

系统调用处理程序

时钟处理程序

非法内存处理程序

非常指令处理程序

 

开始中断时钟

 

 

 

开始时钟,x ms后中断

 

初始化进程表

初始化空闲列表

 

 

操作系统@运行

硬件

程序(用户模式)

为了启动进程A

 在进程表中分配条目

 为进程分配内存

 设置基址/界限寄存器

 从陷阱中返回(进入A

 

 

 

恢复A的寄存器

转向用户模式

跳到A(最初)的程序计数器

 

 

 

进程A运行

 获取指令

 

转换虚拟地址并执行获取

 

 

 

执行指令

 

如果显示加载/保存

 确保地址不越界

 转换虚拟地址并执行

 加载/保存

 

 

 

……

 

时钟中断

转向内核模式

跳到中断处理程序

 

处理陷阱

调用switch例程

 将寄存器A保存到进程结构A(包括基址/界限)

 从进程结构B恢复寄存器B(包括基址/界限)

从陷阱返回(进入B

 

 

 

恢复B的寄存器

转向用户模式

跳到B的程序计数器

 

 

 

进程B运行

 执行错误的加载

 

加载越界

转向内核模式

跳到陷阱处理程序

 

处理本期报告

 决定终止进程B

 回收B的内存

 移除B在进程表中的条目

 

 

分段

分段:在MMU中引入不止一个基址和界限寄存器对,而是给地址空间内的每个逻辑段一对。在典型的地址空间里有3个逻辑不同的段:代码、栈和堆,因此

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要是介绍嵌入式软件开发岗位的相关知识和学习攻略,为大家提供一份笔试与面试手册。包括有嵌入式软件开发岗位介绍与学习攻略;校园招聘和offer疑惑问题的介绍;在笔试方面,如何刷题为笔试作准备,提供往年笔试真题;在面试方面,提供相关知识的复习重点,提供面试真题。包括有:华为、蔚来、文远、大疆、三一、深信服、亚马逊、Intel、百度、科大讯飞、OPPO、京东、中兴、比特大陆|算能、美团等等

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
点赞 5 评论
分享
牛客网
牛客企业服务