实验环境

本文假设已经创建虚拟机并配置好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,可以选别的。

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

  1. SDN实验环境安装配置

  2. TFT LCD控制显示总结(硬件概念、初始化相关配置)(转)

    源地址:http://nervfzb.blog.163.com/blog/static/314813992011215105432369/ TFT LCD是嵌入式中比较常用的显示器,S3C2440/S ...

  3. Hadoop系列之实验环境搭建

    实验环境基本配置 硬件:硬盘单节点50GB,1G内存,单核. 操作系统:CentOS6.4 64bit Hadoop:2.20 64bit(已编译) JDK:jdk1.7 磁盘分区: / 5GB /b ...

  4. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  5. 操作系统内核Hack:(一)实验环境搭建

    操作系统内核Hack:(一)实验环境搭建 三四年前,心血来潮,入手<Orange's:一个操作系统的实现>学习操作系统内核,还配套买了王爽的<汇编语言(第二版)>和<80 ...

  6. App自动化测试-1.App自动化介绍和环境搭建

    App自动化测试-1.App自动化介绍和环境搭建 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-b ...

  7. OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发

    OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发 摘要: 记录实验过程中踩到的坑.介绍OPNsense防火墙的安装配置并搭建实验环境,利用msf的模块及ssh进行流量转发(LAN向DMZ ...

  8. vSphere可用性之三准备实验环境

    第三章 准备实验环境 在上篇内容中,讲述了进行VMware HA实验所必需的软硬件条件.接下来将使用这些来搭建实验环境.主要内容为依据拓扑图安装ESX主机系统.ISCSI存储系统. 此次实验环境的建置 ...

  9. 准备 KVM 实验环境 - 每天5分钟玩转 OpenStack(3)

    KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...

随机推荐

  1. 被弃用的php函数以及用来替代的函数

    下面列举了部分被弃用的函数: call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_fun ...

  2. c字符串函数

    1.  bcmp(3) 类ma似于strncmp(3) 但是比较结果不一定是两个字符的ascii码之差. 返回值:相等0,不相等非零(不一定是-1) 2.bcopy(3)类ma似于strncpy(3) ...

  3. 【视频点播最佳实践】使用OSS SDK上传视频到点播

    摘要: 场景 点播上传SDK缺乏需要的语言版本(如C/C++.Go等)或相应的功能(如网络流上传.追加上传),可以直接使用OSS的SDK进行上传. 准备工作 确认已开通点播服务并完成了相关配置.确认已 ...

  4. Python开发WebService--使用soaplib库

    Python开发WebService--使用soaplib库   使用soaplib开发基于Python语言的WebService主要有以下四个步骤:一.准备环境    S1:下载插件Python.s ...

  5. python---剪贴板

    import sys from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QTextBrowser, QPushButton, ...

  6. Hadoop2.7.4 yarn(HA)集群搭建步骤(CentOS7)

    群节点分配: Park01:Zookeeper.NameNode(active).ResourceManager(active) Park02:Zookeeper.NameNode(standby) ...

  7. c# 操作mysql数据库的时候会出现 插入中文汉字变成问号?

    场景: 在mysql ce里面执行时没有问题的. c#操作会出现问号. 原因是:  链接字符串的时候 要设置Charset=utf8; 不然就会按默认的服务器设置编码,通常会出问题. 检查: 1.创建 ...

  8. vue-router的hash模式和history模式,

    hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事件: window.onhashchange = function(event){ console.log(ev ...

  9. Redis实战(十七)Redis各个版本新特性

    序言 Redis1.0 Redis2.0 Redis3.0 Redis4.0 Redis5.0 资料

  10. luogu 4927 [1007]梦美与线段树 概率与期望 + 线段树

    考场上切了不考虑没有逆元的情况(出题人真良心). 把概率都乘到一起后发现求的就是线段树上每个节点保存的权值和的平方的和. 这个的修改和查询都可以通过打标记来实现. 考场代码: #include < ...