操作系统(1)——X86-32硬件介绍、实验环境相关配置、uCore部分技巧介绍
实验环境
本文假设已经创建虚拟机并配置好Ubuntu 16.04(网上太多教程了,所以这里就不赘述了)。
X86-32硬件介绍
x86指的是80386这种机器(一种32位CPU,在早期得到了广泛的应用),大概理解为一种32位的CPU就行。
段寄存器主要是用来寻址,注意在实模式和保护模式下寄存器中同样的值会有不同的含义。
EIP要和CS结合使用,具体含义如果学过微型计算机相似的课程都知道怎么回事,这里就不解释了。
UCORE部分编程技巧
这部分主要关于上图中的内容。
为什么要介绍?因为UCORE基于C开发,但是又用到了上述内容,所以要解释下。
例如上图中就是用了面向对象的编程方法。这部分代码用来建立一个物理内存的管理器,这样主要是为了能够让在调用这里定义好的函数接口的时候接口不会改变,尽管接口的实现方式在不同的连续内存分配方法上是不一样的。
上图为通常的双链表定义
上图为uCore的双向链表结构的定义(我觉得图中的list_entry
和list_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部分技巧介绍的更多相关文章
- SDN实验环境安装配置
- TFT LCD控制显示总结(硬件概念、初始化相关配置)(转)
源地址:http://nervfzb.blog.163.com/blog/static/314813992011215105432369/ TFT LCD是嵌入式中比较常用的显示器,S3C2440/S ...
- Hadoop系列之实验环境搭建
实验环境基本配置 硬件:硬盘单节点50GB,1G内存,单核. 操作系统:CentOS6.4 64bit Hadoop:2.20 64bit(已编译) JDK:jdk1.7 磁盘分区: / 5GB /b ...
- 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建
数据库基础概述 大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...
- 操作系统内核Hack:(一)实验环境搭建
操作系统内核Hack:(一)实验环境搭建 三四年前,心血来潮,入手<Orange's:一个操作系统的实现>学习操作系统内核,还配套买了王爽的<汇编语言(第二版)>和<80 ...
- App自动化测试-1.App自动化介绍和环境搭建
App自动化测试-1.App自动化介绍和环境搭建 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-b ...
- OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发
OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发 摘要: 记录实验过程中踩到的坑.介绍OPNsense防火墙的安装配置并搭建实验环境,利用msf的模块及ssh进行流量转发(LAN向DMZ ...
- vSphere可用性之三准备实验环境
第三章 准备实验环境 在上篇内容中,讲述了进行VMware HA实验所必需的软硬件条件.接下来将使用这些来搭建实验环境.主要内容为依据拓扑图安装ESX主机系统.ISCSI存储系统. 此次实验环境的建置 ...
- 准备 KVM 实验环境 - 每天5分钟玩转 OpenStack(3)
KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...
随机推荐
- ROPE
#include <ext/rope> using namespace __gnu_cxx; ]; rope<int> x; rope<int> x(a,a + n ...
- 由n个已按1,2,3,.....,n编号的人围成一圈,从编号为1的人开始按1,2,3顺序循环报数,凡报到3者出圈,最后留一个人,问其编号是多少
/************************************************************************* > File Name: only_one. ...
- List&LinQ
DataTable会将整个数据表接收过来,可真正使用的数据未必是整个数据表所有的数据. 使用List可以接收需要使用的数据 public class Data_Model { public strin ...
- Spring框架几种创建bean的方式
Spring框架下,Bean的创建和装配非常的灵活,提供了三种主要的方式,并且相互见可以互相看见,也就是你可以随意地采用你喜欢且合适的方式创建Bean,而不用担心他们之间的兼容问题. 一.使用XML显 ...
- IDEA部署Spring-boot到Docker容器
一.准备工作 idea安装Docker插件 centos7系统安装docker 二.打开docker远程端口 1. 编辑docker.service文件 vim /usr/lib/systemd/sy ...
- java作业利用递归解决问题
第一题 利用递归求组合数 设计思想 (1)首先根据公式求,利用递归完成阶乘函数的初始化,并且通过调用阶乘,实现公式计算 (2)递推方法,根据杨辉三角的特点,设置二维数组,从上到下依次保存杨辉三角所得数 ...
- curl检查访问网页返回的状态码
urls=('www.baidu.com' 'mm.yellowurl.cn' 'm.yellowurl.cn' 'http://m.yellowurl.cn/product/a.html'); fo ...
- Redis(一)
1 单机MySQL的美好时代2 Memcached(缓存)+MySQL+垂直拆分3 MySQL主从读写分离4 分库分表+水平拆分+mysql拆分5 MySQL的扩展瓶颈6 为什么使用NoSQLNoSQ ...
- 【c++】一道关于继承和析构的笔试题
题目如下,求输出结果 class A { public: A() { cout<<"A"<<endl; } ~A() { cout<<" ...
- Error: pgraster_wkb_reader: grayscale band type 10 unsupported
错误原因:Float32 is not supported for rendering.即栅格数据类型Float32不支持. cmd中用GDAL查看.在波段中的数据类型是Float32的不支持渲染. ...