文章目录
- 简介
- 一、参考讲义概述
- 二、实验部分
-
- [MIT6.828 Lab2-1 Using gdb](https://blog.youkuaiyun.com/baidu_41944641/article/details/139247874?csdn_share_tail=%7B%22type%22:%22blog%22,%22rType%22:%22article%22,%22rId%22:%22139247874%22,%22source%22:%22baidu_41944641%22%7D)
- [MIT6.828 Lab2-3 System call tracing (moderate)](https://blog.youkuaiyun.com/baidu_41944641/article/details/146922477?sharetype=blogdetail&sharerId=146922477&sharerefer=PC&sharesource=baidu_41944641&spm=1011.2480.3001.8118)
- [MIT6.828 Lab2-3 Sysinfo](https://blog.youkuaiyun.com/baidu_41944641/article/details/139249974?csdn_share_tail=%7B%22type%22:%22blog%22,%22rType%22:%22article%22,%22rId%22:%22139249974%22,%22source%22:%22baidu_41944641%22%7D)
简介
- 实验:lab system cacall
- In this lab you will add some new system calls to xv6, which will help you understand how they work and will expose you to some of the internals of the xv6 kernel.
- Before you start coding, read Chapter 2 of the xv6 book, and Sections 4.3 and 4.4 of Chapter 4[[Lab-4:Traps]], and related source files:
- The user-space “stubs” that route system calls into the kernel are in user/usys.S, which is generated by user/usys.pl when you run make. Declarations are in user/user.h
- The kernel-space code that routes a system call to the kernel function that implements it is in kernel/syscall.c and kernel/syscall.h.
- Process-related code is kernel/proc.h and kernel/proc.c.
一、参考讲义概述
- 操作系统需满足: #多路复用 、 #隔离 、 #交互
- 本章提供了实现这三点的概述
- xv6是基于“LP64”C编写的,因此int为32位,long和pointer为64位
1.1 Abstracting physical resources
如果应用可以定制化自己的库函数,这些库函数可以直接作用在物理资源上,那么这些应用必须是良好运行的,然而更常见的是应用程序彼此不信任并且存在错误,因此需要更强的隔离性。将资源抽象为服务,有助于实现强隔离,禁止应用程序直接访问敏感硬件资源。
抽象物理资源:
- 例如,Unix应用程序仅通过文件系统的open、read、write和close系统调用与存储交互,而不是直接读写磁盘。
- Unix 进程使用 exec 来构建其内存映像,而不是直接与物理内存交互。
- Unix 进程之间的许多交互形式都是通过文件描述符发生的。
- Unix 接口并不是抽象资源的唯一方法,但它已被证明是一种非常好的方法。
1.2 User mode, supervisor mode, and system calls
强隔离需要应用程序和操作系统之间有硬边界。操作系统应该能够清理失败的应用程序并继续运行其他应用程序。为了实现强隔离,操作系统必须安排应用程序不能修改(甚至读取)操作系统的数据结构和指令,并且应用程序不能访问其他进程的内存。CPU为强隔离提供硬件支持,例如,RISC-V具有CPU执行指令的三种模式:机器模式、管理模式和用户模式。
- CPU 以机器模式启动。机器模式主要用于配置计算机。
- 在管理模式下,CPU 可以执行特权指令,运行在内核空间(或管理模式)的软件称为内核。
- 应用程序只能执行用户模式指令(例如,加数字等),并且被称为在用户空间中运行。想要调用内核函数(例如 xv6 中的 read 系统调用)的应用程序必须转换到内核;应用程序不能直接调用内核函数
1.3 Kernel organization
操作系统的哪一部分应该在管理模式下运行?
- 一种可能性是整个操作系统驻留在内核中,因此所有系统调用的实现都在管理程序模式下运行。这种组织称为 #整体内核。
- 单一组织的缺点是操作系统不同部分之间的接口通常很复杂
- 操作系统开发人员很容易犯错误。
- 在整体内核中,一个错误是致命的,因为管理模式下的错误往往会导致内核失败。如果内核出现故障,计算机就会停止工作,因此所有应用程序也会失败。计算机必须重新启动才能重新启动。
- 最大限度地减少在管理模式下运行的操作系统代码量,并在用户模式下执行操作系统的大部分内容。这种内核组织称为 #微内核。
- 在微内核中,内核接口由一些用于启动应用程序的低级函数组成,发送消息、访问设备硬件等。