原文:XV6学习(5)陷阱和系统调用

在操作系统中,有三种情况会导致CPU的控制流发生转移:用户态中通过ecall指令进入内核态 异常发生,如除零 访问非法地址 设备中断,如硬盘完成读写请求。上面这些情况可以统称为陷阱 trap 。 陷阱在一般情况下应该是透明的,即当执行完处理程序后能够恢复之前程序的状态。这就要求在陷入内核态时,内核要保存之前的寄存器等状态信息,当执行完处理程序之后再进行恢复。 在XV 中处理陷阱有以下四步:CPU进 ...

2021-01-04 10:35 0 326 推荐指数:

查看详情

xv6系统调用

最近更新于2021/08/05. 我们以xv6的一个系统调用getpid()为例,观察xv6系统调用大致过程。 系统调用的声明位于 user.h 中,xv6的用户程序若要使用系统调用需要包括这个头文件,其中getpid()声明如下: int getpid(void); 此函数定义 ...

Thu Aug 05 09:20:00 CST 2021 0 113
xv6学习笔记(3):中断处理和系统调用

xv6学习笔记(3):中断处理和系统调用 1. tvinit函数 这个函数位于main函数内 表明了就是设置idt表 1. SETGATE函数 这里的setgate是一个宏定义是用来设置idt表的 下面是函数参数的说明 Sel : 表示对于中断处理程序代码所在段的段选择 ...

Sun Aug 22 23:16:00 CST 2021 0 189
xv6添加一个系统调用

1. Overview 要为xv6添加一个系统调用,需要修改以下5个文件: syscall.h syscall.c sysproc.c usys.S user.h 由于Unix v6发行于1975年,下面我们以添加一个返回整数1975的系统调用作为示范来说明如何为 ...

Thu Jan 27 01:34:00 CST 2022 0 738
XV6操作系统代码阅读心得(一):启动加载、中断与系统调用

XV6操作系统是MIT 6.828课程中使用的教学操作系统,是在现代硬件上对Unix V6系统的重写。XV6总共只有一万多行,非常适合初学者用于学习和实践操作系统相关知识。 MIT 6.828的课程网站是https://pdos.csail.mit.edu/6.828/。XV6操作系统有官方文档 ...

Wed Mar 27 04:01:00 CST 2019 1 1213
XV6学习(7)Lab lazy

代码在github上。 这一个实验是要利用缺页异常来实现懒分配(lazy allocation)。用户态程序通过sbrk系统调用来在堆上分配内存,而sbrk则会通过kalloc函数来申请内存页面,之后将页面映射到页表当中。 当申请小的空间时,上述过程是没有问题的。但是如果当进程一次申请很大 ...

Sat Jan 16 18:39:00 CST 2021 1 461
XV6学习(10)锁

在包括XV6的绝大部分操作系统都是多个任务交错执行的。交错的一个原因是多核硬件:多核计算机的多个CPU核心独立执行计算,如XV6的RISC-V处理器。多个CPU核心共享物理内存,XV6利用这种共享来维护所有核心都会读写的数据结构。而这种共享会导致一个CPU在读取某数据结构时,可能有另一个CPU正在 ...

Fri Feb 05 19:05:00 CST 2021 0 334
xv6操作系统学习笔记

0x00背景 最近在看操作系统上的书 然后选了本知乎推荐的xv6 https://th0ar.gitbooks.io/xv6-chinese/content/content/chapter0.html 我们从这几个问题入手 操作系统作用是什么? 内核的作用 ...

Sun Aug 06 08:53:00 CST 2017 0 1413
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM