
操作系统真相还原
文章平均质量分 74
得过且过的勇者y
万丈高楼平地起,勿在浮沙筑高台
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
x86的内存寻址方式
我们知道不同的进程之间看到的虚拟地址范围是一样的,所以多个进程下,不同进程的相同的虚拟地址可以映射不同的物理地址。即所有的段的基地址都是0,段长4G。所以说起来是分段,实际上等于没分了,再加上段的基地址全部是0,那进行地址翻译的时候,对于任何一个给定的逻辑地址,只需要看它的偏移量就可以知道它在内存中的位置,不需要去查找段描述符表和进行基址加偏移的运算。当进程需要内存时,从内核获得的仅仅是虚拟的内存区域,而不是实际的物理地址,进程并没有获得物理内存(物理页面),获得的仅仅是对一个新的线性地址区间的使用权。原创 2023-08-27 01:46:47 · 1001 阅读 · 0 评论 -
CPU架构和指令集
地址总线的位数决定了CPU的寻址能力,它不一定和CPU位数相同,比如早期16位的CPU使用的是20位的地址总线,通过段地址的方式来实现20位的寻址。Intel从16位微处理器8086开始的整个CPU芯片系列,系列中的每种型号都保持与以前的各种型号兼容,主要有8086,8088(16位),80186,80286(过渡产品),80386,80486以及以后各种型号的Pentium芯片(32位CPU),通常所说的x86都是指32位CPU。x64是x86指令集的64位扩展,但它仍然兼容32位的x86指令集。原创 2023-08-26 21:53:41 · 1195 阅读 · 0 评论 -
操作系统——虚拟内存管理
这些区域只是说把相同属性的数据集中放在一起,但实际上进程使用的地址是其在这个虚拟空地址间中的地址,而不是具体的堆、段等这些分区的偏移地址(这就是前面说到的和段式管理是不同层次的概念,段式管理中进程使用的数据地址是相对于段的偏移量,而这里的五个区域是段中自行划分的,只是一个抽象的概念)。在Linux系统中虽然保留了段机制,但是所有的程序的段地址都定死为0-4G,所以虽然逻辑地址和线性地址是两种不同的地址空间,但在Linux中逻辑地址就等于线性地址,它们的值是一样的(因为段基址为0)。原创 2023-07-16 21:54:47 · 1518 阅读 · 0 评论 -
操作系统相关问题——应用程序和操作系统怎么配合
是内核的代码而不是用户及程序在内核的代码,用户代码不可能在内核中存在,所以“用户态和内核态”是相对于CPU而言的。当应用程序陷入内核之后,自己已经下CPU了,以后发生的事情应用程序完全不知道,此时它的上下文环境已经被保存到了自己在内核态的的栈中了,CPU上运行的程序已经是内核程序。库中提供的函数其实都已经封装好了系统调用,需要下载源码才会看到。应用程序加上操作系统提供的功能才算是完整的程序,平时写的应用程序只能算是半成品,还需要调用操作系统提供的函数才能完整地做出一件事,而这些函数就是系统调用。原创 2023-05-07 16:41:28 · 690 阅读 · 3 评论 -
操作系统相关问题——软件是如何访问硬件的
显卡是显示器的适配器,CPU不直接和显示器交互,它只和显卡通信。显卡上有片内存叫显存,它映射到主机物理内存上的低端1MB的0xB8000-0xBFFFF。每个硬件都有自己的个性,操作系统不可能及时更新各种硬件的驱动方法(不可能刚出某个新硬件,OS开发者就开始为其编写驱动,这显然不现实)。,CPU访问外设就是访问IO接口,由IO接口将信息传给另一端的外设,也就是说CPU从来不知道有这些设备的存在,它只知道自己操作的IO接口。,这种映射让CPU访问外设的内存就如同访问主板上的物理内存一样。原创 2023-05-07 16:40:59 · 666 阅读 · 0 评论