目录一、前景回顾二、A20地址线三、全局描述符表四、CR0寄存器的PE位五、迈入保护模式六、测试 一、前景回顾 上回我们说到,保护模式下有着三大特点:地址映射、特权级和分时机制。本来接下来是要向这三点一一发起进攻,不过我们首先需要先迈入保护模式中,不然在实模式下讲解保护模式显得不伦不类。怎么进入保护模式呢?其实也很简单,就三个步骤: 1、打开A20地址线 2、加载全局描述符表GDT 3、将CR0寄存器的pe位置1二、A20地址线 我们知道在8086CPU中,只有20位地址线,即A0~A19。20位地址总线表示的内存范围是1MB,即0x0~0XFFFFF,若内存超过了1MB,是需要第2
目录一、前景回顾二、规划页表三、实现页表四、运行测试 一、前景回顾 前面我们已经介绍了分页机制的运行原理,那么如何开启分页机制呢,也简单,分为如下三个步骤: 1、创建页目录表并初始化页内存。 2、将页目录表地址赋值为CR3。 3、打开CR0寄存器的PG位。 可以看出页表是分页机制的核心,接下来我们将开始在我们的系统上实现一个二级页表。二、规划页表 设计页表其实就是设计内存布局,不过在规划内存布局之前,我们需要了解用户进程与操作系统之间的关系。 在操作系统中,为了计算机安全,用户进程始终是运行在低特权级的。用户进程需要访问硬件相关资源时,是需要向操作系统申请,然后通过系统调用的方式
目录一、前景回顾二、规划页表三、实现页表四、运行测试 一、前景回顾 前面我们已经介绍了分页机制的运行原理,那么如何开启分页机制呢,也简单,分为如下三个步骤: 1、创建页目录表并初始化页内存。 2、将页目录表地址赋值为CR3。 3、打开CR0寄存器的PG位。 可以看出页表是分页机制的核心,接下来我们将开始在我们的系统上实现一个二级页表。二、规划页表 设计页表其实就是设计内存布局,不过在规划内存布局之前,我们需要了解用户进程与操作系统之间的关系。 在操作系统中,为了计算机安全,用户进程始终是运行在低特权级的。用户进程需要访问硬件相关资源时,是需要向操作系统申请,然后通过系统调用的方式
目录一、前景回顾二、用C语言编写内核三、加载内核四、运行测试 一、前景回顾 本回开始,我们要开始编写内核代码了,在此之前,先梳理一下已经完成的工作。 蓝色部分是目前已经完成的部分,黄色部分是本节将要实现的。二、用C语言编写内核 为什么要用C语言来编写内核呢,其实用汇编语言也可以实现,只是对于我们来讲,看C语言代码肯定要比汇编语言更容易理解,看起来也没那么费劲。所以用C语言可以更加省事。 先来看看我们内核代码的最初形态,首先在项目路径下新建一个project/kernel的目录,以后我们内核相关的文件都存放于此,在该目录下新建一个名为main.c的文件,在main.c中键入如下代码:
目录一、前景回顾二、用C语言编写内核三、加载内核四、运行测试 一、前景回顾 本回开始,我们要开始编写内核代码了,在此之前,先梳理一下已经完成的工作。 蓝色部分是目前已经完成的部分,黄色部分是本节将要实现的。二、用C语言编写内核 为什么要用C语言来编写内核呢,其实用汇编语言也可以实现,只是对于我们来讲,看C语言代码肯定要比汇编语言更容易理解,看起来也没那么费劲。所以用C语言可以更加省事。 先来看看我们内核代码的最初形态,首先在项目路径下新建一个project/kernel的目录,以后我们内核相关的文件都存放于此,在该目录下新建一个名为main.c的文件,在main.c中键入如下代码:
第三回万文疑谋生思绪璃月港口见清玉=====================================================================云溪愣了下,在他的认知中,神之眼正常而言不会有黑色的存在,就像在实数的体系内不会有i一样,他摇了摇头。而纪存初的眼中有闪过一次迷茫和失望,很快恢复过来,笑道:“算了,反正也只是个坊间传说而已,对了,小子,有兴趣入我万文集舍么?”话题跳转的如此之快,让云溪有点猝不及防,万文集舍到确实是个大宗级别的存在,进入其中谋个职位倒也算是光宗耀祖的美事,可最重要的事情在于,万文集舍太过于神秘了,以至于云溪都不知道自己如果进去可以干嘛,难道
第三回万文疑谋生思绪璃月港口见清玉=====================================================================云溪愣了下,在他的认知中,神之眼正常而言不会有黑色的存在,就像在实数的体系内不会有i一样,他摇了摇头。而纪存初的眼中有闪过一次迷茫和失望,很快恢复过来,笑道:“算了,反正也只是个坊间传说而已,对了,小子,有兴趣入我万文集舍么?”话题跳转的如此之快,让云溪有点猝不及防,万文集舍到确实是个大宗级别的存在,进入其中谋个职位倒也算是光宗耀祖的美事,可最重要的事情在于,万文集舍太过于神秘了,以至于云溪都不知道自己如果进去可以干嘛,难道
作者:晨念、聪言、新钰大家好,我是专注于软件应用交付的交付王小锤!我们交付铁三角团队(专注交付的我、开发老哥铁子、售前大佬强哥)又来了。作为一家提供大数据分析服务的ISV企业,面对国内依旧严峻的疫情形势,以及不可预估的封闭管控,前往客户现场已不再便捷。因无法出差而导致的项目延期交付时有发生,而对于产品的后续运维也常常因无法到客户现场,进行有效排查而导致业务不稳定等问题发生,导致客户怨声载道。企业口碑直线下降,业绩节节下滑,企业整体营收缩减,处境变得越发艰难,已经到了考虑是否进行人力缩减来降低成本的地步,因此在疫情导致无法出差、无法访客的大背景下,如何保障交付按时保质的进行,做好运维质量的保障,
作者:晨念、聪言、新钰大家好,我是专注于软件应用交付的交付王小锤!我们交付铁三角团队(专注交付的我、开发老哥铁子、售前大佬强哥)又来了。作为一家提供大数据分析服务的ISV企业,面对国内依旧严峻的疫情形势,以及不可预估的封闭管控,前往客户现场已不再便捷。因无法出差而导致的项目延期交付时有发生,而对于产品的后续运维也常常因无法到客户现场,进行有效排查而导致业务不稳定等问题发生,导致客户怨声载道。企业口碑直线下降,业绩节节下滑,企业整体营收缩减,处境变得越发艰难,已经到了考虑是否进行人力缩减来降低成本的地步,因此在疫情导致无法出差、无法访客的大背景下,如何保障交付按时保质的进行,做好运维质量的保障,
问题复现:正常状态下:切换到其他页面再切换回来:问题解决:其实这个问题的解决方式官网写得清清楚楚,我们看看官网怎么解决的:接下来我用代码解释下这句话(正确的做法是,在图表容器被销毁之后,调用echartsInstance.dispose销毁实例,在图表容器重新被添加后再次调用echarts.init初始化):constmyEchart=ref(null)//组件挂载完成时调用onMounted(()=>{testEcharts()//(在图表容器重新被添加后再次调用echarts.init初始化)})consttestEcharts=()=>{myEchart.value=echarts.in