Xv6 context switching
xv6上下文切换
Xv6 system call and the first process
xv6 系统调用与第一个进程
该文章作为本人学习 MIT 6.S081 课程与 xv6 book 的学习笔记,如有错误或疑问,欢迎联系我
什么是系统调用对于用户程序而言,是无法与计算机硬件等进行交互的,必须通过系统调用通知内核与硬件交互,例如读取文件,只有通过read系统调用通知内核才能读取对应的文件。通过系统调用,可以把内核和用户完全分隔开。
在xv6中有许多系统调用,甚至xv6 lab中让你来添加系统调用。xv6实现的系统调用如下所示。
接下来就是如何进行系统调用,如何从用户程序切换到内核程序,我们从xv6第一个进程的启动开始讲起。
在操作系统中,有两个非常重要的系统调用:fork和exec,fork用于创建一个新的进程,exec用于执行可执行程序,一般来说,操作系统都是创建第一个进程然后在第一个进程中fork出新进程,然后在新进程中exec程序来工作的。
内核和用户进程的内存空间
其中比较重要的是kernel和user的内存中的最高处是trampoline(跳板)页面,其中保存着用于用户态跳转到内核态的代码。
其次就是在user内存中在trampoline下面 ...
Xv6 memory management
xv6 的内存管理
该文章作为本人学习 MIT 6.S081 课程与 xv6 book 的学习笔记,如有错误或疑问,欢迎联系我。
分页硬件xv6 使用 RISC-V 指令集,其分页硬件使用的是三级页表形式,其中虚拟地址的低 27+12=39 位地址用于分页过程,L2、L1、L0 每 9 位作为一级页表的索引,例如 L2 会在第一级页表(一共 2^9=512 个 PTE 项)中索引到某一项,得到对应 44 位 PPN,然后在 PPN 后补齐 12 位 0,得到第二级页表在物理内存中的地址,然后 L1 在第二级页表中索引,如此重复,一直到第三级页表使用 L0 索引得到 PPN 此时与虚拟地址中的 Offset 拼接得到真正的物理地址。
在 xv6 中虚拟地址只使用 64 位中的低 39 位,物理地址只使用 64 位中的低 56 位。在每一个 PTE(页表项)中也只使用 64 位中的低 54 位,其中 Flags 中包含了该 PTE 项是否有效等信息。
需要注意的是,在 xv6 中,使用 satp 寄存器保存第一级页表的起始地址,因此当切换进程或者在内核与用户之 ...
How does a c program execute
C 语言如何在你的 PC 上运行
该文章作为本人学习《Computer Systems : A Programmer’s Prespective》(以下简称 CSAPP) 以及《Operating System Three Easy Pieces》(以下简称 OSTEP) 的读书笔记,如有错误或者需要讨论之处,欢迎联系我。
OS:Arch Linux
GCC Version:12.2.0
第一个例子C 语言从 PC 上的源文件到操作系统上执行,需要通过预处理、编译、链接等过程,最后得到一个 ELF 格式的二进制文件,对于以下一个最简单的 hello 程序,我们通过 gcc hello.c 命令可以获得一个 20552 字节的 a.out 文件,通过 file 命令我们可以知道这个 a.out 是一个动态链接的 ELF 格式可执行文件,运行 a.out 我们也成功获得了 hello 输出。
12345#include <stdio.h>int main(){ printf("hello"); return 0;} ...
From View To Jetpack Compose
From View To Jetpack Compose原生 View在 Android APP 中,所有的用户界面元素都是由 View 和 ViewGroup 的对象构成的。View 是绘制在屏幕上的用户能与之交互的一个对象。而 ViewGroup 则是一个用于存放其他 View(和 ViewGroup)对象的布局容器。 Android 为我们提供了一个 View 和 ViewGroup 子类的集合,集合中提供了一些常用的输入控件 (比如按钮和文本域) 和各种各样的布局模式。
原生 View 显示到我们的手机上面主要通过 Measure、layout、Draw 过程。
Window、Activity、DecorView、ViewRootActivity
Activity 并不负责视图控制,它只是控制生命周期和处理事件。真正控制视图的是 Window。一个 Activity 包含了一个 Window,Window 才是真正代表一个窗口。Activity 就像一个控制器,统筹视图的添加与显示,以及通过其他回调方法,来与 Window、以及 View 进行交互。
Window
Window ...