【操作系统真象还原】第0章:一些迷惑的问题(上)

目录

1. 操作系统是什么

2. 你想研究到什么程度

3. 写操作系统,哪些需要我来做

4. 软件是如何访问硬件的

5. 应用程序是什么,和OS是如何配合到一起的

6. 为什么称为“陷入”内核

7. 内存访问为什么要分段

8. 代码中的代码段和数据段?和内存访问中的段有什么关系?

9. 物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别

10. 什么是段重叠

11. 什么是平坦模型

12. cs、ds这类sreg段寄存器,位宽是多少

13. 什么是工程,什么是协议

14. 为什么Linux系统下的应用程序不能在Windows系统下运行


1. 操作系统是什么

初步印象:统一管理计算机资源,避免用户重复造轮子

2. 你想研究到什么程度

基于某一公设,朝着自己的目标去学习、推导;

至于对该公设以下的疑问,不在目前目标的范畴之内,所以要学会不求甚解,专门的事有专门的人做,术业有专攻,可以了解,但不要本末倒置,不要忘记自己的初衷。

学无止境。。。

3. 写操作系统,哪些需要我来做

系统:就是各种功能组合到一起后,产生最终输出的组合物;

操作系统是管理资源的软件,能做什么要取决于主机上硬件的功能;

参考硬件手册,知道如何通过计算机指令来控制硬件。

4. 软件是如何访问硬件的

各种硬件适配设备,即IO接口,接口其实就是标准,只要大家生产的硬件遵循这个标准就能实现通用,操作系统也就不用为每一个新出现的硬件更新其驱动方法。(驱动是什么?

CPU 访问外部硬件的两种方式:(1) 将某个外设的内存 (如,显卡的内存——显存) 映射到一定范围内的地址空间中,(2) 通过IO接口 (内部有寄存器,也就是端口) 与外设通信。

5. 应用程序是什么,和OS是如何配合到一起的

应用程序和操作系统都是软件,CPU只负责去 cs:ip 寄存器指向的内存中取指令并执行;

某种编程语言的运行库:其编译器提供的一套库函数(其中有封装的系统调用)—代码集合;

完整的程序:应用程序+操作系统提供的功能;

系统调用:调用操作系统提供好的函数;

用户态:CPU运行在用户态(特权3级),执行用户程序代码;

内核态:CPU运行在内核态(特权0级),执行OS内核代码;

用户进程/应用程序 陷入内核态(指的是CPU的状态)是指:由于内部或外部中断发生,当前进程被暂时终止执行,其上下文被内核的中断程序保存起来后,开始执行一段内核的代码。

6. 为什么称为“陷入”内核

当用户程序欲访问系统资源时(无论是硬件,还是内核数据结构),它需要进行系统调用,这样 CPU 便进入了内核态,也称管态,开始执行内核代码—具有最高的特权级0。

陷入内核

7. 内存访问为什么要分段

内存按访问方式来看,其结构就如同下图的长方形带子,地址依次升高。

 内存是随机读写RAM设备,即访问其内部任何处,不需要从头开始找,只要直接给出其地址便可。

分段是内存访问机制,是给 CPU 用的访问内存的方式,只有 CPU 才关注段,因为最终定位内存还是需要实际的物理地址。

重定位:简单来说就是将程序中指令的地址改成另外一个地址,但该地址处的内容还是原地址处的内容。

CPU的地址处理单元:计算最终的物理内存地址。

8. 代码中的代码段和数据段?和内存访问中的段有什么关系?

代码段:为了让程序内指令接连不断地执行,要把指令全部排在一起,形成一片连续的指令区域;

指令:由操作码和操作数组成,操作数就是指程序中的数据;

数据段:把程序中的数据连续地排在一起存储形成的段落;

内存分段:指的是CPU为访问内存而采用的机制,称之为内存分段机制;

程序分段:是软件中人为逻辑划分的内存区域,它本身也是内存,所以处理器在访问该区域时,也会采用内存分段机制,用段寄存器指向该区域的起始地址。

9. 物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别

物理地址:即物理内存真正的地址,具有唯一性,不管在什么情况下,CPU最终都要以物理地址的形式去访问内存;

在保护模式下,最开始提供的 “段基址” 是一个称为选择子的东西,其本质是个索引,通过它能在GDT中找到对应的段描述符,该描述符记录了该段的起始、大小等信息,这样便得到了真正的段基址;通过段部件的计算,得到一个线性地址;若没有开启地址分页功能,此线性地址就被当作物理地址来用,可直接访问内存; 若开启了分页功能,此线性地址又多了一个名字,就是虚拟地址,(虚拟地址、线性地址在分页机制下都是一回事) ,虚拟地址要经过页部件转换成具体的物理地址,这样 CPU 才能将其送上地址总线去访问内存。(它们都用来描述程序或任务的地址空间)

无论在实模式(段基址在默认的段寄存器中)或是保护模式下(段基址在默认的段选择子寄存器指向的段描述符中),段内偏移地址又称为有效地址,也称为逻辑地址,这是程序员可见的地址。

10. 什么是段重叠

CPU 的内存寻址方式是:给我一个段基址,再给我一个相对于该段起始位置的偏移地址,我就能访问到相应内存(它并不要求一个内存地址只隶属于某一个段,或许在保护模式下会有相关访问限制?)。

11. 什么是平坦模型

平坦模型是相对于多段模型来说的,其本质就是指的一个段,并且用这一个段就能够访问到硬件所支持的所有内存(其实就是把整个物理内存当成一个段)。

12. cs、ds这类sreg段寄存器,位宽是多少

在段寄存器中所表达的都是指向的段在哪里

32位CPU中:

16位实模式—CS、DS、ES、SS中的值为段基址;

32位保护模式—装入段寄存器的不再是段地址,而是“段选择子” Selector),选择子也是数值,其依然为16 位宽度。

所以,在 32位 CPU 中, sreg 无论是工作在 16 位的实模式,还是 32 位的保护模式,用的段寄存器都是同一组,并且在 32 位下的段选择子是 16 位宽度,综上所述,sreg 都是 16 位宽。

(16位,32位,64位)

13. 什么是工程,什么是协议

软件中的工程是指开发一套软件所需要的全部文件,包括实际代码配置环境

协议是一种大家共同遵守的规约,主要用来实现通信、共享、协作:起初是为避免大家各干各的,无法彼此调用对方成果的情况,从而给大家统一一种接口,一组数据调用或者分析的约定;从而实现了彼此兼容。

14. 为什么Linux系统下的应用程序不能在Windows系统下运行

可执行文件的格式、系统API等不同。

读完半章,深刻体会到还是需要一些汇编基础的~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值