没有合适的资源?快使用搜索试试~ 我知道了~
1. 梳理操作系统概念 2. 学习系统调用,并实现中断机制 3. 了解文件系统的基本内容,实现简易的文件系统 4. 最终实现支持文件系统的操作系统,要求能成功运
资源详情
资源评论
资源推荐
实验结果
堆区管理
do_syscall
sys_brk
_sbrk
实验结果
阶段三
简易的文件系统
Finfo
s_putc
fd_check
fs_open
fs_read
fs_write
fs_lseek
loader
nanos.c
syscall.c
do_syscall
实验结果
操作系统之上的IOE
serial_write
events_read
VGA
实验结果
运行仙剑奇侠传
批处理系统
do_syscall
sys_execve
sys_exit
实验结果
遗留问题
1
上次实验,时钟间隔不是1s输出,问题在于在写in指令的执行函数时,少写了 s0=
修改后时钟正常。键盘输入,所有的字符键还不能识别,而shift、F1等按键可以识别。
概述
2
实验目的
2.1
1. 梳理操作系统概念
case 4:
s0=pio_read_l(id_src->val);
2. 学习系统调用,并实现中断机制
3. 了解文件系统的基本内容,实现简易的文件系统
4. 最终实现支持文件系统的操作系统,要求能成功运行仙剑奇侠传
实验内容
2.2
1. 实现自陷操作 _yield() 及其过程
2. 实现用户程序的加载和系统调用, 支撑TRM程序的运行
3. 行仙剑奇侠传并展示批处理系统
阶段一
3
最简单的操作系统
3.1
目前Nanos-lite运行的主函数如下:打印logo,输出hello信息和编译时间。然后进行磁盘初
始化、设备初始化、文件系统初始化、进程初始化、最后输出panic信息标志结束。
在 nanos-lite/ 目录下执行
int main() {
printf("%s", logo);
Log("'Hello World!' from Nanos-lite");
Log("Build time: %s, %s", __TIME__, __DATE__);
#ifdef HAS_VME
init_mm();
#endif
init_ramdisk();
init_device();
#ifdef HAS_CTE
init_irq();
#endif
init_fs();
init_proc();
Log("Finish initialization");
#ifdef HAS_CTE
_yield();
#endif
panic("Should not reach here");
}
make ARCH=$ISA-nemu run
执行结果如下:
目前的系统什么事都没有做,要想实现最简单的操作系统,就要实现:
1. 当一个程序执行结束后,可以跳转到操作系统的代码继续执行
2. 操作系统可以加载一个新的用户程序来执行
等级森严的制度
3.2
i386有四个特权级,级数越低,权限越高,权限低的不能访问权限高的资源,反之则可。操
作系统运行在0级,用户进程运行在3级。
i386中:
DPL(Descriptor Privilege Level)属性描述了一段数据所在的特权级
RPL(Requestor's Privilege Level)属性描述了请求者所在的特权级
CPL(Current Privilege Level)属性描述了当前进程的特权级,
一次数据的访问操作是合法的, 当且仅当
两式同时成立, 注意这里的>=是数值上的(numerically greater).
<1>式表示请求者有权限访问目标数据, <2>式表示当前进程也有权限访问目标数据. 如果违
反了上述其中一式, 此次操作将会被判定为非法操作, CPU将会抛出异常信号, 并跳转到一个
和操作系统约定好的内存位置, 交由操作系统进行后续处理.
而NEMU中考虑到能力有限,并未实现该机制。
穿越时空的旅程
3.3
硬件提供一种可以限制入口的执行流切换方式. 这种方式就是自陷指令, 程序执行自陷指令之
后, 就会陷入到操作系统预先设置好的跳转目标. 这个跳转目标也称为异常入口地址.也就是中
断/异常相应机制。
data.DPL >= requestor.RPL # <1>
data.DPL >= current_process.CPL # <2>
剩余25页未读,继续阅读
航知道
- 粉丝: 25
- 资源: 302
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0