引导程序

02-一个引导程序的框架——boot.s

蹲街弑〆低调 提交于 2020-03-17 22:40:04
抛个砖:电脑启动后,如何加载OS? 引块玉: CPU上电后自动把CS设置为0xF000,段基地址为0xFFFF0000,段长度为64KB,而IP设置为0xFFF0 故,CPU代码指针指向0xFFFFFFF0处,即ROM BIOS存放的位置,开始执行BIOS的硬件自检和初始化功能 在执行完准备加载操作系统的引导程序到0x7c00处前,会检查引导程序是否有效,有效标志0xAA55. 若有效,则跳转到0x7c00处开始执行引导程序(这里是boot.s),否则会转去尝试其它启动设备, 若没有找到则显示“NO ROM BASIC”后死机。 boot.s测试程序: ! ! boot . s Linux0 . 12 内核的bootsect . s的框架 ! 功能:在屏幕上显示“Loading system . . . ”且鸣叫一声 ! ! . global 声明全局标识符,供链接器使用 ( 主要通过这些标识符可合并不同源文件的段 ) ! . global begtext , begdata , begbss , endtext , enddata , endbss ! 三个段定义在同一重叠地址范围中,因此本程序实际不分段 . text begtext : ! 在代码段定义begtext标号 . data begdata : ! 在数据段定义begdata标号 . bss begbss : !

寒假第二次作业作业引导和提示

陌路散爱 提交于 2020-02-08 14:05:22
寒假第二次作业引导和提示 第二次作业涉及的面比较多,如果之前没有自学相关知识可能会觉得无从下手,以下给大家分析一下这次作业 1. 该以怎样的顺序完成作业,侧重点在哪 本次作业主要考察Git、GitHub使用,代码规范意识,一定的程序设计能力(基于命令行),PSP,以及单元测试和性能分析改进。 在开始时建议先建一个空白文稿统计自己花在各个地方的耗时,方便到时候写到PSP表格上(关于PSP表格,参考作业附录)。 之后先别急着写程序,先看一些Git、GitHub的教程,学会基础使用之后,按照作业要求fork主仓库,根据示例目录结构建好自己的目录。 建好目录之后,便可以根据自己使用的语言,根据作业要求,制定代码规范,代码规范按照markdown格式,写到codestyle.md中。 这时便可以开始分析需求、设计模块。需求分析清楚后便可以开始写程序。 当你有所产出之后,便可以进行commit,并push到github。作业要求commit 10次并不多,只是让大家养成习惯。 对于你已经写好的函数、类,要及时进行单元测试,此次作业要求最少10个测试用例。 单元测试记得满足“FAIR”原则,即fast(快速)、automated(自动)、isolated(隔离)、repeatable(可重复)。具体使用什么框架并无限制。 单元测试应该随着程序开发逐渐进行。确保你之后的修改不会导致单元测试的失败

BIOS的启动原理学习--加载引导程序

做~自己de王妃 提交于 2020-01-27 22:24:44
在Windows系统以及有图形界面的其他操作系统中要想执行一个程序,必须在窗口中双击它,或者在命令行界面中输入相应的执行命令。从计算机底层机制上讲,这其实是在一个已经运行起来的操作系统的可视化界面或命令行界面中执行一个程序。感觉要进入先有鸡还是先有蛋的循环之中了。但是,在开机加电的一瞬间,内存中什么程序也没有,没有任何程序在运行,不可能有操作系统,更不可能有操作系统的用户界面。 既然软件方法不可能执行BIOS,那就只能靠硬件方法完成了。这让我想起了老式打字机,每打完一行字都要手动推一下滑杆,手动换位,挺麻烦的。 理解参考 实模式,保护模式 Intel x86架构的CPU可以分别在16位实模式和32位保护模式下运行。为了兼容,也为了解决最开始的启动问题,Intel将所有x86架构CPU(包括最新型号的CPU)的硬件都设计为加电即进入16位实模式状态运行。同时,还有一点非常关键,即将CPU硬件逻辑设计为加电瞬间强行将代码段寄存器(cs)的值置为0xFFFF,偏移量(IP)的值置为0x0000,这样CS:IP就指向0xFFFF0这个地址位置。BIOS程序的第一条指令就设计在这个位置上。 以上是一个纯硬件完成的动作!如果此时这个位置没有可执行代码,那就什么也不做,计算机就此死机。反之,如果这个位置有可执行代码,计算机将从这里的代码开始,沿着后续程序一直执行下去

Linux系统框架和引导加载程序

风流意气都作罢 提交于 2020-01-12 03:41:21
一、系统相关 1、框架 二、一些概念 1、交换空间 内存管理必须要使用的硬盘空间,称为交换空间。(/proc/meminfo) 默认情况下,Linux系统上运行的每个进程都有自己专用的内存分页。一个进程不能访问另一个进程正在使用的内存分页。可以使用共享内存技术来创建可共享的内存分页。(ipcs) 2、初始进程 内核创建的第一个进程。该进程在系统上启动所有其他进程。(/etc/inittab) 3、设备文件 将硬件设计标识为设备文件。 字符(c)文件:调制解调器和终端 块(b)文件:磁盘等 网络文件:使用数据包发送和接收的设备 linux为系统的每个设备创建特殊文件,称为节点。所有与设备的通信都通过节点完成,每个节点都有一个唯一的数据对(主设备号和次设备号)(ls-al sad* ttyS*) linux使用虚拟文件系统(VFS)与每个文件系统进行链接。 4、核心GNU实用程序-coreutils软件包 处理文件的实用程序 处理文本的实用程序 管理进程的实用程序 5、做理解的事,理解要做的事。 逐步消除扩展理解。 6、一个有用命令 dir /s /b >1.txt cd ** 三.Linux的引导加载程序 1、MBR 当计算机引导操作系统时,BIOS会读取引导介质上最前面的512字节(主引导记,MBR,masterboot record),也就是第一个扇区。 主引导记录包括两部分内容

Win7 双系统安装Centos7,并由windows引导程序引导

萝らか妹 提交于 2019-12-30 13:59:55
1. 在windows磁盘管理中,压缩卷,腾出40G,需保证一个磁盘设备最多只有3个主分区 2. 网上下载centos7的dvd.iso 3. 使用UltraISO刻录到U盘 4. 重启系统F12使用usb启动 5. 安装centos7,包括选择安装套件、磁盘分区, 磁盘分区,先选择不安装引导程序,然后分出 /boot xfs 500M / ext4 余下全部 /home ext4 10G /swap swap 5G 选择完才选择安装引导程序 不安装Kdump 6. 使用easyBCD,添加新条目,NeoGrub,安装,配置 配置如下: title Centos 7 root (hd0,4) kernel /vmlinuz-3.10.0-327.el7.x86_64 ro root=/dev/sda6 ro quite vga=791 initrd /initramfs-3.10.0-327.el7.x86_64.img boot 7. 重启,选择NeoGrub,选择Centos 7 8. 首次进入需要进行配置,选择接受条款,然后点击c继续,接着就进入系统了,安装完成 来源: https://www.cnblogs.com/phoenix-smile/p/5968654.html

PC启动过程详解

大憨熊 提交于 2019-12-27 21:21:50
系统启动过程 1. 预引导(Pre-Boot)阶段 2. 引导阶段 3. 加载内核阶段 4. 初始化内核阶段 5. 用户登录阶段 基本概念: BIOS:即“Basic Input/Output System”(基本输入输出系统),它是一组被“固化”在计算机主板上的一块ROM中直接关联硬件的程序,保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制,它包括系统BIOS(主板BIOS).其它设备BIOS(例如IDE控制器BIOS、显卡BIOS等)其中系统BIOS占据了主导地位.计算机启动过程中各个BIOS的启动都是在它的控制下进行的.   内存地址:内存空间的最基本单位是bit,8bit视为一个字节,即我们常用的单位B,内存中的每一个字节都占有一个地址(地址是为了让CPU识别这些空间,是按照16进制表示的),而最早的8086处理器只能识别1MB(2的20次方B)的空间,这1MB内存中低端(即最后面)的640KB就被称为基本内存,而剩下的内存(所有的)则是扩展内存。这640KB的空间分别由显存和各BIOS所得。(主存储器空间 RAM 0000-9ffff 显存地址空间 A0000-bffff 各类ROM地址空间 c0000-fffff) 一 预引导阶段   第一步: 当我们按下电源开关时

Linux系统目录详解

ぐ巨炮叔叔 提交于 2019-12-24 03:18:57
/bin 引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。 /sbin 类似/bin ,但不给普通用户使用,虽然如果必要且允许时可以使用。 /root root用户目录。 /lib 根文件系统上的程序所需的共享库。 /lib/modules 核心可加载模块,特别是那些恢复损坏系统时引导所需的(例如网络和文件系统驱动)。 /etc 特定机器的配置文件。 /etc/rc or /etc/rc.d or /etc/rc?.d 启动、或改变运行级时运行的scripts或scripts的目录,更详细的信息见关于init 的章。 /etc/passwd 用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息。格式见passwd 的man页。 /etc/fdprm 软盘参数表。说明不同的软盘格式。用setfdprm 设置。更多的信息见setfdprm 的man页。 /etc/fstab 启动时mount -a命令(在/etc/rc 或等效的启动文件中)自动mount的文件系统列表。 Linux下,也包括用swapon -a启用的swap区的信息。见4.8.5节和mount 的man页。 /etc/group 类似/etc/passwd ,但说明的不是用户而是组。见group 的man页。 /etc/inittab init 的配置文件。 /etc/issue

Linux 引导启动程序(boot)

让人想犯罪 __ 提交于 2019-12-23 13:50:20
主要描述 boot/ 目录中的三个汇编代码文件,见列表 3-1 所示。正如在前一章中提到的,这三个 文件虽然都是汇编程序,但却使用了两种语法格式。 bootsect.s 和 setup.s 采用近似于 Intel 的汇编语言语法,需要使用 Intel 8086 汇编编译器和连接器 as86 和 ld86 ,而 head.s 则使用 GNU 的汇编程序格式,并且运行在保护模式下,需要用 GNU 的 as 进行编译。这是一种 AT&T 语法的汇编语言程序。 使用两种编译器的主要原因是由于对于 Intel x86 处理器系列来讲, GNU 的编译器仅支持 i386 及以 后出的 CPU 。不支持生成运行在实模式下的程序。 阅读这些代码除了你需要知道一些一般 8086 汇编语言的知识以外,还要对采用 Intel 80X86 微处理器的 PC 机的体系结构以及 80386 32 位保护模式下的编程原理有些了解。所以在开始阅读源代码之前可以先大概浏览一下附录中有关 PC 机硬件接口控制编程和 80386 32 位保护模式的编程方法,在阅读代码时再就事论事地针对具体问题参考附录中的详细说明。 这里先总的说明一下 Linux 操作系统启动部分的主要执行流程。当 PC 的 电源打开 后, 80x86 结构的 CPU 将 自动进入实模式 ,并 从地址 0xFFFF0 开始自动执行程序代码

Linux磁盘分区

自作多情 提交于 2019-12-23 04:07:27
磁盘分区主要有两种分区格式,MBR和GPT。由于近年来磁盘容量的不断扩大,造成了读写上的一些困扰,甚至有些2TB以上的磁盘分区已经让某些操作系统无法存取,因此又多了一种新的磁盘分区格式GPT。 MBR(Master Boot Record) 早期磁盘中第一个扇区里面含有的重要信息我们称之为MBR。 早期为了兼容Windows的磁盘,使用的是主引导记录的方式来处理启动引导程序与分区表。这两个东西一起存放在第一个扇区。 第一个扇区通常为515字节(原本扇区都设计为512字节)。其中包含: 主引导记录 (MBR):可以安装引导程序的地方,通常为446字节。 分区表 (partition table):记录整个硬盘分区的状态,64字节。 分区表只有64字节, 只能存在四组记录区,一组记录区16个字节 , 假设硬盘的设备文件名为/dev/sda时,那么这四个分区的文件名如下: /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 这四组划分信息称为 主要分区或扩展分区 (Primary 和Extended),分区的最小单位为柱面(所有磁片上的同一个磁道组成一个柱面)。 如何划分多个分区 就是利用扩展分区,如下图 P1为主分区,P2为扩展分区。 扩展分区的目的就是为了使用额外的扇区来记录分区信息,扩展分区本身并不能拿来进行格式化。 若进行格式化

引导器之争 lilo and grub

断了今生、忘了曾经 提交于 2019-12-22 01:18:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 引导加载程序之争:了解 LILO 和 GRUB From http://www.ibm.com/developerworks/cn/linux/l-bootload.html 对照并比较这两个竞争对手 从普通的桌面用户到 Linux® 系统管理员,大部分 Linux 用户都使用过一种名为引导加载程序的工具。此类工具的不同变种会提供不同层次的支持和功能。在很多情况下,Linux 发行版默认安装的引导加载程序并不总是适合需要;每个引导加载程序的默认设置也是如此。在本文中,Laurence Bonney 讨论了两个流行的引导加载程序 —— LILO 和 GRUB —— 的优点和缺点,并建议了很多配置,以充分发掘机器的潜力。 在不考虑他们的工作或专业情况下,所有 Linux 用户都会使用的是哪个工具?引导加载程序。通过本文了解引导加载程序的工作原理,认识两个流行的引导加载程序 LILO(LInux LOader)和 GNU GRUB(GRand Unified Boot loader), 并研究两者各自的优点和缺点。 什么是引导加载程序? 最简单地讲, 引导加载程序(boot loader) 会引导操作系统。当机器引导它的操作系统时,BIOS 会读取引导介质上最前面的 512 字节(即人们所知的 主引导记录