操作系统stage1

别再傻等Fixing(D:)了!Win10/11开机磁盘自检的3种关闭方法(BIOS/注册表/cmd) 本文详细介绍了Windows 10/11开机磁盘自检(Fixing (D:))的3种关闭方法,包括BIOS设置、注册表修改和命令行工具chkntfs的使用。通过优化启动流程,有效提升系统启动速度,同时确保磁盘健康管理。特别针对SSD用户提供了额外优化建议,帮助用户彻底告别开机自检的困扰。 阅读详情
Os_fundmental_more
  1. 80386实模式 : 而且每一个指针都是指向实际的物理地址
    保护模式:保护模式的一个主要目标是确保应用程序无法对操作系统进行破坏
    实际上,80386就是通过在实模式下初始化控制寄存器(如GDTR,LDTR,IDTR与TR等管理寄存器)以及页表,然后再通过设置CR0寄存器使其中的保护模式使能位置位,从而进入到80386的保护模式

  2. 支持内存分页机制,提供了对虚拟内存的良好支持

  3. 地址是访问内存空间的索引

    int boo=1;
    int *foo=&a;
    //这里的boo是一个整型变量,foo变量是一个指向boo地址的整型指针变量,foo中储存的内容就是boo的逻辑地址。
    
  4. 线性地址空间是80386处理器通过段(Segment)机制控制下的形成的地址空间
    每个运行的应用程序有相对独立的一个或多个内存空间段,每个段有各自的起始地址和长度属性

  5. 在操作系统完成对80386处理器页机制的初始化和配置(主要是需要操作系统通过特定的指令和操作建立页表,完成虚拟地址与线性地址的映射关系)后,应用程序看到的逻辑地址先被处理器中的段管理功能单元转换为线性地址,然后再通过处理器中的页管理功能单元把线性地址转换成物理地址。

    1. 分段机制启动、分页机制未启动:逻辑地址—>*段机制处理*—>线性地址=物理地址
    2. 分段机制和分页机制都启动:逻辑地址—>*段机制处理*—>线性地址—>*页机制处理*—>物理地址
  6. uCore设计中采用了一定的面向对象编程方法
    虽然C 语言对面向对象编程并没有原生支持,但没有原生支持并不等于我们不能用 C 语言写面向对象程序

    1. 目前主要是采用了类似C++的接口(interface)概念,即是让实现细节不同的某类内核子系统(比如物理内存分配器、调度器,文件系统等)有共同的操作方式
    2. 接口在 C 语言中,表现为一组函数指针的集合
      1. 物理内存管理子系统 pmm_manager (位于lab2/kern/mm/pmm.h)
  7. 这样基于此数据结构,我们可以实现不同连续内存分配算法的物理内存管理子系统,而这些物理内存管理子系统需要编写算法,把算法实现在此结构中定义的init(初始化)、init_memmap(分析空闲物理内存并初始化管理)、alloc_pages(分配物理页)、free_pages(释放物理页)函数指针所对应的函数中。而其他内存子系统需要与物理内存管理子系统交互时,只需调用特定物理内存管理子系统所采用的pmm_manager数据结构变量中的函数指针即可

  8. 这个bootloader可以切换到X86保护模式
    lab1中的OS只是一个可以处理时钟中断和显示字符的幼儿园级别OS

  9. 实际make qemu,执行了makefile中 “qemu:”后的命令,
    在命令中,由qemu加载了img
    命令eg:

            `-parallel dev'
                重定向虚拟并口到主机设备 dev 中。
    
    qemu -hda ucore.img -parallel stdio        # 让ucore在qemu模拟的x86硬件环境中执行
    
  10. qemu monitor:

    1. 很多功能也都是通过Qemu的monitor机制实现的
    2. Qemu monitor主要由三部分构成monitor client,QMP,monitor server
    3. 使用 monitor command 监控 QEMU 运行状态
    4. 在启动 QEMU 的时候,同时也会启动 monitor 的控制台,通过这个控制台,可以与 QEMU 或者运行状态的虚拟机进行交互
gdb之target — GDB远程调试
  1. 嵌入式开发,一般要用到远程调试,即在本地PC上debug远程target上运行的程序 (这里是因为img/kernel跑在机器简陋的qemu上而们没有gdb调试功能),(gdb通过localhost:1234,链接到qemu中 对 可直接执行文件 进行调试)

  2.     gdb>target remote IP:2345
    
  3. Ucore中用到的是AT&T格式的汇编

  4. 这里正好说了一下bootasm.S文件的作用。计算机加电后,由BIOS将bootasm.S生成的可执行代码从硬盘的第一个扇区复制到内存中的物理地址0x7c00处,并开始执行。
    此时系统处于实模式。可用内存不多于1M。
    
  5. GDT全称是Global Descriptor Table,中文名称叫“全局描述符表”,想要在“保护模式”下对内存进行寻址就先要有 GDT。GDT 表里的每一项叫做“段描述符”,用来记录每个内存分段的一些属性信息,每个“段描述符”占 8 字节。

  6. Bootload的启动过程可以概括如下:

    首先,BIOS将第一块扇区(存着bootloader)读到内存中物理地址为0x7c00的位置,同时段寄存器CS值为0x0000,IP值为0x7c00,之后开始执行bootloader程序。CLI屏蔽中断(屏蔽所有的中断:为中断提供服务通常是操作系统设备驱动程序的责任,因此在bootloader的执行全过程中可以不必响应任何中断,中断屏蔽是通过写CPU提供的中断屏蔽寄存器来完成的);CLD使DF复位,即DF=0,通过执行cld指令可以控制方向标志DF,决定内存地址是增大(DF=0,向高地址增加)还是减小(DF=1,向地地址减小)。设置寄存器 ax,ds,es,ss寄存器值为0;A20门被关闭,高于1MB的地址都默认回卷到0,所以要激活A20,给8042发命令激活A20,8042有两个IO端口:0x60和0x64, 激活流程: 发送0xd1命令到0x64端口 --> 发送0xdf到0x60,打开A20门。从实模式转换到保护模式(实模式将整个物理内存看成一块区域,程序代码和数据位于不同区域,操作系统和用户程序并没有区别对待,而且每一个指针都是指向实际的物理地址,地址就是IP值。这样,用户程序的一个指针如果指向了操作系统区域或其他用户程序区域,并修改了内容,那么其后果就很可能是灾难性的),所以就初始化全局描述符表使得虚拟地址和物理地址匹配可以相互转换;lgdt汇编指令把通过gdt处理后的(asm.h头文件中处理函数)描述符表的起始位置和大小存入gdtr寄存器中;将CR0的第0号位设置为1,进入保护模式;指令跳转由代码段跳到protcseg的起始位置。设置保护模式下数据段寄存器;设置堆栈寄存器并调用bootmain函数;

  7. GRUB是一个专业的Bootloader,它对这些提供了很好的支持。

  8. 中断描述符表(Interrupt Descriptor Table,IDT)

  9. 可以通过函数print_stackframe来跟踪函数调用堆栈中记录的返回地址

  10. sign.c:一个C语言小程序,是辅助工具,用于生成一个符合规范的硬盘主引导扇区。

  11. tools/vector.c:生成vectors.S,此文件包含了中断向量处理的统一实现。

  12. kern/driver/intr.[ch]:实现了通过设置CPU的eflags来屏蔽和使能中断的函数;

  13. kern/driver/intr.[ch]:实现了通过设置CPU的eflags来屏蔽和使能中断的函数;

  14. kern/trap/trap.[ch]:紧接着第二步初步处理后,继续完成具体的各种中断处理操作;

  15. libs/defs.h:包含一些无符号整型的缩写定义。

  16. Libs/x86.h:一些用GNU C嵌入式汇编实现的C函数(由于使用了inline关键字,所以可以理解为宏)。

  17. 以Intel 80386为例,计算机加电后,CPU从物理地址0xFFFFFFF0(由初始化的CS:EIP确定,此时CS和IP的值分别是0xF000和0xFFF0))开始执行。在0xFFFFFFF0这里只是存放了一条跳转指令,通过跳转指令跳到BIOS例行程序起始点。BIOS做完计算机硬件自检和初始化后,会选择一个启动设备(例如软盘、硬盘、光盘等),并且读取该设备的第一扇区(即主引导扇区或启动扇区)到内存一个特定的地址0x7c00处,然后CPU控制权会转移到那个地址继续执行。至此BIOS的初始化工作做完了,进一步的工作交给了ucore的bootloader。

  18. 键盘的初始化函数kbd_init

  19. ......
    // 通过中断控制器使能键盘输入中断
    pic_enable(IRQ_KBD);
    
  20. 时钟的初始化函数clock_init

  21. 电脑上有个硬件设备叫做中断控制器

  22. 从CPU的角度看,它的工作就是一直读取指令,然后执行。如果没有意外,这个过程会一直持续下去。

  23. 现在我的年到不就是while(1)吗

  24. 关键原理就是CPU有个外部时钟,这是一个倒数计时器,初始时会设置一个数字,比如1000,然后每个时钟脉冲数字减一,减到0的时候,就给CPU发一个信号,CPU会中断当前程序,来处理这个信号,这个信号的处理程序会重置计时器,并执行信号处理函数,如此反复,起到了时间分片的效果。
    信号处理函数可能会重新选择另一个任务来执行,这个就是进程切换。

  25. 实际中,能打断当前程序的中断事件有很多种,包括硬中断和软中断两大类

带模糊加工时间的柔性作业车间调度理论和GA复现(python) 用GA求解带模糊加工时间的柔性作业车间调度问题 阅读详情

相关推荐

SMMU软件指南之使用案例(Stage 1使用场景)

一、Stage 1使用场景 1、Scatter-gather 2、64 位操作系统中的 32 位设备 3、操作系统设备隔离 4、用户空间设备驱动程序 5、用户空间共享虚拟地址 (SVA)

AI-安全-功耗 1417

解决fixing(d:)stage 1问题

@TOC开机出现fixing(d:)stage 1,如何解决 今天早上公司的主美说电脑开不了机,一直显示fixing(d:)stage 1,发现是一直在自动修复。 一般电脑开机都会进行自动检查,这是全面的,彻底的,一旦发现有故障就会自动修复 出现fixing(d:)stage 1,说明D盘出现了故障 修复速度很慢或者卡死说明软件的占用过高或者是电脑硬件的问题 可以进行开启快速启动或者超快速启动来进行跳过全面检查 开机的时候按下del键,就可以进入到bios界面 在bios界面找一找,看到stepup或者

qq_43245628的博客 17万+

修改开机扫描和修复驱动

修改开机出现的扫描和修复驱动问题,再次开机就没有了。

Fixing(D:) Stage 2: 77%(4892798 of 631772); Total: 65%;ETA: 0:01:21.的解决方案

一、背景描述 今天下午打开自己的DELL笔记本,然后就出现了如图所示的界面,速度很慢,一直显示 Fixing(D:)Stage 2:77%; Total:65%;ETA:0:01:21.按照字面翻译过来说是正在修复D盘,第二阶段进度,77%,总进度65%,预计时间0:01:21,也就是1分21秒。 猜测这应该是电脑的修复。电脑的修复,也能理解,因为这是电脑正常的行为,一般电脑开机都会进行自动检查,如果检测出有故障,电脑就会自动修复。 可是不知道为什么会出现这种情况。 二、问题原因 出现Fixin.

No8g攻城狮的博客 10万+

C#精准获取Windows已安装应用清单的完整方案

Windows已安装应用识别是IT资产管理、安全合规与自动化运维的基础能力。其核心原理在于突破文件系统表象,以注册表为可信数据源,分层解析HKLM/HKCU、64位/32位视图及MSI Products路径中的元数据。技术价值体现在可验证(如过滤SystemComponent=1)、可关联(通过ProductCode绑定补丁与许可证)、可操作(启动路径二次验证+卸载命令沙箱执行)。典型应用场景包括终端合规审计、软件资产清查、静默卸载脚本开发及多版本应用聚合分析。本文聚焦C#原生实现,覆盖注册表四路采集、La

weixin_33552698的博客 634

【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读

半波整流是一种利用二极管的单向导通特性,将交流电转换为直流电的基础电路。它通过“切除”交流电的半个周期,仅保留另外半个周期来实现整流。1 开关电源超快学习思路点击跳转1.1开关电源的原理、结构和实物入门篇-超简单解读点击跳转1.2开关电源的EMI输入电路-超简单解读点击跳转倍压整流适用于需要高电压、小电流的特殊场合,通过电容充放电实现电压倍增。

2301_81299416的博客 2924

python操作系统启动过程_Bootloader启动流程一般可分为stage1、stage2、stage3三个阶段。...

【论述题】S50卡的存储结构是什么?【单选题】以下关于GCC选项说法错误的是: 。【论述题】RFID基础实验电路板有几种?每种可以做哪类实验。【单选题】存盘并退出vi的指令是_____。【单选题】镀锌钢管不能采用以下何种连接形式【多选题】在我国用户配电系统常用电压有【单选题】在TN系统中,中性线和保护线分别设置的是【单选题】以下关于GCC选项说法错误的是:【单选题】Bootload...

weixin_33765530的博客 763

EDK2多平台编译实战:从树莓派到RK3399的UEFI固件构建

本文提供了从树莓派到RK3399的EDK2多平台编译实战指南。详细介绍了UEFI固件构建的环境搭建、交叉编译配置、平台描述文件修改及常见问题排查,帮助开发者掌握为不同ARM架构硬件构建标准化启动固件的核心技能。

weixin_29193259的博客 836

Linux GRUB启动分析之stage1

我最近学习Linux 基础,有时候看到一些新的东西,就会去找资料,关于喜欢刨根问底的同学,这个博主的文章是很好的,很棒的,真心的大牛,虚心去学习,原来学的东西都感觉记忆不深刻,一知半解,而这位博主的文章很好的让我理解, 还远远达不上透彻,前路慢慢,努力学习,莫问前程 闲言少叙。我们首先看下Linux的启动过程流程图: 这个流程图是大牛M. Tim Jones在Inside Linux...

一生只画眉 2667

Unity零基础到入门 ☀️| 轻松学会 Unity界面布局和简单实例——入门级!(^_−)☆

入门级Unity知识,一起加油呀!

努力前行,总会成为自己心中的那道光 1万+

如何在 DevOps 管道中实现 AI?

AI与DevOps的融合(AIOps)正在重塑软件开发生命周期。本文系统阐述了AI在DevOps中的五大应用场景:智能监控、自动化测试、安全防护、CI/CD优化和事件管理,并提出了六步实施框架:痛点识别、工具选型、流程集成、智能监控、MLOps和治理合规。通过Netflix、Google等企业的实践案例,验证了AI在提升部署效率(降低40%故障率)、缩短问题解决时间(MTTR减少60%)方面的显著价值,同时指出数据质量、模型偏差等实施挑战。研究表明,战略性地

介绍AWS Azure GCP devops Terraform 等技术 497

Grub源码分析

GRUB整体分析总体上我们可以把GRUB看成一个微型的操作系统,他有Shell,支持Script,有文件系统……我们可以把Stage1和Stage1.5看成一个引导程序,而Stage2则是一个操作系统,只不过这个操作系统是专门用来引导其他操作系统的操作系统,为此,Stage2支持像kernel,initrd,chainloader等等为此目的而设置的内部“命令”。3.1  GRUB引导操作系统的两

DanXer的Linux专栏 6226

Unity零基础到进阶 ☀️| Unity中的 GC及优化 超级全面解析 ☆(ゝω・)v 建议收藏!

介绍: 在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。 Unity中将垃圾回收当作内存管理的一部分,如果游戏中废弃数据占用内存较大,则游戏的性能会受到极大影响,此时垃圾回收会成为游戏性能的一大障碍点。 本文我们主要学习垃圾回收的机制,垃圾回收如何被触发以及如何提GC收效率来提高游戏的性能。 Unity内存管理机制简介 要想了解垃圾回收如何工作以及何时被

努力前行,总会成为自己心中的那道光 6万+

linux bios boot 分区,分区(/BIOSBOOT)Bios boot partition

https://www.cnblogs.com/f-ck-need-u/p/7084627.htmlBIOS boot partition是一个分区,gnugrub下图非原文内容,是本人提供,用于直观地感受bios boot分区。Biosboot分区是必要的,因为GPT使用紧跟在MBR后面的扇区来保存实际的分区表,但在传统的MBR分区架构中,这些扇区并没有特殊的作用,这样的结果是没有足够的可用空...

weixin_34443842的博客 1万+

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4373

损失函数大汇总(三十八)(AUCPR Loss附公式推导与代码)

本文系统介绍了AUCPR Loss的原理与应用。针对不平衡分类任务中AUC指标不够敏感的问题,提出通过优化PR曲线面积(AUCPR)来提升模型性能。文章详细推导了AUCPR的可微近似实现:首先用sigmoid函数软化阈值判断,构造可微的TP/FP/FN计数;然后基于软Precision和Recall计算近似PR曲线面积;最后通过数值积分得到可优化的损失函数。特别讨论了温度参数τ对训练稳定性的影响,并比较了AUCPR与AUC、AP等指标的异同。该方法适用于医学筛查、欺诈检测等极端不平衡场景,能更准确反映模型对

悦学共鸣,温柔以待,汇聚光芒,共同成长 441

GRUB&MBR引导

(ubuntu下搜索gnome-disk可以打开磁盘管理) 简单开机过程 :①按下电源后,计算机自检(POST),如果硬件设备(CPU、内存、硬盘、光驱、各种卡)都没有问题,BIOS会检查各个硬盘的MBR,看有没 有可以执行的代码,如果你把grub安装到第一个硬盘的MBR上,那BIOS就会找到它,然后把控制权交个这段代码(其实就是512字节大小的 stage1)。  ②stage1根据...

weixin_30387423的博客 291

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

GRUB源码概述及简单应用

 前言本篇文章前七章是引自Linuxsir的一篇文章(http://www.linuxsir.org/bbs/showthread.php?t=170348&page=4) 第七章之后的是针对一些小应用的修改。 [编辑]概述以下是我毕业论文的一部分:)对grub源代码进行了一些分析,其实也没有什么新的东西,基本上是对斑竹的一个总结,然后细化了一些内容。可能有些不对的地方

linux学习专栏 6531

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

UBoot讲解和实践-----------讲解(一)

Boot Loader之ARM Uboot移植 阶段一 理论篇 1.boot loader需要完成的任务: 1》设计程序的入口地址 2》建立异常中断处理向量 3》初始化CPU各种模式的堆栈和寄存器 4》初始化系统中要使用的各种片内外设备 5》初始...

csshuke的专栏 390

U-boot分析与移植(1)----bootloader分析

一、Boot Loader 概念 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,他就是所谓的引导加载程序(Boot Loader)。 嵌入式软件在Flash存储器中的分布图 二、为什么需要BootLoader? Boo...

weixin_30646505的博客 82

grub的boot loader安装在磁盘上的位置

在很多资料上介绍grub的引导过程时,都是:bios->MBR->boot loaderboot loader是grub或者lilo。但是他是放在什么位置?很多资料上都没有标明。通过阅读文档http://www.iamting.com/user1/1032/archives/2006/3089.html。中制作grub引导软盘的过程:cd /boot/grub  dd if=stage...

weixin_34409822的博客 506

GRUB整体分析 -很详细 (转)

<br /><br />总 体上我们可以把GRUB看成一个微型的操作系统,他有Shell,支持Script,有文 件系统……我们可以把Stage1和Stage1.5看成一个引导程序,而Stage2则是一个操作 系统,只不过这个操作系统是专门用来引导其他操作系统的操作系统,为此, Stage2支持像kernel, initrd,chainloader等等为此目的而设置的内部“命令”。 <br />3.1  GRUB引导操作系统的两种方式 <br />3.1.1 直接引导方式 <br />GRUB同时支持 Li

3396

bootloader详解(转载)

一。bootloader介绍 bootloader是硬件在加电开机后,除BIOS固化程序外最先运行的软件,负责载入真正的操作系统,可以理解为一个超小型的os。目前在Linux平台中主要有lilo、grub等,在Windows平台上主要有ntldr、bootmgr、grldr等。这里以grub-0.97为基础描述bootloader的启动过程。 一般grub主要分为stage1和stage2两个...

sdulibh的专栏 9876

基于ARM的嵌入式Linux移植真实体验(2)――BootLoader

 BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍然

梦想、过程、结果 564

OS调研 操作系统启动引导 入门级理解

OS booting 这两天一直在调研操作系统的启动过程,buaa ppt讲的有些太云里雾里了,而且我对底层的好奇心比较强烈,逻辑粗糙不能自洽就会很难受,到现在对OS booting终于有了一个至少可以让我不会难受的理解,据学长说有细节错误,看个乐即可。 操作系统的启动过程大概分成以下部分 开机,CPU复位 跳转到BIOS POST(power on self test开机自检) boot sequence(读取驱动顺序) 加载MBR,从MBR读取boot loader stage1 st

yeshengxiaohuli的博客 1893
上一篇: 如何写Makefile-极简版
下一篇: linux命令++
MexLink?IN.EX?
博客等级 码龄7年 1粉丝 27原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值