Linux
文章平均质量分 59
grey_csdn
这个作者很懒,什么都没留下…
展开
-
1917_PVE虚拟机使用初探
体验上是一种虚拟桌面的方式提供不同操作系统的使用体验,而不同的操作系统有不同的特点。我的虚拟机无法连网,后来使用英特尔的模拟方案,这个问题就解决了。也有人将半虚拟化的方式改为英特尔的模拟方式,然后再修改回去,最后结果是生效的。我最近的台式机希望退居二线,这为我提供了一个优秀的硬件平台。整体而言,安装的步骤与之前使用操作系统时的操作系统不同。在这样的环境中也可以去尝试一些新鲜一点的用法,这是一个非常好的体验。关于这个平台的使用,我的想法是服务上以Linux为主,辅以轻度windows系统弥补偶尔的不足。原创 2024-08-25 18:31:26 · 707 阅读 · 0 评论 -
1916_大量数据备份的一点体会
相比于压缩或者打包来说,我们使用的SSH传输备份方式是直接将文件传输到宽带带宽上,因此并不占用磁盘空间。这样的资源消耗非常低,而且还有内存、CPU的消耗都比打包压缩占用的资源低很多。公司的采购流程非常慢,这段时间为了公司能够有一台可以自由安装软件的电脑,我计划将自己的电脑暂时放到公司用一下。无论是压缩还是纯粹打包,我都遇到过文件报错问题,要么是路径太长,要么是其他原因。我们尚未找到非常好的避免这样的问题的方案,只能尝试其他方法。当然,这个也不完全是仅仅静默的后台,如果我想查看它的速度,也可以查看。原创 2024-08-25 17:46:43 · 221 阅读 · 0 评论 -
1802_在Linux系统上开发ARM单机片机嵌入式软件
3. 不过,如果这样的开发模式也跟Arduino类似,有一个BootLoader已经固化在里面,而开发只是简单的通信传输升级就可以调试,这样其实就很通用了。不过,从描述的信息看,下载的不是IDE的信息而是一个编译环境。3. 这个环境实现的接口相比Arduino来说是更加简洁的,而且由于ARM本身的设计,在这样的环境上容易扩展更多的支持,比如说网络的支持。但是,Arduino的有点在于经过了这么多年的打磨之后,实现的库比较多。1. 这个IDE是可以在网页上使用的,使用的时候,目标板会在电脑中显示为存储。原创 2023-10-05 17:56:26 · 428 阅读 · 0 评论 -
1771_Windows下格式化Linux硬盘
不过,原来的电脑扔在家里有些可惜,因为我什么资源都用不了了。于是,我手头的一块儿小硬盘换到了原来的笔记本上改造成了第存储的上网本装好Linux之后扔在了家里。原来电脑带有的320G硬盘被我带回了北京,结合硬盘盒子我想把它改造成一个移动硬盘。我知道硬盘肯定是没有坏的,因为用了那么就没有什么毛病,为了确保没问题拿出自己的树莓派一下子就读取出来了。我当初之所以使用Linux一是因为这个系统能够提供给我所有想要的工具,而是因为这个系统免费。选择存储,能够看到所有的存储空间,包括因为不能够识别被隐藏了的空间。原创 2023-07-15 16:01:49 · 799 阅读 · 0 评论 -
1770_VirtualBox下安装Debian
手头的一个笔记本放到了家里,现在手头就只有一个mini主机,如果要体验Linux的环境,目前似乎只有虚拟机了。一直没有在我的电脑上好好用过VirtualBox,我总觉得是因为我之前的电脑原因,因为我确实是在其他的电脑上试用过,效果还不错。Debian的配置其实也说不上麻烦,但是稍微比其他常用的系统多了一道权限的控制,这让我感觉使用略有不方便。不过,如果说起稳定性与流畅度,Debian绝对是有口皆碑的,虽说我自己的体验并不是很深刻。以下是我安装的记录,如果没有出现的界面即是采用了默认的选择。原创 2023-07-15 15:47:24 · 1157 阅读 · 0 评论 -
1761_Debian中软件安装权限问题解决
况且,这些繁琐的配置其实也只不过是暂时的折腾,折腾过了之后一切也就恢复了正常。而工作的经历告诉我,可靠与稳定的计算机开发与运行环境才是我真正需要的东西,之前的我陷入迷途太久了!当时的Debian安装使用的官方ISO镜像,最初的几次尝试写入到U盘安装失败,受不了了直接买了30张空白的DVD。不过到了使用的时候发现默认情况下很多我用的软件工具没有打包安装进去,心想这个也简单,直接键入之前的命令就可以嘛!更为让我懊恼的是,我明明设置好了root的密码,但是登录界面使用root登录的时候却总失败。原创 2023-07-05 07:04:42 · 1002 阅读 · 0 评论 -
1741_CentOS 安装firefox flash插件
来到北京工作,工作原因又用了将近一年的Windows,前阵子因为后台自动升级把电脑给正的崩盘,无奈下又用CentOS。好的是,我安装的全功能开发者版本,很多工具都已经安装齐全,至少我作开发测试或者学习用的工具基本上不用额外增加。坚持使用了多年,我发现它能够给我想要的全部功能,同时我不想要的功能也有很多被天然性地排除在了外面。无奈之下,继续回到火狐引导的下载网站,这次下载的rpm文件。后来又选择用了几个月的CentOS,我对这个系统也有很大的期待,因为直觉上我觉得这个系统的稳定性一定会好过Ubuntu。原创 2023-06-14 07:33:46 · 172 阅读 · 0 评论 -
1737_Linux文件夹与目录管理小结
cat指令可以用来查看文件的内容,这个命令比较好的是不会改变文件信息。head与tail是一对儿显示形式有些相似但是行为相反的指令,head –n XX显示的是文件的前XX行,而使用tail则会显示后面XX行。which在我日常工作中用到了很多,因为Windows系统的特殊性,有时候需要在搭建某个环境的时候使用的bash,而在计算上查找加入到了环境变量的命令使用which是轻松简单的。命令使用的时候有几个常用的参数需要注意,-a在复制文件的时候会保证数据信息的一致性,-r则代表可以对目录进行递归操作。原创 2023-06-10 12:13:30 · 75 阅读 · 0 评论 -
1736_tar命令的简单使用
作为一个嵌入式软件工程师来看,我需要的确实不是很多,而且很多东西似乎也并不需要我去备份,因为网络上有着太多的备份。不过,在各大平台通用的小工具学习一下还是不错的。不管多么优秀的压缩或者是打包工具,我用到的功能似乎一直都只有压包、解包。本身我自己的资料就不是很多,自己“创造”出来的数据更是少之又少,压缩率对我来说并不是一个很重要的指标。tar命令在创建新的包时使用的是-c的参数选项,而-f的使用有点类似于gcc中的-o的使用,指明“目标文件”。对于解包来说,使用的是-x的参数,而f的使用方式类似。原创 2023-06-09 07:40:44 · 96 阅读 · 0 评论 -
1727_使用虚拟机安装CentOS-7
我个人还是用图形化的操作界面的,而且有我自己的喜好,我选择了下面的软件安装集合。这一步需要根据具体的电脑硬件以及Linux操作系统的镜像包来选择,如果是32位机器只能是下载32位的镜像包并且选择32位(没有标注64位的那个),而64位操作系统下自己随意选择,只要镜像文件匹配。值得注意的是这些带有叹号标识的必须得进行配置,对于安装目的地的配置我直接选择了默认。点击完成,虚拟机的环境就此准备好了,接下来是操作系统的安装。选择稍后安装操作系统,这是我的经验操作,之后选择下一步。选择一个安装位置,然后点下一步。原创 2023-05-31 07:35:44 · 366 阅读 · 0 评论 -
1725_计算机概论学习手记
模拟计算机具备大型计算机的特性,但是能够放到一般的场合,一般用于科研、工程分析、流程管理。输入的设备中常见的不外乎于鼠标、键盘、扫描仪,而最近智能手机盛行的时代触摸屏也越来越多地加入到了我们生活日用品的行列。而对于绝大多数的用户来说,应用程序才是我们最熟悉的,也是面向绝大多数用户的特定功能软件。CISC架构的常见有X86以及X84_X64,其中X86是32位的芯片,名字来自于Intel的8086系列处理器命名。计算机的分类确实是又让我重新认识了一下计算机的种类,之前我自己记忆中的信息确实是不够全面。原创 2023-05-29 07:14:13 · 83 阅读 · 0 评论 -
1720_Linux学习中的问题处理
不然,用户跟软件工程师的角色就重叠了,自己的注意力也被过多的牵制。这方面我自己一直以来的学习中做的不算好,我遇到过很多FAQ文件,但是我似乎基本都没有翻看过。我问的偏少,不过在初级问题的解答上倒是也多多少少贡献过自己的一点力量。对于软件的反馈提示信息以及屏显信息捕捉我自己做的还不错,不过说到对所有的记录文件进行深刻剖析这样的做法我做的还是少一些。关于4、5,这是我自己的一点理解,书中没有明确的说明。遇到问题的时候,解决的方法大致有3中,而针对学习的建议有一部分是值得考虑学习的。3,遇到好的资料拷贝保存。原创 2023-05-24 20:13:35 · 706 阅读 · 0 评论 -
1719_Linux系统导论学习笔记
Linux系统的硬件需求相对来说是比较低的,这些年Linux的使用者越来越多跟很多老旧的硬件因为Linux的存在继续发挥预热有关。还有重要的一点是费用低廉,很多发行版或者说是绝大多数的发行版现在都是免费的,而技术服务支持的资料不仅多而且讲解深度也高。如果所谓的万能驱动包解决不了你硬件驱动的问题,那很可能意味着你的显卡等原本火力十足的武器一下子被打回到解放前的水准。总算是在书中接触到了什么是UNIX的思想,Ken在最初设计UNIX的时候有两个基本的思想:第一,所有的程序或者系统装置都是文件;原创 2023-05-23 07:28:50 · 341 阅读 · 0 评论 -
1683_Ubuntu的几个桌面对比
KDE是我用过时间最短的一个桌面,这个界面的使用习惯非常适合习惯了Windows的人上手,据说Linus最喜欢的也是这个桌面环境。这种牛皮癣的特性似乎也成了我讨厌它的一个借口。不过,根据我个人的体验,我觉得这是我用过的桌面环境中跟Ubuntu兼容性最不好的一个。不过,我相信很多人的看法:KDE是一个不错的桌面环境,令人不好接受的是它在Ubuntu下的兼容性不是很好。当然,我现在都觉得那是我见过的最美的官方默认系统中用到的Gnome,Fedora的美丽图标好过了Ubuntu,没有Ubuntu的那种凌乱感。原创 2023-04-19 20:33:51 · 760 阅读 · 0 评论 -
1682_尝试写一个shell(做个努力的小菜鸟)
不可否认,我很喜欢漂亮的界面,如果手头的电脑是mac,我想我转投苹果阵营是板上钉钉的结果。说到了批处理,说到了调用的自动化等等东西,我想接触过Linux的人全都不会记不起这个系统,也不会想不起shell。While循环的意思还是很明显的,为了习惯我自己的阅读习惯,我对代码的缩进排版也做了一点点调整。下载了一本500页的shell教程,看了50页后决定放弃,更好的方式是凭借自己的直觉加网络搜索的方式学习。跋:看了一下,这个可能是我大约十年前的学习笔记了,脑海中都没有多少那时候的记忆痕迹了。原创 2023-04-18 20:59:21 · 656 阅读 · 0 评论 -
1681_Ubuntu下查看某些文件夹下所有的文件大小
然而,在现在科技进步如此迅速的时代,总会有一种方法会让我们找到完成同样工作的方法,这种方法可以脱离Windows这个吸金的操作系统。我觉得Linux的不断发展以及全世界各地程序猿、攻城狮们的努力会让我们获得我们想要的,根据我的经验,通常这种新的方式会让我知道什么叫做自由和高效。由于工作性质的原因吧,我电脑上太多的文件,有时候各种命名规范的要求下文件名字也变得超长。我觉得在Linux操作系统上折腾可以给我这种生命仍在燃烧的感觉,原因说不清楚,可能是自己东拼西凑的东西还是能够给自己一点成就感吧!原创 2023-04-17 20:34:26 · 403 阅读 · 0 评论 -
1680_ubuntu 安装CPAN
想学习一下perl,当前很想做的一件事儿是使用perl在脱离了windows以及微软的office依然能够构建出简单有效的自动化脚本。现在我正在使用LibreOffice编写我的博客文稿,因为我想体验简单。但是闲得无聊的时候这是一个好事儿,因为我又有东西要学习了。苦闷的生活有时候真的跟成长的岁月是同义词,我自己现在正在很好的体会。终于让我找到了比较简单带点傻瓜式的安装方法了,简单的命令之后自动搞定。依我自己的个人直观加表象的理解,第一行应该是进入CPAN的shell,接下来的两行则是安装两个必要的块儿。原创 2023-04-16 13:40:10 · 202 阅读 · 0 评论 -
1677_MIT 6.828 xv6中增加CPU alarm
其实,这里也埋下了一个bug,那就是如果是这么初始化的话,只要是OS运行的时间足够长,这个alarm其实一定会触发。我考虑的方式是直接增加一个初始化的使能参数,而网络上参考了一下其他人的设计其实大部分设计都是采用了带有符号的数据类型初始化的时候给一个负值。这样,一个基本的框架就实现了,具体的alarm的触发还得继续设计。这里的判断条件信息在要求附加的提示信息中都已经给出来了,如果上面的alarmticks具有正负号的话,的确是能够保证这里不会出现误触发。与之对应的,增加这个系统调用的查询表。原创 2023-04-13 09:10:12 · 331 阅读 · 0 评论 -
1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理
如果应用程序调用alarm(n, fn),那么在程序消耗的CPU时间的每n个“滴答”之后,内核将导致调用应用程序函数fn。可选的挑战:1)保存和恢复调用方保存的用户注册到处理程序的调用。而这个概念其实在我现在使用的RTOS中也是有的,至于这个Alarm在底层的实现机制是什么样子的,之前的确是没有研究过。提示:您的sys_alarm()应该将报警间隔和指向处理程序函数的指针存储在proc结构中的新字段中;提示:在您的IRQ_TIMER代码中,当进程的alarm间隔到期时,您希望让它执行其处理程序。原创 2023-04-12 07:50:09 · 712 阅读 · 0 评论 -
1675_MIT 6.828 使用虚拟存储的讲义整理分析
这个是对之前延时分配的一个说明,这里提到了trap类型中有一个页错误的类型,这个之前在做xv6的代码调试的时候已经看过了,也做了这样的尝试。这一段代码之前我已经自己分析过了,这个是一个较为常规的trap发生的时候的堆栈处理模型。Fork的效率也有优化的空间,可以通过使用的时候才分配的方式避免分页浪费且提升效率。这一段代码也是很熟悉的,之前做系统调用的分析的时候分析过这一段代码的实现以及作用。可以通过共享的方式,减少这方面的资源消耗。相比我自己的实现,这里增加了一个进程信息的检查,设计的确是更加完善的。原创 2023-04-11 07:33:49 · 361 阅读 · 0 评论 -
1674_MIT 6.828 xv6延迟页面分配的实现
这里的分类可以从trap.h中看到,这里定义了用到的所有的分类。代码的修改方法如上,这里我直接加了一个break,这样相当于把后面的这段提示直接给毙掉了。前面刚刚把《Homework xv6 lazy page allocation》的网页做了一个简单的翻译整理,这一次做一下里面的试验尝试。这样修改之后,测试出来的效果与前面的修改方式是一致的。这一次的实现增加了一个case,而这里增加大括号的原因是能够在这里划分出来一个代码块以进行变量定义的处理。参考这里的两点要求,实现上面的修改就非常简单了。原创 2023-04-10 20:03:01 · 365 阅读 · 0 评论 -
1673_MIT 6.828 Homework xv6 lazy page allocation要求翻译
全部学习汇总:在计划表中看到了这样一份作业,做一个简单的翻译整理。原创 2023-04-09 08:41:06 · 387 阅读 · 0 评论 -
1672_MIT 6.828 xv6中如何通过构建环境让系统中增加一个可执行调用文件
分析一下xv6的构建环境会发现,其实这个功能的实现是基于unix系统中的C语言来实现的。直接通过C语言设计工具在makefile中调用,这不是第一次看到了,另一次是在看FUZIX代码的时候看到的。的确是非常巧妙,也足以让我去好好反思一下,为什么类似的处理在我的工作中就很难联想到。代码前面也写了非常有用的注释可以让我们知道,在处理文件到文件系统的时候,这个前面的前缀是被处理掉了的。这一次看一下,如何让OS的系统中增加这样的一个可执行的文件。系统启动之后,多了一个date文件,这个跟我们的命令是对应的。原创 2023-04-09 08:38:35 · 502 阅读 · 0 评论 -
1670_MIT 6.828 xv6中增加系统调用的实现与分析
由此,用户软件命令中的操作,其实就成了传递r的信息参数,之后由上面的系统实现进行数据更新的过程。有了这样的参数信息的获取之后,我们的OS内核就可以跟用户级的软件信息产生交互了。从这里可以知道,这个date.c的实现是如何进入到xv6中产生对应的作用的。上面的系统调用部分中,syscall()接口的调用是触发我们系统中C语言实现的调用接口的地方。上面的接口的实现,主要是做了一个数据过滤,真正的获取动作来自于argint()接口。而这个查表处理的表格则是我们系统设计中提供给系统的可以执行的系统调用的具体实现。原创 2023-04-07 21:50:56 · 504 阅读 · 0 评论 -
1669_MIT 6.828 xv6代码的获取以及编译启动
这里需要说明一下的是编译环境的搭建,我这里采用的跟JOS的环境完全相同的虚拟机,因此整个环境是完全相同的。不过,看makefile中的信息,qemu的目录还是Mac上的。为保证启动的顺利,先修改了qemu的路径,这个路径需要跟我们系统上的工具路径一致。那么,处理的方式很简单了,上面的代码屏蔽。6.828的学习的资料从开始基本信息的讲解,逐步往unix的一个特殊版本xv6过度了。我这里复现了一下出现的问题,由于其他文件都是已经编译过的,因此这里的log会跟拿过来的原始的编译的log略有差异。原创 2023-04-07 21:50:28 · 311 阅读 · 0 评论 -
1668_MIT 6.828 xv6代码中虚拟存储的配置实现分析
找一下对等的功能在xv6中是如何实现的,顺便看看xv6的一些其他的信息。从这里的注释以及实现看,前面的猜测,kalloc分配的是一个page的存储是准确的。从这个接口以及前面的调用的参数基本上知道,在初始化的时候先进行了4MB的空间初始化用于内核最初的使用。这里实现了内核的虚拟存储的配置,从行为看,kalloc可能是直接分配了一个page的存储,之后进行了初始化。这是页目录的定义,正好由此看一下关键参数KERNBASE,因为其他的应该都是一致的套路,然而也看到了这里的初始化用了不同的方法。原创 2023-04-07 21:42:34 · 375 阅读 · 0 评论 -
1667_MIT 6.828 xv6 book rev11中文翻译第二章节
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 说明:这一份笔记是我对xv6-book-rev11第二章节的翻译整理。翻译的主要方式就是机器翻译,我对其中阅读有一些障碍性或者有较大误导性的地方做了修正。这份笔记是为了能够让我更好理解这一部书而整理的,而本章节并不是从最开头准备的。 以下是部分翻译的正文:Xv6包含了内核在每个进程的页表中运行所需的所有原创 2023-04-02 10:07:08 · 528 阅读 · 0 评论 -
1666_MIT 6.828 JOS隔离机制的大纲
其实从这一页前半段就能够看得出来,中断的处理其实都是内核托管的,由内核来处理。1. 关于中断的处理,感觉上全都是由内核来托管的。而用户触发的相应的中断会在内核处理,而接下来的操作只有对应的用户可以承接。6. 我现在接触的很多嵌入式的MCU其实也有类似的机制,更加直接地从访问模式上分为了用户以及管理员模式。3. 这一页也介绍了芯片对于中断的处理机制,这个我觉得不同芯片都是类似的,我也看过很多芯片的类似功能。3. 隔离的主要作用:防止错误的扩散、进程之间的相关监控、过多的CPU占用以及一些异常行为的阻断。原创 2023-04-02 10:04:12 · 306 阅读 · 0 评论 -
1665_MIT 6.828 JOS虚拟存储的设置
这是修改后的代码进行测试的结果,从这里看暂时有提示的测试全都已经测试通过。之前把这一部分相关的功能全都调试通过了,从这里的注释看,其实这里的准备更多的是为了画出来的两个接口。其中,page_insert()已经在前面的调试中实现了,接下来看一下boot_map_region()的实现。完成了上面的接口之后,做这个接口的实现就会简单很多。但是,在做这个实现的时候,第一个参数的确认费了点时间。这个接口应该只是在初始化的阶段在用,按理说也不会有存储超出的情况,不过加上总没坏处。这里,完成了剩余的存储的映射。原创 2023-04-01 20:36:12 · 366 阅读 · 0 评论 -
1664_MIT 6.828 JOS页管理的相关行为实现
这个函数接受三个参数:pgdir是一个指向页目录表的指针,va是要查找的虚拟地址,create表示如果要查找的页表不存在是否要创建。最后,使用虚拟地址KADDR(PTE_ADDR(xxx))将页表的物理地址映射到内核虚拟地址空间,并返回指向相应页表的pte_t类型指针,加上va低12位作为页表项的索引。这个函数接受三个参数:pgdir是一个指向页目录表的指针,va是要查找的虚拟地址,pte_store是一个指向指针的指针,用于保存对应的页表项。确切说,这个查找查找的是虚拟地址对应的物理page的信息。原创 2023-04-01 20:33:17 · 349 阅读 · 0 评论 -
1663_MIT 6.828 JOS页面的分配与回收
更重要的一点,这里还给出来了用到的接口。继续看这个页面分配的检查接口,在检查完了页面的分配以及回收之后,进一步检查了对于分配的存储的写入操作。单纯的一个页面的释放占用还是很容易实现的,不过按照这里的提示这里加了一个panic防止出现占用中的存储被释放的情况。这个链表的元素数目在最开始的时候进行了一个统计,这里通过统计一个丢弃一个的方式完成了“蜕壳”处理。处理完之后的测试,从测试的结果看到存储分配以及回收部分的测试现在是通过了。这是最初的处理,尤其值得注意的是这里的操作是在链表出现变化之前的操作。原创 2023-04-01 20:29:10 · 472 阅读 · 0 评论 -
1662_MIT 6.828 JOS check_page_free_list实现分析以及boot_alloc问题修复
这个其实是在前面初始化的时候分配出来的一块存储,接着进行了页管理信息的初始化。那么,这个函数实现的是按照页信息相对于pages的基地址的偏移来找到对应的物理地址,而这个跟真实的物理地址是一一对应的关系。由此,从上面的逻辑运算中,能够计算出来的其实是对应的页面管理信息所映射的物理存储的页开始地址。进行存储分配的时候,返回的应该是开始的地址而不是结束的地址。接下来的检查倒是比较容易让人理解,主要还是检查了一些存储的边界范围是否在合理的范围之内。以上是执行效果,从这一次的效果看很明确,之前的存储分配有问题。原创 2023-04-01 20:27:31 · 946 阅读 · 0 评论 -
1661_MIT 6.868 JOS page_init实现的初步尝试
继续往下的分析,应该暂停下面接口的分析,先去把上面提到的boot_map_region()以及page_insert()接口的实现。这里的这部分注释比较有价值,值得注意的有几点:第一,pages的信息主要是对引用的页面进行统计,而没有引用的界面则在链表中进行维护;这个是按照上面的4条要求做的一个简单的设计实现,其中结构体的pp_ref成员可能有多种数值,但是当这个数值为0的时候应该是没有被引用的时候,这个也是最初给出来的示范代码的设计。这一次的梳理暂且到此,后面,先完成上面两个接口的实现与分析。原创 2023-04-01 20:23:34 · 69 阅读 · 0 评论 -
1660_MIT 6.828 JOS初始化boot_alloc的初步实现
这一行代码让分页管理的机制处理kern_pgdir虚拟地址的时候,把kern_pgdir的地址映射到kern_pgdir的物理地址上。这一次的小结有一点没底气,因为感觉实现的过于简单,可能跟正确的结果有一定的差距。这一段代码其实还是很容易理解的,end其实是链接文件中定义的,这个数值其实是内核所占用的存储的最后的地址。Panic的地址范围判断应该是KERNBASE空间之后的超过总的物理存储区的时候。PDX(UVPT)是一个获取页目录索引的方式,而处理的对象UVPT是用户虚拟页表,一个用户只读的用户页表。原创 2023-03-26 18:53:35 · 296 阅读 · 0 评论 -
1659_MIT 6.828 JOS存储初始化中的内核虚拟地址到物理地址的映射
这个空间的看见,看了前面的memlayout感觉也有了一定的思维模型可以参考了。而上面涉及到了这次调用中的第一个接口调用,i386_detect_memory(),这是一个很底层的判断,用来检查当前的系统可用的存储。首先需要知道的是KVA,内核虚拟地址的范围。这个地址其实就是软件编译之后链接器分配的地址,JOS把内核的部分分配到了KERNBASE + 1MB的位置。因此,上面的处理所获得的物理地址其实是一个1MB开始往后的地址。这样,可以想得出来,后续kern_pgdir的内容还是需要进行一定的处理的。原创 2023-03-25 19:41:51 · 121 阅读 · 0 评论 -
1658_MIT 6.828 JOS memmap以及一些存储划分定义的解读-第二部分
接下来的几个特殊区域是两个区。第一个4MB之中包含了USTABDATA,其实是从2MB的位置开始的,这只用掉了这一个大区中的一部分。而第二个区域中,错误处理其实用掉的空间比较小,只有一个页,4K,其他的全都是交换区应用。在用户可以完全操作的存储空间中,最上面先进行了 exception 的处理存储区域的划分,这个存储区域一共是2页 8K,实际的使用使用了4K,另外的一半处理机制跟上一次看到的内核的堆栈类似,加了一个无效数据区域作为防护区。之前,看到的UENVS的信息,这个地址是用户的只读区域的边界线了。原创 2023-03-25 19:38:34 · 568 阅读 · 0 评论 -
1657_MIT 6.828 JOS memmap以及一些存储划分定义的解读-第一部分
因为,我们的JOS在初始化的时候映射的存储只有两部分,第一个是0~4MB映射到0~4MB。中间跳过去的这部分参数其实很好理解了,在x86的设计中,最开始的一块地址是存储,一共640K。如果按照之前看到的OS的分页映射,这部分的线性地址其实是在KERNBASE开始的1MB范围之内。但是,这部分内容更加细致,除了说明用户的存储空间可用范围之外,还指出来了这里还有一些特殊的用户只读的信息区域。操作系统其实是被链接到了KERNBASE + 1MB的地址上的,也就是说从画出来的这部分继续向上的一部分空间中。原创 2023-03-25 19:34:52 · 423 阅读 · 0 评论 -
1656_MIT 6.828 JOS i386_init的实现分析
而这个无限循环的循环体,应该就是shell处理的过程,大概率跟我之前看到过的shell例程是相似的。存储的区间范围信息的获取,其实是通过链接文件来实现的。在BootLoader调用kernel之后,先执行一段entry.S的汇编代码,之后调用的i386_init函数进入到C语言的处理过程。这个之前已经测试过了,而通过前面的终端初始化中的错误处理其实是能够看得出来这个cprintf已经就绪了的。继续往下是存储的初始化,这部分已经做了一个初步的了解,主要的工作就是对存储的分页管理机制进行相应的配置准备。原创 2023-03-25 19:32:00 · 546 阅读 · 0 评论 -
1655_MIT 6.828 JOS存储分页映射的实现分析
如果,进行了一个减去KERNBASE的处理,其实里面的信息也就是在1MB这个地址附近,确切说是这个地址稍微往后一点的地方。这么看,在数值上entry_pgdir的第0个元素的数值应该是entry_pgtable数组在被BootLoader加载到物理存储之后的位置的一个字节之后的地址值。而这里面的第0x3c0个元素的数值则是比上面的数值再大2的一个数值。这样,对这段代码重新理解应该能够得出这样的基本推理信息:页目录表的index其实是需要处理的线性地址的高10bit,根据这个信息,可以索引到一个信息。原创 2023-03-25 19:28:02 · 467 阅读 · 0 评论 -
1654_MIT 6.828 JOS entry.S实现分析
内核在链接的时候会链接到一个指定地址(KERNBASE + 1M)开始的存储区,而BootLoader加载内核的时候会把内核加载到1M开始的存储区。这样,加载之后,内核镜像的信息其实是与链接中的信息差了一个KERNBASE的差距。从这个意义上讲,这个功能也就是在实际的物理存储中根据内核信息解析数据的时候会用到的一个转换。接下来看CR0控制寄存器,这里面的信息还是很多的,结合上面的表格,可以知道这一次的操作主要是做了这几个操作:1,开启了保护模式;从命名看,跟描述是符合的,这里存储的是页目录的地址信息。原创 2023-03-25 19:26:56 · 480 阅读 · 0 评论