学习Linux的体会之 (一)

本文详细介绍了在Linux系统中实现多重引导的方法,通过合理分区,使得Windows和Ubuntu系统可以在同一硬盘上共存并能自由选择启动。解释了开机过程中BIOS、MBR和bootloader的作用,以及如何通过调整bootloader的位置实现场景切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看了下鸟哥的Linux私房菜基础学习篇,并且也在自己的笔记本上做了做实验,也有了些关于多重引导、分区、开机运行过程和grub的一些体会,现就把它写下来,希望日后用时可以回过头来看看这篇文章。

    首先来介绍分区和多重引导

我相信很多人都装过双系统,包括我在内。之前我所装的都是在一个系统装好之后,在进入这个系统以这个系统为环境在装另一个。例如我先装一个win7系统,分为4个分区,c,d,e,f,c为主分区,其他为逻辑分区。然后在d盘在用镜像装一个ubuntu系统。也就是说这样的装法当你所装的第一个系统坏掉以后是没有办法启动第二个系统的。而且在你所装的第一个系统内可以看到d盘空间变小,原因是你装了ubuntu。这是为什么呢?现在我也没有想明白。

上述的装法是你将一块硬盘分为一个主分区,一个扩展分区(逻辑分区则是由扩展分区在分出来的),win7是装在主分区上,而Ubuntu装在逻辑分区的。而现在我所讲述的将是你将一块硬盘分为2个主分区,一个扩展分区,win7和Ubuntu分别装在两个主分区上,而扩展分区供其他用途之用。这样,当你进入win7时你将看不到Linux所占用的分区,也就是它对于win7是隐藏的。装好之后当你开机时你就可以自由选择所要启动的系统了。那么这个选择是如何实现的?我们先来讨论一下电脑的开机过程。

当按下开机按钮后,电脑首先运行的是BIOS这个固化好的一个程序,它会检测你计算机中的一些设备,并根据你对BIOS的设置去启动第一块硬盘(如果你只有一块硬盘那就可以忽略了),然后找到该硬盘的主引导分区(MBR),这个MBR在硬盘的第一个扇区,只占用很小的空间,里面会存放主引导程序(bootloader),这些主引导程序的作用是帮你把对应的操作系统内核加载到内存中,接下来的事CPU的控制权就交给操作系统了。说白了开机过程就是BIOS,MBR,BOOTLEADER,OS。

在明白了开机过程之后,我们在回到自由选择系统这个话题。当你按第二种方法装好两套系统后,其实各系统的bootloader都是装在MBR或者该系统所在分区的启动扇区(也即第一个扇区)上。Win7默认装在MBR上,但当你装Ubuntu时可以选择bootloader的安装位置。所以如果你将Linux的主引导程序装在该分区的启动扇区上的话,MBR会找到Linux的主引导程序所在的启动扇区,然后在由Linux的主引导程序来加载kernel。这就是所谓的多重引导。

在补充一点,对分区而言,一块硬盘中的分区主分区与扩展分区最多只能为4个,而扩展分区最多为一个。

 

 

 

 

 

 

 

 

 

 

 

### Linux 系统课程学习心得 学习 Linux 系统课程是次深入了解操作系统底层原理的机会。以下是关于该主题的些重要心得体会: #### 文件系统与挂载机制 Linux 的文件系统设计非常灵活,支持多种不同的文件系统格式(如 ext4、XFS)。通过 `mount` 命令可以实现不同设备上的文件系统的动态挂载[^1]。这种灵活性使得开发者能够轻松管理存储资源并优化性能。 #### 初始化过程分析 启动过程中调用了核心函数 `start_kernel()` ,它负责完成系列重要的初始化操作,包括但不限于内存分配器设置、调度程序配置以及进程0的创建等关键环节[^1] 。理解这些步骤有助于掌握整个系统的运行逻辑。 #### 中断处理机制 对于实时性强的应用场景而言, 正确理解和运用中断显得尤为重要.Linux 使用 8259A 芯片作为其基础架构的部分来管理和响应硬件发出的各种信号(即所谓的 “中断”). 这些信号可能来自键盘输入或其他外设活动.[^1] 下面给出段简单的 C 代码用于演示如何注册自定义中断处理器: ```c #include <linux/interrupt.h> #include <linux/module.h> static irqreturn_t my_interrupt_handler(int irq, void *dev_id){ printk(KERN_INFO "Interrupt received\n"); return IRQ_HANDLED; } int init_module(void){ int result = request_irq(IRQ_NUMBER,my_interrupt_handler,IRQF_SHARED,"MyDevice",NULL); if(result != 0){ printk(KERN_ERR "Unable to register interrupt handler.\n"); return result; } return 0; } void cleanup_module(void){ free_irq(IRQ_NUMBER,NULL); } ``` 此示例展示了基本框架下添加新的中断服务程序的方法. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值