PYQ Blog

「想成为真正的工程师」

MIT 6.S081—锁

Locking

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 在多处理器硬件和多线程环境下,多个指令流可能会交错执行,导致并发访问数据。为了保证数据的正确性,内核设计者需要使用并发控制技术来控制并发访问,而锁是一种广泛使用的并发控制技术。锁提供了互斥,确保一次只有一个CPU可以持有锁。如果程序员将每个共享数据项关联一个锁,并且代码在使用一个数据项时总是持有...

MIT 6.S081—中断和设备驱动

Interrupts and device drivers

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 驱动程序是操作系统中管理特定设备的代码:它配置硬件设备,告诉设备执行操作,处理由此产生的中断,并与可能正在等待设备输入/输出的进程进行交互。编写驱动可能很棘手,因为驱动程序与它管理的设备同时运行。此外,驱动程序必须理解设备的硬件接口,这可能很复杂,而且缺乏文档。 需要操作系统关注的设备通常可以...

MIT 6.S081—trap指令和系统调用

Traps and system calls

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 有三种事件会导致中央处理器搁置普通指令的执行,并强制将控制权转移到处理该事件的特殊代码上: 系统调用:当用户程序执行ecall指令要求内核为其做些什么时 异常:(用户或内核)指令做了一些非法的事情,例如除以零或使用无效的虚拟地址 (page fault) 设备中断:一个设备,例如...

MIT 6.S081—页表

Page Tables

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 页表是操作系统为每个进程提供私有地址空间和内存的机制。页表决定了内存地址的含义,以及物理内存的哪些部分可以访问。它们允许xv6隔离不同进程的地址空间,并将它们复用到单个物理内存上。页表还提供了一层抽象(a level of indirection),这允许xv6执行一些特殊操作:映射相同的内存到...

MIT 6.S081—Lab 2: system calls

system calls

Before you start coding, read Chapter 2 of the xv6 book, and Sections 4.3 and 4.4 of Chapter 4, and related source files: The user-space code for systems calls is in user/user.h and user/usys.p...

OS Security Lab—基于PAM的用户权能分配

[OS Security Lab] PAM-based user capability distribution

1.指出每个权能对应的系统调用,简要解释功能 Capabilities 机制是在 Linux 内核 2.2 之后引入的,原理就是将之前与超级用户 root(UID=0)关联的特权细分为不同的功能组,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是 root,就去检...

OS Security Lab—缓冲区溢出与数据执行保护DEP

[OS Security Lab] Buffer Overflow and Data Execution Prevention (DEP)

攻击原理 C程序运行时结构 通过一个简单的C程序来叙述C程序运行时内存结构: 以32位进行讲解(即使用的寄存器为eip—指向将要被执行的下一条指令;ebp—当前栈帧的栈底;esp—当前栈帧的栈顶) 内存实际发生的情况远比例图复杂,省略了很多东西,例如堆,系统代码,动态链接库等 1 2 3 4 5 6 7 8 9 10 11 12 13 int fun(int a, in...

CSAPP—链接

[CSAPP] Linking

Introduction 链接 (linking) 就是将不同部分的代码和数据收集和组合成为一个单一文件的过程,这个文件可被加载(复制)到存储器并执行。 可以在程序生命周期的多个阶段执行链接: 编译时(compile time),也就是在源代码被翻译成机器代码时;例如静态链接 加载时(load time),也就是在程序被加载器(loader)加载到存储器并执行时(l...

MIT 6.S081—操作系统架构

Operating system organization

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 操作系统必须满足的三个要求: 多路复用(并发) 隔离 交互 Abstracting physical resources 当谈及操作系统时,人们可能会问的第一个问题是为什么需要对系统资源进行抽象?为了实现强隔离(安全性、容错性和健壮性),最好禁止应用程序直接访问敏感的硬件资...

MIT 6.S081—Lab 1: Xv6 and Unix utilities

Xv6 and Unix utilities

sleep (easy) Implement the UNIX program sleep for xv6; your sleep should pause for a user-specified number of ticks. A tick is a notion of time defined by the xv6 kernel, namely the time between t...