- 博客(14)
- 收藏
- 关注
原创 操作系统Ucore:Lab2内存管理(六)
进入Lab2,Lab2的主要内容是内存的管理0.新的bug按照文档上的说明,我们要把lab1中写的代码复制到Lab2中。我一开始并不想这样做,因为我想保留我在Lab1中写的注释,所以我就merge了lab2到lab1中,经过了艰难的处理冲突之后,make qemu 。但悲剧的是qemu的控制台没有输出,我仔细的再次比对代码,还是没有找出为什么。无奈之下,只好复制lab1的代码到lab2…但这还没完源代码中由好几个像注释部分这样初始化的位置,但是我前文已经验证了这样是无法正常初始化的啊…用gdb看这
2021-12-11 22:04:32 676
原创 操作系统Ucore:Lab1QA(五)
来回答一下Lab1的问题练习1:理解通过make生成执行文件的过程。1.1操作系统镜像文件ucore.img是如何一步一步生成的?ucore.img由kernel的bootblock组成,bootblock由bootasm和bootmain编译生成,最后由sign.c填充。kernel则由kern目录下的文件编译而成。最后使用dd命令构造ucore.img1.2一个被系统认为是符合规范的硬盘主引导扇区的特征是什么?最后两个字节是0x55AA练习2:使用qemu执行并调试lab1中的软件。跳过
2021-12-02 11:10:38 1346
原创 操作系统实验Ucore:Kernel_init(四)
本文首发于我的博客上一节进行到了kernel_init的printf_kernelinfo,继续往下分析1.pmm_init这个函数,顾名思义是用来初始化物理内存的函数,这个函数只会调用gdt_init()这里我稍微修改了一下代码框架,原本的gdt_pd的定义为注释部分这段代码看上去没问题,但是实际跑的时候就会发现gdt_pd的两个字段都是0。我写了一个程序来模拟这种情况,看上去好像没有问题,但这个程序是无法通过编译的。这个错误告诉我们编译器无法在执行前算出a1的地址。所以不可以这样初
2021-12-01 14:57:02 581
原创 操作系统实验Ucore:kernel_init(三)
本文首发于我的博客1.进入Kernel_init()从bootmain加载完ELF之后,就会跳转到0x100000位置,这里即kernel_init函数所在的位置先看第一部分,这里开头就有两个变量 edata 和 end,首先他们的类型是一个指向char数组的指针,其次,由于使用了extern关键字,代表这两个变量在其他位置定义,那么问题就在于到底是在哪里定义的呢。找遍了所有的代码都没有找到哪里有定义这些变量…终于,在链接脚本里边找到了这里使用了PROVIDE关键字,简而言之,这个关键字可以在链接
2021-11-30 15:03:52 529
原创 操作系统实验Ucore:bootmain(二)
本文首发于我的博客书接上回,我们继续来看ucore操作系统的启动部分。上一部分结束时,程序已经从最开始的bootasm跳转到了bootmain函数。1. 读取磁盘由于BIOS只会把第一个扇区加载到磁盘上,而我们的操作系统的大小肯定不止512KB,所以要在boot程序中把操作系统其余的部分加载到内存上。总体来看,这个函数的意思就是将磁盘上从1开始的8个扇区加载到ELFHDR(0x1_0000)的位置上。由于第0个扇区(就是我们现在正在执行的代码)已经被BIOS加载上了,所以从第一个扇区开始加载就行
2021-11-29 11:23:54 497
原创 操作系统实验Ucore:Bootasm启动(一)
此文章首发于我的博客:我的博客,博客上的排版更好一些…首先,先放一张我画的Bootasm阶段(调用bootmain之前)的内存分布图注:这个内存分布图只标识了大概位置,并没有考虑对齐在此基础上,再来分析ucore的启动代码1.启动地址首先我们要知道第一条指令的地址在哪,当然,第一条指令指的时操作系统执行的指令。根据上图的描述,第一条指令的地址是0x7c00.在makefile中,这一段程序指定了bootblock的入口函数为 start,其实地址为 0x7c00.使用gdb 调试可以很容易的
2021-11-28 17:45:55 365
原创 《X86汇编语言:从实模式到保护模式》读取磁盘
step1:安装BochsBochs is a highly portable open source IA-32 (x86) PC emulator writtenin C++, that runs on most popular platforms. It includes emulation ofthe Intel x86 CPU, common I/O devices, and a custom BIOS. Bochs can be compiled to emulate many diff
2021-11-19 13:12:24 1299
原创 《X86汇编语言:从实模式到保护模式》学习笔记
第四章:虚拟机的安装和使用这篇文章首发于我的博客转载请标明出处书上P42页的实验让我们输入一串汇编语言并执行。step0:首先需要准备一些必要的软件,第一个是nasmIndex of /pub/nasm/releasebuilds/2.15.05/win64nasm使用编译汇编语言的(其实只有汇编和链接步骤)第二个是书上配套软件包上网搜就有了,不过配套的nasm编辑器在我的64为windows上用不了,不过没有关系,用VScode就行。Vscode可以装一个高亮nasm的插件。这里主要要用的
2021-11-13 23:21:25 1238 3
原创 【环境配置】QT 5.12.3 QMYSQL driver not loaded
前前言如果你的Qt显示有但是还是显示 QMYSQL driver not loaded 的话,按照我的情况如果你的Mysql版本是很新的,那么有可能是Qt不支持此版本的Mysql,可以尝试下载一个旧版本的(我的是5.7.34)前言最近想装一下QT,但是在连接MySQL的时候,总是报 QMYSQL driver not loaded。研究了好几天,终于成功装上了,在这里总结一些经验,希望可以帮有需要的人。一些经验Qt与mysql连接最主要的部分有两个,一个是qt连接MySQL的插件,一个是My
2021-09-11 20:06:06 258
原创 TCP序列号与ack的计算(Wireshark抓包分析)
前言最近在做一个关于TCP的实验,需要了解TCP的seq和ack的发送机制,看了很多文章之后,再结合着实际的测试,归纳出了seq和ack的计算方法这里不得不说一句,关于怎么计算seq和ack网上的教程和文章实在是太少了,一搜TCP,出来的就是三次握手和四次挥手,难道TCP只需要握手和挥手就行了吗。结论先说结论:在已经建立好连接的TCP上(只考虑数据包和ack包),seq和ack的计算规则为本次要发送的包的 seq = 上一个发送的包的seq + 上一个发送的包的长度(不含包头)本次要发
2021-08-25 20:06:39 4476 4
原创 局域网IP冲突 -- 一次测试
局域网IP冲突 – 一次测试1.前言最近在连接ssh时在wifi的情况下连不上了,排查原因的时候看到有文章说可能是IP冲突引起的,由于对这方面的在认知比较匮乏,就决定做一个实验来了解一下。2.基础知识2.1私有IP与公有IP有一些IP端被分为私有的IP,也就是说这些IP只可以在局域网内使用而不能出现在广域网上。私有IP有以下几个部分A类 10.0.0.0 --10.255.255.255B类 172.16.0.0–172.31.255.255C类 192.168.0.0–192.1
2021-08-14 00:19:08 1010
原创 Win环境变量的用处
前言学习一些新的软件的第一步就是要配置环境,很多软件都要要编辑环境变量这个过程.以前一直是看着网上都的教程一步一步操作的,抛开不知道为什么不说,还经常配置不成功,今天就花时间学习一下windows的环境变量的原理和用处.1.环境变量面板网上有很多打开这个面板的方法教程,这里就不详细说了.打开之后是这个样子的.上面的用户变量是只对当前用户生效,下面的系统变量会对所有用户生效.我们主要讨论系统变量可以看到,所有的变量都有两个部分组成.一个是变量名(左侧),一个是值(右侧).在这些变量中,有一个和其
2021-07-17 13:55:31 341
原创 如何看懂命令/函数描述
如何看懂命令/函数描述1.前言在学习新的编程语言的时候,往往需要了解新的函数.在看官方给定描述函数的文档时,通常都是这样的:在网上查看其用法的时候,往往看到的是例子和文字性的讲解,对于用法描述的不是很全面.所以这就要求我们有自己看懂函数描述的能力对于这部分的内容,网上的资料很少.以下的内容来自一个英文网页,我简要的翻译一下2.基本规则基本规则由一个 Command Syntax Reference Table描述记号意义BOLD(黑体字)黑体字的内容必须一字不差的输入
2021-06-04 13:25:42 312
原创 计算机网络:自顶向下方法 第五章编程作业-DV算法
DV算(<<计算机网络:自顶向下方法>>第五章编程作业)目录DV算(<<计算机网络:自顶向下方法>>第五章编程作业)一.算法原理1.1目标1.2算法的核心思想1.3算法的表格1.4“更新”与“发布”1.5注意事项二.代码部分(以node0.c为例)2.1初始化部分2.2接收到消息2.3更改链路开销(只在node1.c和node2.c中)三.测试结果第一步:初始化第二步:初始化完成,算法收敛第三步.
2021-05-21 19:20:42 4209 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人