操作系统实践(1)——从引导开始

操作系统实验报告 一、实验一 通过 VMware 虚拟机软件安装 Linux 二、实验目的 (1)学会安装 VMware 虚拟机软件并掌握其使用方法。 (2)学会使用 VMware 虚拟机安装 Linux 操作系统 (3)熟悉 Linux 下的 C/C++编程环境:vi/gedit 编辑器 + gcc 编译器 +gdb 调试器。 三、实验内容(实验原理/运用的理论知识、算法/程序流程图、步骤和方法、关键源代码) 1)安装 VMware workstation 虚拟机软件并新建一个虚拟机 2)使用 VMware 虚拟机安装 L 阅读详情

注:本次实践参考《orange’s一个操作系统的实现》

第一段引导代码

boot.asm

        org 07c00h
        mov ax,cs
        mov ds,ax
        mov es,ax
        call DispStr
        jmp $
DispStr:
        mov ax,BootMessage
        mov bp,ax
        mov cx,16
        mov ax,01301h
        mov bx,000ch
        mov dl,0
        int 10h
        ret
BootMessage:
        db "Hello! HackoooX!"
        times 510-($-$$) db 0
        dw 0xaa55
nasm boot.asm -o boot.bin
sudo dd if=boot.bin of=/dev/fd0 bs=512 count=1

实践结果:

实践环境:Ubuntu 13.10
操作系统实践截图

问题:

  1. 没有软盘?

    • 用虚拟机vmware,添加一个软盘,创建的文件格式为.flp,1.44Mb.重启虚拟机里面的系统。
    • 把上述代码刻录到软盘后,.flp文件就可以用来做启动引导了,虚拟机直接新建一个系统,带软驱的,然后软驱选择刚才创建的文件,启动,OK。
  2. 为什么用ORG伪指令?有什么作用?
    简单来说,汇编在编译的时候,那些标号,实际上是指标号在当前文件的偏移。假设上面DispStr的偏移地址是 0xa(我没去算,这里只是假设),编译完DispStr就用 0000h(基址)+0xa(偏移地址) 代表。
    如果加上org 0x7c00h 伪指令,编译完 DispStr 就用 0x7c00h(基址)+0xa(偏移地址) 代表。
    用软驱启动时,bios把软盘的第一个扇区的内容加载到0x7c00h的位置,call DispStr 和 mov ax,BootMessage 才能正确执行。
    参考文章:
    ORG: Binary File Program Origin(这个是manual里的,靠谱)
    boot.asm为什么要使用org汇编指令
    ORG指令详解(汇编)

  3. $$代表啥?
    原来学AT&T汇编没注意,$代表当前位置,$$代表段开始的位置, $-$$ 就是当前位置在段内的偏移量。

  4. 软盘的结构如何?
    参考文章
    软盘结构及软盘数据的读取

  5. 为什么软盘的内外圈面积不一样,但是存储的字节大小一样?
    参考里面采纳的答案:
    一张磁片,各磁道周长不同,为什么每磁道扇区数相同,且每扇区容量相同?
【操作系统安装与引导】Windows引导详解     本章将详细介绍操作系统引导,来为后面的操作系统安装学习奠定基础,不过这也是十分枯燥的一章,涉及的所有都是理论知识,掌握了这些理论知识,你能更好的玩好操作系统    一.BIOS及UEFI引导概念    BIOS:      BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。在IBM PC兼容系统上,是一种业界标准的固件... 阅读详情

相关推荐

操作系统(一)引导程序

操作系统(一)引导程序序原理操作系统的启动过程FAT12文件系统BIOS内存分布代码编译BIOS中断代码分析 序 在自学操作系统的过程中,试图自己实现。参考了一些文献(《30天自制操作系统》、《现代操作系统》等),决定将零散的信息进行一下整理,梳理一下思路。并一点点的开始实现自己的操作系统。我将已经实现的部分上传到了我的GitHub,代码中不足之处还请路过的大神们指点。(希望我能写完) 原理 操作...

xinjiyuan97的博客 1万+

操作系统实践(二)

  本节课的主要内容是:文件读写。在C语言中,我们可以使用fopen,fclose等函数进行文件操作。但下放到操作系统层次,就是一些文件的系统调用了。本节的主要内容也就是介绍下与文件相关的一些系统调用。   我发现自己写的,远没有老师提供的资料全面。所以在这里,我就直接用图片说明内容啦~   以上就是本节的主要理论学习内容,下面还有三个作业进行巩固,我就把自己的答案附在上面,可能不是很简洁,但我后面会慢慢的进行修改完善滴~ 一、练习一: #include<stdio.h> int

gls_nuaa的博客 573

从零开始的操作系统 (第二章:计算机体系结构和引导过程)

译至: Writing a Simple Operating System – 2 Computer Architecture and the Boot Process 上一章: 从0开始的操作系统:第一章: 简介 2.1引导过程 现在,我们开始我们的旅程, 当我们重启我们的计算机,它必定会重启,最初计算机是没有操作系统这个概念的。 不知为何,它需要加载一个操作系统–无论从什么地方加载–可能是计算...

aboutmn的博客 1688

模拟实现页面置换算法(OPT、FIFO、LRU)C++代码

一、C++代码实现 #include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <unordered_set> #include <ctime> using namespace std; typedef pair<int, int> PII; const int N = 1010;//执行序列最大长度 const

一只快乐的小蒟蒻~ 3756

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 637

从零开始搭建属于自己的语音识别API服务器(ASRT开源项目)

材料准备 云服务器 (本人使用的的是阿里云服务器 Ubuntu(Linux操作系统)) 环境搭建 1. Python 3.7 话不多说直接上代码 sudo su yum -y install git yum -y install gcc yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-deve

zhi_qian的博客 5647

操作系统实践

1 线程的创建与启动1.1 进程与线程进程和线程的区别在于:简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在...

longjing314的博客 819

2.13寸电子墨水屏HINK-E0213+esp8266

很久以前买的一块电子墨水屏,运气很好,这个型号HINK-E0213资料很全,而且微雪官网也有相关电路资料等。

梦境虽美,却不长. 3000

手写操作系统:一切从主引导扇区开始

手写操作系统:完成主引导扇区

2301_80926085的博客 3233

Reality Capture控制点修复/合并模型

通过增加控制点/修改对齐设置参数来修复模型被分为两个部分的解决方法

草履虫建模的博客 5239

【libnice】meson + vs2022,生成win32工程

libnice

突围 947

操作系统的引导

​操作系统的引导,就是计算机从“懵懂通电”到“精神抖擞运行”的启动流程,像极了人类从赖床到上课的全过程。

2301_79790385的博客 1872

DeerFlow 系列教程 第十二篇 | Tools 工具体系——从内置工具到 MCP 扩展

文件此工具允许 Agent 在运行时创建新的自定义 Agent。@toolsoul: str, # SOUL.md 的完整内容description: str, # Agent 的一行描述创建流程从获取agent_name写入配置文件(包含 name 和 description)写入灵魂文件SOUL.md(定义 Agent 的人格和行为)更新中的错误回滚MCP(Model Context Protocol)是一种标准协议,允许 AI Agent 连接外部工具服务器。DeerFlow 通过。

weixin_43674738的博客 180

1.5 操作系统引导

同时执行这个磁盘引导程序,并且扫描分区表,找到这个活动分区,也就是安装了操作系统的分区,那只要找到活动分区的起始地址,接下来就可以去读入这个活动分区的第一个部分的内容,也就是引导记录,把这个引导记录读入内存之后,就可以执行这个引导记录里边的程序,那这个程序完成的事情是会从根目录下面去找到完整的操作系统初始化程序。好,那除了你能看得见的这些磁盘分区之外,在你的磁盘的开头的位置会流出一片区域,这片区域用于存储主引导记录,英文缩写叫 MBR,这里面主要包含了两个重要的东西,首先是磁盘引导程序,其次是分区表,

2501_92019824的博客 998

2025年9月GESP(C++四级):排兵布阵

作为将军,你自然需要合理地排兵布阵。地图可以视为n行m列的网格,适合排兵的网格以 1 标注,不适合排兵的网格以 0 标注。现在你需要在地图上选择一个矩形区域排兵,这个矩形区域内不能包含不适合排兵的网格。请问可选择的矩形区域最多能包含多少网格?

王老师青少年编程 1377

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

操作系统引导

操作系统引导:①CPU从一个特定主存地址开始,取指令,执行OM中的引导程序(先进行硬件自检,再开机)②将磁盘的第一块一一主引导记录读入内存,执行磁盘引导程序,扫描分区表③从活动分区(又称主分区,即安装了操作系统的分区)读入分区引导记录,执行其中的程序④从根目录下找到完整的操作系统初始化程序(即启动管理器)并执行,完成“开机”的一系列动作。

2302_79330072的博客 695

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

1.5操作系统引导

本文系统介绍了计算机操作系统的引导过程。首先定义了引导的基本概念及其重要性,指出这是计算机启动的关键环节。随后详细解析了磁盘结构中的主引导记录(MBR)和分区引导记录(PBR)等核心数据结构。重点阐述了引导过程的六个步骤:从BIOS自检开始,依次加载MBR、扫描分区、执行PBR程序,最后通过启动管理器完成系统初始化。文章还比较了Windows、Linux等不同操作系统的引导特点,解释了BIOS、UEFI等关键技术概念,并提供了常见引导问题的排查方法。全文强调引导过程是一个从硬件到软件的渐进式加载机制,每一阶

2302_80233472的博客 864

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

手写操作系统(1)——HelloOS

让我们一起学习,由简单的Hello OS入手,最终码出一个属于自己的操作系统! 文章目录**前言**Hello OS引导程序环境准备下载源代码编译操作系统**流程****编译****安装****失败?****细节补充****显卡与printf****字符模式****思考题**致谢 前言 为什么要学写一个操作系统? 为什么要学写一个操作系统? 为什么要学写一个操作系统? 众所周知,操作系统是所有软件的基础(也是面试的三板斧之一!)。 对于后端开发而言,操作系统层面的进程、线程、内存、I/O等相关知识根本逃.

青玉白露的博客 7399

操作系统引导(开机过程)

操作系统引导--开机时如何让操作系统运行起来

qq_43527718的博客 5396

操作系统引导的那点事

系统引导环节是操作系统启动过程中的最重要环节,也是最容易出问题的环节之一。按照个人计算机的硬件标准,引导环节发生在计算机的硬件系统检测完毕之后。具体的引导工作,是由BIOS完成的。BIOS维持一个可用于引导计算机的硬件设备列表,比如本地硬盘、本地光驱、网络、USB接口设备等,然后做一个排序。BIOS会试图从整个序列的第一个设备开始,检查其状态和引导能力。比如针对光驱,则首先会判断光驱中是否存在光盘

物联网操作系统HelloX技术论坛 8936

【王道操作系统】ch1计算机系统概述-05操作系统引导

操作系统引导通俗理解:当电脑开机时,让操作系统在我们的电脑上运行起来。操作系统内核装入内存并启动系统的过程。系统引导通常是由一个被称为启动引导程序的特殊代码完成的,它位于系统ROM中,用来完成定位内核代码在外存的具体位置、按照要求正确装入内核至内存并最终使内核运行起来的整个系统启动过程。该过程中,启动引导程序要完成多个初始化过程,当这些过程顺利完成后才能使用系统的各种服务。这些过程包括初始引导、内核初始化、全系统初始化。

verse_armour的博客 2023

操作系统实验(1:操作系统的引导)

实验目的 建立对操作系统引导过程的深入认识; 掌握操作系统的基本开发过程; 能对操作系统进行简单的控制,揭开操作系统的神秘面纱。 实验内容 此次实验的基本内容是:编写一个放入引导扇区的操作系统引导程序bootsect.s,和一个进入保护模式前的设置程序setup.s,并将该bootsect.s和setup.s编译后在Bochs中运行,进行实验。 编写的引导程序bootsect.s和setup.s主...

realfancy的博客 2772

用 GRUB 引导自己的操作系统

在 PC 机上捣鼓自己的操作系统遇到的第一个难题就是如何将内核加载到内存中执行。如果读过于渊写的《自己动手写操作系统》就会知道这部分的工作还是蛮繁琐的。而且实际上这部分工作和操作系统没太大的关系。好在随着 linux 等开源操作系统的发展,开源的引导加载程序也已经发展的很成熟了。我们可以利用前人的成果,将自己的操作系统改造成可以用现有引导加载程序引导的内核。   引导加载程序(BootLoad

xyjikl 4257
上一篇: 二叉树可视化--Graphviz
下一篇: 操作系统实践(2)——工欲善其事,必先利其器
小灰马
博客等级 码龄17年 55粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值