• 操作系统还原真相阅读笔记(一)——答疑解惑


    说明

    1、本书真是好书 
    2、想到再补充

    一、为什么库函数可以调用系统调用

     之前看APUE的时候看到的,exit(库函数)实现实际上还是调用了系统调用sys_exit。按照常理来说,标准C库函数应该具有可移植性,为什么就能调用UNIX系统专用的系统调用呢?C语言编译器也是通用的啊,比如说这个exit函数我在VC下编译能不能通过呢? 
     这个问题其实一句话就大概解释清楚了,那就是C语言编译器提供库函数有一部分就是封装过的系统调用。这么说你可能还是有点蒙, 你还记不记得,安装编译器的时候需要选择系统,比如说GCC编译器就不能在windows下运行,VC也不能在Linux下运行。编译器根据不同的系统退出不不同的版本,因为编译器要使用系统的系统调用。

    二、物理地址、线性地址、逻辑地址和虚拟地址

     之前我在学习操作系统的时候,这几个地址一直搞不清楚,相信你也有这个困扰吧。我们知道,计算机运行有两个模式, 实模式和保护模式。这几个地址我们就在这两个模式下区分。

    1、实模式

     首先,不管在什么模式下,物理地址都是内存的真实地址,CPU可以根据这个地址直接访问内存,这没什么好困惑的。其次,不管在什么模式下,地址写成段地址:偏移量这样的都被称为逻辑地址,逻辑地址是程序员在程序中使用的地址。这里你可能要问了,为什么我的程序中从来没写过地址呢?因为只有汇编这类的低级语言才会在程序中直接写地址,高级语言都是编译器来做这件事。 
     在实模式下,逻辑地址经过地址转换单元得到物理地址,CPU用物理地址直接访问内存。

    2、保护模式

     物理地址和逻辑地址的解释,上面实模式已经说过了,下来只要介绍线性地址和虚拟地址就可以了。 
     线性地址在保护模式下,指的就是逻辑地址经过地址转换单元得到的地址,如果开启了分页功能的话,线性地址又被称为虚拟地址,通过分页机制线性地址转换为物理地址。如果没有开启分页功能的话,这个线性地址就是CPU需要的物理地址。

     总结来说就是,实模式下:地址分为逻辑地址和物理地址,逻辑地址通过地址转换机制转换为物理地址。在保护模式下:如果没有开启分页,逻辑地址通过地址转换单元转换为线性地址,该线性地址=物理地址;如果开启了分页功能,线性地址再通过分页机制转换为物理地址。

     这里需要注意的是,我们说的地址转换机制的工作原理是:把段基址左移四位,然后加上偏移量。分页机制转换的原理:通过查找页表,得到该段基址对应的实际物理地址,然后加上偏移量,得到物理地址。实际上,我们可以认为我们只是对段基址进行了许许多多的操作,偏移量并没有发生变化。因此我们把偏移量称为,有效地址。

  • 相关阅读:
    Java实例_队列Queue用法
    JAVA中不同类型的取值范围
    面试被问到的题
    关于Maven启动项目各种.xml文件和.properties文件找不到问题的解决
    jupyter使用
    java中“==”和equal区别
    redis持久化的几种方式
    事务是什么,以及事务四个特性
    Java中的String类能否被继承?为什么?以及final和static的区别
    pytest.mark.parametrize 参数化
  • 原文地址:https://www.cnblogs.com/adylee/p/8580566.html
Copyright © 2020-2023  润新知