• 操作系统(1)——X86-32硬件介绍、实验环境相关配置、uCore部分技巧介绍


    实验环境

    本文假设已经创建虚拟机并配置好Ubuntu 16.04(网上太多教程了,所以这里就不赘述了)。

    X86-32硬件介绍

    x86指的是80386这种机器(一种32位CPU,在早期得到了广泛的应用),大概理解为一种32位的CPU就行。

    段寄存器主要是用来寻址,注意在实模式和保护模式下寄存器中同样的值会有不同的含义。

    EIP要和CS结合使用,具体含义如果学过微型计算机相似的课程都知道怎么回事,这里就不解释了。

    UCORE部分编程技巧

    这部分主要关于上图中的内容。

    为什么要介绍?因为UCORE基于C开发,但是又用到了上述内容,所以要解释下。

    例如上图中就是用了面向对象的编程方法。这部分代码用来建立一个物理内存的管理器,这样主要是为了能够让在调用这里定义好的函数接口的时候接口不会改变,尽管接口的实现方式在不同的连续内存分配方法上是不一样的。

    上图为通常的双链表定义

    上图为uCore的双向链表结构的定义(我觉得图中的list_entrylist_entry_t是同一个东西),不过可以不只是用在双向链表上。上图中page(因为它里面定义了page_link)可以和free_area建立链接关系,同时它里面还可以定义别的成员变量来装特定的数据,这样就可以针对不同数据结构对成员变量的要求来改变page的定义,因此可以更灵活简洁地实现各类数据结构。

    上图中的free_area相当于是链表的头节点。图中le2page用来寻找到某个page的头节点的实现:

    le2page包含两个模块,一个是指针le(宿主数据结构的链表节点的指针),一个是member(成员变量)。to_struct多一个Page,表示这个链表节点。to_struct的作用就是用当前链表节点的地址减去offset(Page所在位置减去成员的偏移值),这样就可以计算出宿主数据结构头指针的地址。offsetof的type就是Page,注意(type*)0,它不是代表具体的一个地址,而是合在一起代表了这种member成员变量在这个类型type中的一个偏移值。

    可能要装的一些软件

    这里假设是在Ubuntu 16.04下进行的。

    要装的有:

    sudo apt install eclipse-cdt git meld vim
    

    上面的不完全,到时候用到再补充。我比较习惯用vim这款编辑器,所以这里列了vim,可以选别的。

  • 相关阅读:
    【CentOS 6.5】QtCreator启动时关于dbus-1的错误解决方法
    【CentOS 6.5】 Qt Creator 启动失败
    C# mvc3 mvc4 伪静态及IIS7.5配置
    【水果大全】快看,你属于哪种水果身材?
    一首《放下》最近火了!
    【情感励志】不必仰望别人,自己亦是风景
    java JDBC连接 Sqlserver 非默认的实例名问题
    后台:酒店客服订单管理.把订单编号:1290939 从取消状态恢复确认有房状态(待发单状态)
    PHP安装环境搭建
    表操作汇总(复制,删除,修改,插入,查询及数据库的复制)
  • 原文地址:https://www.cnblogs.com/yejianying/p/xuetangx_os_1.html
Copyright © 2020-2023  润新知