Linux内核入门专栏
基于Linux0.12内核版本,敲开Linux内核的大门。
ZMK_02
talk is cheap, show me your code!
展开
-
16-内存管理篇(Part2: memory.c——mm的核心)
内存管理篇:Part2-memory.c0 写在前面1 页异常处理函数1.1 do_wp_page——写时复制实现1.1.0 do_wp_page函数的主要功能1.1.1 do_wp_page函数的流程图1.1.2 do_wp_page及其调用的函数代码与注释1.2 do_no_page缺页异常处理函数1.2.0 do_no_page函数的主要功能1.2.1 do_no_page函数的流程图1.2...原创 2020-03-28 20:58:23 · 575 阅读 · 0 评论 -
15-内存管理篇(Part1: 原理 + page.s + swap.c)
内存管理篇:part1-原理讲解0.0 内存管理(mm)目录下的文件及功能0.1 分页机制0.2 两个机制:写时复制机制 + 需求加载机制0.2.1 写时复制机制(Copy on write)0.2.2 需求加载机制(Load on demand)0.3 Linux中物理内存的管理和分配0.3.1 主内存区域示意图0.3.2 进程代码和数据在其逻辑地址空间的分布图1 page.s程序功能和代码注解...原创 2020-03-26 23:02:02 · 585 阅读 · 0 评论 -
14-main函数的初始化——内核主线
1.main程序主要功能1)利用前面setup设置的硬件参数确定主内存的开始地址、高速缓冲区末端地址等2)初始化工作,包括内存管理、块设备、字符设备和tty等的初始化3)move_to_user_mode()切换到任务0开始运行4)任务0 fork一个init进程(任务1)后,陷入不断执行pause的死循环中5)任务1执行init函数(1.execve创建进程2进行应用环境初始化 2.进...原创 2020-03-25 22:14:41 · 832 阅读 · 0 评论 -
13-阶段总结二:Bochs下调试bootsect.S、setup.S、head.s
调试bootsect.S setup.S head.s0. 编译、运行1. bootsect.S的调试(Intel汇编风格,16位)2. setup.S的调试(Intel汇编风格,16位)3. head.s的调试(AT&T汇编风格,32位)4. 小结0. 编译、运行1.如何用as86 ld86 及 gcc的as ld联合编译?编译bootsect.s : as86 -0 -a -o ...原创 2020-03-24 22:45:14 · 460 阅读 · 0 评论 -
12-调试bootsect.s的一个坑!
0 原本计划:前两天(2020-3-22),准备写一篇调试bootsect,setup,head三个程序的总结,但出师不利,调试bootsect 第一段代码(即移动本身到0x9000)就掉坑了,反复检查发现rep movw后0x9000竟然一片0x0000(就像我大脑 一片空白,一脸懵逼),折腾了2天,才解决!1 掉坑日志第一个坑:在BIOS加载引导程序bootsect到内存位置0x0...原创 2020-03-23 23:55:50 · 423 阅读 · 0 评论 -
11 阶段总结一:详解OS的引导启动过程(含Bochs模拟软件的使用)
0 前文总结前面10篇文章重点讲述了两个实例(一个引导程序boot.s的启动、两个任务A和B的轮流切换)、Linux0.12内核的boot目录下的bootsect.S/setup.S/head.s三个引导启动程序以及Linux内核体系结构和原理,最终将控制权交给了内核system模块的main程序(执行初始化工作)。摘要:这篇文章主要梳理自PC上电后如何加载内核到物理内存的一系列过程。...原创 2020-03-21 22:52:05 · 2175 阅读 · 0 评论 -
10-引导启动程序(Part3:head.s)
0 head.s程序的主要功能1)重置IDt、GDT表2)测试A20地址线是否开启,没有则死机3)检测PC是否含有数学协处理器芯片(80287、80387或其兼容芯片),并设置CR0相应位4)设置管理内存的分页处理机制(页目录表项、页表项设置)5)利用ret将预先放置堆栈中的/init/main程序的入口地址弹出,去运行main()程序head.s程序流程图如下1 head.s汇...原创 2020-03-20 20:42:02 · 258 阅读 · 0 评论 -
09-引导启动程序(Part2:setup.S)
0 setup.S功能简介1.利用BIOS中断将读取的机器系统数据放置0x90000开始的位置(覆盖掉了bootsect.S程序所在的地方),这些参数将被内核中相关程序使用2.将system模块(0x10000~0x8ffff)下移到内存绝对地址0x00000处3.加载中断描述符表寄存器和全局描述符表寄存器,并开启A20地址线4.重置两个中断控制芯片8259A,将硬件中断号重置为0x20~...原创 2020-03-19 21:17:10 · 288 阅读 · 0 评论 -
08-引导启动程序(Part1:bootsect.S)
#include <linux/config.h>.global begtext, begdata, begbss, endtext, enddata, endbss.textbegtext:.databegdata:.bssbegbss:.textSETUPSEG = 0x07c0SYSSIZE = DEF_SYSSIZE ! system模块的大小INITS...原创 2020-03-18 23:32:15 · 340 阅读 · 0 评论 -
07-Linux内核体系结构(重点)
07-Linux内核体系结构:重点1.1 整体式的单内核模式1.2 Linux内核系统体系结构1.3 Linux内核对内存的管理和使用1.4 中断机制1.5 Linux的系统调用1.6 系统时间和定时1.7 Linux进程空间1.8 Linux系统中堆栈的使用方法(重点)1.9 Linux0.12内核源代码的目录结构摘要:概述Linux内核体系的理论及主要功能函数1.1 整体式的单内核模式以...原创 2020-03-17 14:55:33 · 281 阅读 · 0 评论 -
06-分段分页机制、任务切换
0.概述: 分段分页机制属于内存管理,是两种不同的地址变换技术。 任务切换作为任务管理的核心,也是本文重点讲述的部分。 这两部分内容尽量以“图表”展示1.分段分页机制分段、分页机制是两种不同的地址变换机制。**分段机制**适应了程序中不同类型段和大小的逻辑分区,即段的大小是可变的。**分页机制**按固定页大小(通常4K)管理内存以支持“虚拟存储技术”(虚拟存储技术”:线性地址空间...原创 2020-03-16 22:54:23 · 210 阅读 · 0 评论 -
05-一个简单的多任务内核实例(part2:head.s)
# head.s 包含32位保护模式初始化设置代码、时钟中断代码、系统调用中断代码# 和两个任务的代码。在初始化完成后程序移动到任务0开始执行,并在时钟中断控制# 下进行任务0和1直接的切换操作LATCH = 11930 #定时器初始计算值,即每隔10ms发送一次中断请求SCRN_SEL = 0x18 #屏幕显示内存段选择符TSS0_SEL = 0x20 #任务0的TSS段选择...原创 2020-03-15 22:37:32 · 554 阅读 · 1 评论 -
04-一个简单的多任务内核实例(part1:boot.s)
! boot.s程序! 首先利用BIOS中断把内核代码(head代码)加载到内存0x10000处,然后移动到内存0处! 最后进入保护模式,并跳转到内存0(head代码)开始处继续运行...原创 2020-03-14 16:14:11 · 195 阅读 · 0 评论 -
03-C函数与汇编的相互调用
引个玉:按道理有四种组合:1.C函数之间的相互调用2.汇编例程的相互调用3.C函数调用汇编例程4.汇编例程调用C函数但这里,主讲1和4。因为2用四条指令即可完成:push pop call ret,而3则于4调用原理一样1.C函数调用机制exch.c源文件:void swap(int *a, int *b){ int c; c = *a, *a = *b;...原创 2020-03-13 19:58:51 · 303 阅读 · 0 评论 -
02-一个引导程序的框架——boot.s
准备知识:CPU上电后自动把CS设置为0xF000,段基地址为0xFFFF0000,段长度为64KB,而IP设置为0xFFF0故,CPU代码指针指向0xFFFFFFF0处,即ROM BIOS存放的位置,开始执行BIOS的硬件自检和初始化功能在执行完准备加载操作系统的引导程序到0x7c00处前,会检查引导程序是否有效,有效标志0xAA55.若有效,则跳转到0x7c00处开始执行引导程序...原创 2020-03-12 16:54:28 · 387 阅读 · 0 评论 -
01-Linux的诞生
抛个砖:谁促就了Linux系统的诞生?这个“谁”,就是五大支柱“UNIX、Minix、Internet、GNU、POSIX标准”下面主要讲解五大支柱。支柱一:UNIX系统Linus参考了M.J.Bach著的《UNIX操作系统设计》,Linus使用了该书的很多函数的算法(普及一点:UNIX是1969年由肯·汤普逊(Ken Thompson)因想在PDP-7计算机玩他非常喜欢的星际游...原创 2020-03-11 16:40:52 · 224 阅读 · 0 评论