【NROS-01】核心态程序 Bootloader 装载操作系统

Bootloader

Bootloader 是计算机启动之后第一个被执行的程序,负责装载操作系统。硬件能做的事情比较简单,内核结构复杂,硬件只能装载较为简单的 bootloader,由 bootloader 装载 OS。

计算机启动

计算机启动大约流程:

  1. 加电自检等,这是硬件厂商的事情;
  2. Bios 装载 Bootloader 到内存位置 0x7c00;
  3. Bootloader 装载 OS 到特定位置,跳转到 OS 执行。

GCC & GNU-ld

GCC 和 GNU-ld 是久经检验的工具,虽然也存在着一些缺点,但是对于操作系统开发他们都提供了很好的特性。

时间: 2024-10-21 05:37:35

【NROS-01】核心态程序 Bootloader 装载操作系统的相关文章

程序员的操作系统、浏览器

程序员的操作系统 注:本文摘自作者正在写的新书<云时代的程序猿> 2014.7.10 一路走来 在我上大二之前,除了windows操作系统,应该是没见过别的操作系统,当时觉得可能所有电脑都和windows差不多,再后来,我认识了linux,知道了linux还有很多发行版,同时也听说了mac. 可能我们那个时代的孩子都和我差不多. 说说国产操作系统 在写本节之前,我不小心看了一篇文章:国产操作系统大盘点,包括"红旗linux"(倒闭了)."银河麒麟".&q

Linux应用程序的装载和执行

在研究c文件的编译/装载/运行之前,先了解ELF文件的概念,ELF(Executable and Linking Format)是一种对象文件的格式.ELF文件格式是UNIX系统实验室作为应用程序二进制接口而开发发布的,是Linux的主要可执行文件格式. 简单来说,ELF是“编译器/连接器”和“内核/CPU”之前的二进制接口,一种固定下来的文件格式.编译链接器将C程序编译为对应体系结构下的机器可执行文件,而这种文件和CPU以及内核按照ELF格式来约定,比如代码段/数据段/bss段就是在ELF文件

Java SE 01 JAVA程序的起点

设置变量 程序安装目录为 C:\Program Files\java\jdk1.7.0_67\bin 高级系统设置,环境变量设置里在;号后添加该位置 在CMD中 通过java命令来直接验证环境变量是否配置成功 写程序 class VarDemo//定义类 {     public static void main (String[] args)//定义主函数     {     System.out.println("Hello World");//输出hello world     

如何设置Java虚拟机内存以适应大程序的装载

Java虚拟机对于运行时的程序所占内存是有限制的,当我们的项目或者程序很大时,往往会照成内存溢出. 举个例子: public class SmallTest1 { public static void main(String[] args) { byte[] array = new byte[1024*1024*500]; } } 当定义这样一个500MB的数组时,就会造成JVM内存溢出: 而Java虚拟机默认的程序运行能得到的内存大小是随系统的,由Java的api体系结构中,点击Java: 后

微信小程序开发 [01] 小程序基本结构和官方IDE简介

1.小程序账户注册 实际上在进行开发时没有注册小程序账户也是可以的,官方提供的IDE提供实时编译模拟预览,和当前你有没有绑定小程序账户没有关系. 当然,最终你要正式上线你的小程序的话,肯定还是需要账户的,申请流程不再阐述了,请参考官方文档<小程序注册>,个人开发者选择个人就行了. 2.官方demo和基本结构 在下载官方的小程序开发工具之后,新建项目选择小程序: 然后IDE会自动生成一个简单的小程序,如下: 在中间的目录结构中可以看到,不论是根目录下还是其他单个模块的页面下,有这四类文件: .j

01背包问题程序解析

#include <iostream>#include <cstdio>#include <cstring>using namespace std;//问题描述:给定 n 种物品和一个容量为 c 的背包,物品 i 的重量是 wi,其价值为 vi.//问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? //分析:面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次 //解决方法:声明一个大小为 m[n][c]

《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

<30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的装载地址 5 6 ; 以下这段是标准FAT32格式软盘专用的代码 7 8 JMP entry 9 DB 0x90 10 DB "HELLOIPL" ; freeparam 启动区的名称可以是任意的字符串(8字节) 11 DW 512 ; 每个扇区(sector)的大小(必须为512字节)

[自制简单操作系统] 1、从0-1到汇编再到c语言的奥秘

目录: 1.用0-1编写最简单的操作系统 2.用汇编改写上面0-1程序 2.1 只用DB的汇编改写版  2.2 加入RESB汇编的改写版  2.3 进一步使用汇编替换0-1文件  2.4 核心程序也用汇编改写  2.5 向汇编程序中加入IPL(启动程序装载器)  2.6 从启动区执行操作系统(读盘的应用) 3.汇编和C语言混合开发 3.1 32位开发及C语言混合开发引入 3.2 汇编引入C语言(用汇编写C语言函数)  3.3 C语言实现内存写入  3.4 C语言指针的强大  3.5 色号设定与调

程序员的自我修养-链接、装载与库-6 可执行文件的装载与进程

可执行文件的装载与进程 可执行文件只有装载到内存后才能被CPU执行.基本过程就是把程序从外部存储器中读取到内存中的某个位置. 程序(可执行文件)是一个静态的概念.就是一些预编译好的指令和数据组成的一个文件.进程则是一个动态的概念.很多时候,把动态库叫作运行时. 每个程序在执行时,都拥有自己独立的 虚拟地址空间. 虽然,内存中的虚拟地址空间很大,但是任意一个程序都必须在OS的监督下使用资源,不能任意访问或者占用内存.大多数时候我们在Windows下碰到的"进程因非法操作需要关闭" 和 L