2006-04-01 22:30:00 freefalcon 阅读数 7103
  • U7 Ubuntu系统的U盘启动与安装

    本课程是《U盘分区与启动》课程的深化,聚焦于广泛应用的Ubuntu系统,介绍用U盘来启动和安装Ubuntu系统,课程内容包括: Ubuntu系统有什么特点? 如何制作U盘上的Ubuntu系统? 如何利用U盘上的Ubuntu系统安装硬盘上的Ubuntu系统? GRUB4DOS如何编写以上的启动项?

    3457 人正在学习 去看看 孙宇彤

旧硬盘要换成新硬盘,需要在新硬盘上安装独立的操作系统,但没有光驱,该如何是好?

刚开始,我并没有意识到问题所在,便像通常安装双系统那样,直接在当前系统下运行硬盘上的安装程序,将新系统安装到了新硬盘上,但在卸掉旧硬盘后,麻烦出现了:新硬盘不能引导,因为主引导记录(MBR)在第一块硬盘上!

后来找到一种解决办法,其完整过程如下:

1. 将新硬盘作为从盘接到计算机上。

2. 进入老系统的“控制面板/管理工具/计算机管理”(我的系统为Windows 2000 Professional,XP与此类似),选择其中的“磁盘管理”,对新硬盘进行分区格式化,注意将其主分区格式化为FAT32,不要是NTFS,否则后面的工作无法进行。在系统中保留一个FAT32分区是有诸多好处的。

3. 从网上下载vFloopy(或者其它类似的虚拟软驱,比如maxdos等),按照其说明将其安装到C盘,并在boot.ini中添加一个DOS启动项。

4. 从网上下载smartdrv.exe,用于加速DOS下安装系统时的文件拷贝速度,将其放置到vFloopy的安装目录下,或者放到新硬盘的主分区上。这一步不是必需的,但是有无这一步带来的安装速度的差异是相当显著的。

5. 将系统安装文件中的i386目录拷贝到新硬盘的主分区上。

6. 重起Windows,如果vFloopy安装成功的话,将会看到一个启动菜单,选择进入DOS系统。

7. 执行smartdrv.exe。

8. 进入新硬盘主分区,DOS下的盘符跟Windows下会不一样,这需要按照C:盘D:盘的顺序进行尝试,总之,找到i386所在的那个分区,进入i386目录,执行winnt.exe,熟悉的Windows安装界面出现了,如果你没有先执行smartdrv.exe的话,将会看到一个关于smartdrive的提示信息,你可以忽略它,继续执行,但速度将会慢很多。具体的安装过程这里不再多说。

9. 安装结束后,就可以将第一块硬盘卸下来,或者交换二者的主从盘顺序(如果你需要旧硬盘中的数据转移到新硬盘中),再重新启动计算机,你会发现新硬盘可以独立工作了。

2019-04-12 22:44:38 weixin_36904568 阅读数 111
  • U7 Ubuntu系统的U盘启动与安装

    本课程是《U盘分区与启动》课程的深化,聚焦于广泛应用的Ubuntu系统,介绍用U盘来启动和安装Ubuntu系统,课程内容包括: Ubuntu系统有什么特点? 如何制作U盘上的Ubuntu系统? 如何利用U盘上的Ubuntu系统安装硬盘上的Ubuntu系统? GRUB4DOS如何编写以上的启动项?

    3457 人正在学习 去看看 孙宇彤

一:操作系统的启动

  1. 操作系统一开始是放在硬盘上的。
  2. BIOS(基本IO处理系统)加电自检,检查外设。把Bootloader从磁盘中的主引导扇区加载到0×7C00
  3. Bootloader找到硬盘的起始扇区读入内存,加载操作系统,把操作系统加载到内存上,并跳转到操作系统的起始地址

二:操作系统的接口

  1. 外设:中断和IO
  2. 应用程序:系统调用和异常
接口 来源 处理 响应
中断 外设(如硬件的计时器和网络的中断) 异步 响应会持续进行(已经由操作系统快速完成)
异常 不良的应用程序(出现如非法指令或其他意外的情况) 同步 响应会杀死或重新执行程序
系统调用 应用程序(向操作系统提出服务请求) 异步或同步 响应可能等待或持续

处理过程

操作系统

  1. 建立中断、异常、系统调用的ID与对应服务进程映射关系的表
  2. 建立内核堆栈,用于保护状态
  3. 在内核态建立独立地址空间TLB

1:中断

硬件
  1. 硬件设置中断标记。
  2. CPU获取中断标记,产生中断ID,发给操作系统
软件
  1. 保护当前处理状态
  2. 根据中断ID查到中断服务程序地址,中断服务程序开始处理。
  3. 处理完成后清除中断标记
  4. 恢复之前保存的处理状态

2: 异常

  1. 保护当前处理状态
  2. 根据异常ID查到中断服务程序地址,异常服务程序开始处理。杀死程序,或者重新执行异常指令。
  3. 恢复之前保存的处理状态
  4. 应用程序会重新执行指令

3:系统调用

程序访问主要是通过高层次的API接口而不是直接进行系统调用。

  1. 应用程序主动发起请求,用户态会转换到内核态,同时切换堆栈。
  2. 操作系统获取参数,直接执行请求。
2004-11-01 19:13:00 chemmy_l 阅读数 1668
  • U7 Ubuntu系统的U盘启动与安装

    本课程是《U盘分区与启动》课程的深化,聚焦于广泛应用的Ubuntu系统,介绍用U盘来启动和安装Ubuntu系统,课程内容包括: Ubuntu系统有什么特点? 如何制作U盘上的Ubuntu系统? 如何利用U盘上的Ubuntu系统安装硬盘上的Ubuntu系统? GRUB4DOS如何编写以上的启动项?

    3457 人正在学习 去看看 孙宇彤
       想在两块硬盘上安装不同的操作系统,于是分别在第一块硬盘上安装了windowXP,第二块硬盘上安装了linux(redhat)。由于ntloader不能引导其他硬盘上的操作系统,于是决定用第二块硬盘上来启动计算机,于是在bios上把启动硬盘设置为第二块硬盘,由于前面安装redhat时把grub安装在了mbr上,所以启动完就进入了grub界面,于是按c来到grub的命令行grub>,用root noverify(hd0,0)说明根,因为我的XP安装在了第一块硬盘的第一个主分区,然后用chainloader +1设置引导该分区的第一个扇区,然后就是boot。可是结果确实引导失败,为什么呢?
        后来才想到好像window只能从启动硬盘上来引导,由于我用第二块硬盘来引导所以会有问题。于是我又进入grub>,在rootnoverify(hd0,0)后,用map (hd0,hd1)和map (hd1,hd0)来映射这两个硬盘,当boot后我发觉就可以引导XP了,这证明了前面的判断。
       然后么就进入redhat然后修改grub.conf在最后加上
       title=”WinXP”
       rootnoverify (hd0,0)
       map (hd0,hd1)
       map (hd1,hd0)
       chainloader +1
       重新启动后就能在grub菜单中找到WinXP的选项了,到此就完成了多硬盘下的多系统引导,grub还是相当方便好用的不是么。还有一点就是在grub中无论时IDE还是SCSI硬盘都是hdx这样表示的,一般IDE的编号在前,而SCSI的编号靠后。
2018-04-04 19:01:13 qq_28466517 阅读数 201
  • U7 Ubuntu系统的U盘启动与安装

    本课程是《U盘分区与启动》课程的深化,聚焦于广泛应用的Ubuntu系统,介绍用U盘来启动和安装Ubuntu系统,课程内容包括: Ubuntu系统有什么特点? 如何制作U盘上的Ubuntu系统? 如何利用U盘上的Ubuntu系统安装硬盘上的Ubuntu系统? GRUB4DOS如何编写以上的启动项?

    3457 人正在学习 去看看 孙宇彤

一些概念:

扇区:计算机读取硬盘的时候,不是一个字节一个字节的读取,而是一次读取512字节。每512个字节就称为一个扇区。

启动程序IPL:操作系统的大小远超过512个字节,而且不固定。所以在硬盘的第一个扇区中放入一个启动程序,其主要作用就是加载硬盘中的操作系统到内存。这个启动程序就是BootLoader。几乎所有的操作系统都把加载自己的程序放在硬盘的第一个扇区。

BIOS:基本IO处理系统程序,开始时会首先运行此程序,会完成一些列的功能,包括自检,加载BootLoader等。这个程序代码是常驻内存的,例如有的主板中会有一块烧入BIOS  程序的只读ROM。当开机时,计算机会首先运行BIOS。


操作系统的启动过程:

1.以Intel80386为例,计算机加电后,CPU从物理地址0xFFFFFFF0开始执行指令。这个地址上只存放了一条跳转指令,CPU通过跳转指令跳转到BIOS程序的起点。BIOS完成硬件自检和初始化后,会选择一个启动设备,并且读取该设备的第一个扇区(即主引导扇区或启动扇区)到内存中的固定地址0x7C00处。

2.程序计数器指向0x7C00,系统运行BootLoader,把操作系统加载到内存中。

3.程序计数器指向操作系统在内存中的首地址,系统运行操作系统。


BootLoader实践:

这里有一个很好的教程,有安装虚拟机的步骤
http://www.cnblogs.com/zhongxinWang/p/4361757.html

IPL代码:
; hello-os
; TAB=4		

        ORG        0x7c00            ; 程序的装载地址,启动程序在内存中的规定启示地址

; 以下这段是标准的FAT12格式软盘专用的代码

        JMP       entry
        DB        0x90
        DB        "HELLOIPL"       ; 启动区的名称可以是任意的字符串(8字节)
        DW        512              ; 每个扇区(sector)的大小(必须为512字节)
        DB        1                ; 簇(cluster)的大小(必须为1个扇区)
        DW        1                ; FAT的起始位置(一般从第一个扇区开始)
        DB        2                ; FAT的个数(必须为2)
        DW        224              ; 根目录的大小,一般设成224项
        DW        2880             ; 该磁盘的大小,2880扇区
        DB        0xf0             ; 磁盘的种类,必须是0xf0
        DW        9                ; FAT的长度,9个扇区
        DW        18               ; 1个磁道track有18个扇区
        DW        2                ; 磁头数为2
        DD        0                ; 不适用分区,0
        DD     	  2880             ; 重写一次磁盘的大小
        DB        0,0,0x29         ; 定值
        DD        0xffffffff       ; 表圈的号码,可能
        DB        "HELLO-OS"       ; 磁盘的名称,112字节
        DB        "FAT12"          ; 磁盘格式的名称 。8字节
        RESB      18               ; 空出18个字节,并填充0

; 程序的主体

entry:
        MOV        AX,0            ; 初始化寄存器
        MOV        SS,AX		   
        MOV        SP,0x7c00	   ; SP-栈指针寄存器
        MOV        DS,AX
        MOV        ES,AX
        MOV        SI,msg		   ; SI-源变址寄存器,为指针,指向要输出的信息
putloop:
        MOV        AL,[SI]		   ; 把SI中的每个字节赋值给AL
        ADD        SI,1            ; SI指针向后移动
        CMP        AL,0
		
        JE        fin			   ; 调用中断指令的设置
        MOV        AH,0x0e         ; 显示一个文字
        MOV        BX,15           ; 指定字符的颜色
        INT        0x10            ; 通过主动中断调用BIOS的函数
        JMP        putloop
fin:
        HLT                    	   ; 让CPU待机
        JMP        fin         

msg:
        DB        0x0a, 0x0a       ; 换行
        DB        "hello, world"
        DB        0x0a             ; 换行
        DB        0

        RESB      0x1fe-$          ; $为变量,表示到现在这行的字节数

        DB        0x55, 0xaa	   ; 规定第511,512个字节必须为这个值,计算机才能识别为启动程序

; 以下是启动区以外的部分的输出

        DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00	; 暂时写机器码,具体含义后面讨论
        RESB    4600
        DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        RESB    1469432

保存为.nas文件。使用作者自己编写的汇编器nask.exe,编译为img软盘镜像文件。在虚拟机中可以运行。

参考:《30天自制操作系统》
2019-05-14 15:43:53 qq_42381849 阅读数 86
  • U7 Ubuntu系统的U盘启动与安装

    本课程是《U盘分区与启动》课程的深化,聚焦于广泛应用的Ubuntu系统,介绍用U盘来启动和安装Ubuntu系统,课程内容包括: Ubuntu系统有什么特点? 如何制作U盘上的Ubuntu系统? 如何利用U盘上的Ubuntu系统安装硬盘上的Ubuntu系统? GRUB4DOS如何编写以上的启动项?

    3457 人正在学习 去看看 孙宇彤

概述

启动

  • 计算机体系结构概述
  • 计算机内存和硬盘布局
  • 开机顺序

操作系统是怎么从加电之后,启动到正常运行,最后让应用程序能够正常的去开展各自的工作。

中断、异常和系统调用

  • 背景
  • 中断、异常和系统调用相比较
  • 中断和异常处理机制
  • 系统调用的概念
  • 系统调用的实现
  • 程序调用与系统调用的不同之处
  • 开销

操作系统是如何提供相应的接口来给我们的应用提供服务,以及控制外设和外设进行交互。

操作系统的启动

  • DISK:存放OS(操作系统开机前是存放在磁盘上的)
  • BIOS:基本I/O处理系统(开机后,能够让计算机系统检测各种各样的外设)
  • Bootloader:加载OS(将硬盘上的操作系统加载内存中,让CPU可以执行操作系统)

在这里插入图片描述
看图可以发现在整个计算机内存里面,有一部分空间BIOS已经占据了,还有很多的free space。BIOS第一步需要从一个特定的地址开始执行。一开始加电,BIOS就会从这个地址开始,它会完成一系列的工作。包括POST(加电自检)检查设备能否正常工作。设备(屏幕(显卡),键盘鼠标(执行BIOS))
BIOS会进行一些初始化的基本的检测工作如果检查设备能够正常工作,BIOS就会把BootLoader从磁盘加载到内存中。

BIOS是如何把Bootloader加载到内存中的
在这里插入图片描述

bootloader一般放在硬盘的第一个引导扇区(512byte),BIOS将bootloader加载到内存中。接下来把更复杂的软件OS从硬盘中加载到内存中,这是BootLoader的主要功能。当BIOS把bootloader加载到内存中后,cpu就由bootloader来掌控了,bootloader接下来需要找到硬盘的操作系统的起始扇区以及操作系统的长度。把磁盘块的信息读到内存中去,当bootloader的工作完成后。cpu的控制权就交给OS,也就是cpu在跳到OS的起始位置开始执行。从前期的初始化工作,到后期创建应用程序去运行,这样整个计算机系统以及硬件都处于操作系统的管理下了。

操作系统怎么启动

阅读数 119

没有更多推荐了,返回首页