请选择 进入手机版 | 继续访问电脑版

学JAVA网

 找回密码
 立即注册

Linux源码并没有那么神奇

[复制链接]
发表于 2018-8-15 11:21:08 |显示全部楼层
Linux源码并没有那么神奇
1. 上电

CPU进入实模式 -> 从0xFFFF0开始执行BIOS代码 -> 系统检测 -> 启动存储第一个扇区并读入到内存0x7C00并调整到此位置

2. bootsect.S

将自己移动到0x90200 -> 将setup.S读取到0x90200处 -> 利使用BIOS中断0x13读取磁盘参数 -> 显示“Loading system...” -> 将setup板块后的system板块加载到内存0x10000位置

3. setup.S

利使用BIOS终端读取机器参数 -> 将system板块从0x10000~0x8ffff整体下移到0x00000 -> 进入保护模式:加载中断形容符表寄存器(idtr)、全局形容符表寄存器(gdtr)、开启A20地址线、重设两个中断控制芯片8259A(0x20~0x2f)、设置控制寄存器CR0 -> 跳转到system最前的head.s

4. head.s

加载各个数据段寄存器 -> 重设中断形容符表idt,时256个中断项皆指向一个只报错的哑中断子程序ignore_int -> 重设全局形容符表gdt(将段长8MB改为16MB)-> 检测A20地址线能否开启 -> 设置分页内存 -> 利使用返回指令跳转到main函数执行(跳转到main是最激动人心的时刻,终于能用C语言了!)

5. main

根据setup.S获取的机器参数对变量进行初始化 -> 对硬件进行初始化:圈套门、块设施、字符设施、tty -> 手段设置第一个任务(task 0)进程0 -> 设置运行中断 -> 切换到任务0 -> 利使用fork()创立运行init()的进程1
此后:

  • 进程0,空闲时运行,执行pause()系统调使用,并调使用调度程序
  • 进程1,安装根文件系统、显示系统信息、运行系统初始化资源配置文件rc中的命令、运行使用户在shell中命令或者程序
6. 放飞意志

接下来就是Linux功可以源码了

  • 中断解决
  • 设施管理
  • 进程管理
  • 内存管理
  • 文件服务

以前一直都觉得操作系统很复杂,当然的确复杂,你不去看她的源码,她永远都是一个黑夹子;读了她的源码后,其实和普通应使用程序实质区别并不是很大,只是多了少量硬件解决,多受了少量限制而已。所以,隔行如隔山,只是由于你没有探过头,瞧瞧瞄一眼就可看清大概轮廓。



Linux0.0.1版源代码.rar (97.13 KB, 下载次数: 1)

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|学JAVA网

GMT+8, 2018-12-12 08:58 , Processed in 0.176023 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Copyright © 2015-2018 xuejava网 / 鲁ICP备17054568号-1
回顶部