自制操作系统小样例——参考部分linux0.11内核源码
详细代码戳这里。
一、启动引导
采用软件grub2进行引导,基于规范multiboot2进行启动引导加载。multiboot2的文档资料戳这里。
二、具体内容
开发环境
系统环境:Ubuntu 14.04 / Ubuntu 16.04 32bit/64bit;
辅助软件:Qemu and Xorriso;
编译器:GCC
实现功能
实现了图像模式下的显卡驱动,移植和编写了相关函数和打印函数;(参考《30天自制操作系统》)
实现了全局描述符表、中断描述符表的添加;
完成了中断请求,实现了定时器中断,键盘中断;
对物理内存和虚拟内存,启用分页管理,基于平坦模型实现了它们之间的映射;
创建了内核堆,并对其进行管理;
进行了简单的内核线程的创建,以及按时间片轮转的任务切换。
存在问题
临时创建的内核线程执行结束后,没有对内存资源进行释放。
忽视了原子操作,没有进行临界资源的保护,部分函数不支持重入(却有可能被打断进行任务切换)。
自制操作系统小样例——参考部分linux0.11内核源码的更多相关文章
- linux0.11内核源码剖析:第一篇 内存管理、memory.c【转】
转自:http://www.cnblogs.com/v-July-v/archive/2011/01/06/1983695.html linux0.11内核源码剖析第一篇:memory.c July ...
- linux-0.11 内核源码学习笔记一(嵌入式汇编语法及使用)
linux内核源码虽然是用C写的,不过其中有很多用嵌入式汇编直接操作底层硬件的“宏函数”,要想顺利的理解内核理论和具体实现逻辑,学会看嵌入式汇编是必修课,下面内容是学习过程中的笔记:当做回顾时的参考. ...
- Linux0.11内核源码——内核态线程(进程)切换的实现
以fork()函数为例,分析内核态进程切换的实现 首先在用户态的某个进程中执行了fork()函数 fork引发中断,切入内核,内核栈绑定用户栈 首先分析五段论中的第一段: 中断入口:先把相关寄存器压栈 ...
- linux0.11内核源码——boot和setup部分
https://blog.csdn.net/KLKFL/article/details/80730131 https://www.cnblogs.com/joey-hua/p/5528228.html ...
- linux0.11内核源码——进程各状态切换的跟踪
准备工作 1.进程的状态有五种:新建(N),就绪或等待(J),睡眠或阻塞(W),运行(R),退出(E),其实还有个僵尸进程,这里先忽略 2.编写一个样本程序process.c,里面实现了一个函数 /* ...
- linux0.11内核源码——用户级线程及内核级线程
参考资料:哈工大操作系统mooc 用户级线程 1.每个进程执行时会有一套自己的内存映射表,即我们所谓的资源,当执行多进程时切换要切换这套内存映射表,即所谓的资源切换 2.但是如果在这个进程中创建线程, ...
- Linux0.11内核源码——内核态进程切换的改进
本来想自己写的,但是发现了一篇十分优秀的博客 https://www.cnblogs.com/tradoff/p/5734582.html system_call的源码解析:https://blog. ...
- ubuntu14.04 64位系统下编译3.13.11内核源码
该过程一共分为四步: 1.下载内核:我下载的是3.13.11这个版本的内核! 2.解压内核:我将其解压/home/jello/Downloads/linux-3.13.11目录下!下文将会基于此目录编 ...
- linux0.01内核源码结构
目录 boot 系统引导. fs 文件系统. include 头文件.一些C标准库,系统核心库. init 入口.main.c. kernel 内核. lib 库.C源程序,一些基本核心的程序. mm ...
随机推荐
- poj 2492 A Bug's Life【带权并查集】
就是给一个无向图判是否有奇环 用带权并查集来做,边权1表示连接的两个节点异性,否则同性,在%2意义下进行加法运算即可,最后判相同的时候也要%2,因为可能有负数 #include<iostream ...
- 黑客攻防技术宝典web实战篇:定制攻击自动化习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 指出使用自动技巧在应用程序中枚举标识符时用到的 3 个标识符“触点”. (a) HTTP ...
- Luogu P1069细胞分裂【分解质因数/数论】By cellur925
题目传送门 发现这题真的坑超多啊...调了一晚上终于过了...我好菜啊qwq. 题意说的比较明白,让你求满足(si^k)%(m1^m2)==0的最小k值.然后看数据范围我们知道,我们肯定不能暴力的判断 ...
- github最值得收藏的Bootstrap3后台管理框架
1. AdminLTE AdminLTE是一个完全响应的后台管理模板.基于Bootstrap3框架.高度可定制,易于使用.适合许多屏幕分辨率从小型移动设备到大型台式机. GitHub AdminLTE ...
- [Usaco2015 Feb]Censoring
Description Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so ...
- printf格式化输出参数
1.类型 类型字符用以表示输出数据的类型,其格式符和意义如下表所示: 格式字符 意义 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀0) x,X 以十六进 ...
- Git命令---递归克隆
git clone --recursive https://github.com/rbgirshick/fast-rcnn.git Git命令 --recursive 会递归克隆fast-rcnn项目 ...
- HAL之串口
在STM32cubeMX中 1 外设功能打开 2 GPIO对应管脚的串口功能打开 3 对应GPIO引脚的配置 4串口的配置,中断的设置 在MDK中 5.1 串口初始化MX_USART1_UART_In ...
- 【学习笔记】深入理解js闭包
本文转载: 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...
- Ajax的项目搭建
在搭建Ajax项目之前,首先我们的安装nginx,因为Ajax是基于nginx来运行的, 1.安装nginx 和基本的语法 http://nginx.org/ 上面的nginx的官网,下载直接安装就好 ...