普通人

《Operating Systems: Three Easy Pieces》学习笔记(三十一) 插叙:文件和目录

"操作系统应该如何管理持久存储设备? 文件和目录 存储虚拟化形成了两个关键的抽象。 文件(file) 文件就是一个线性字节数组,每个字节都可以读取或写入。每个文件都有一个与其关联的低级名称(low-level name),通常是某种数字。用户通常不知道这个名字(我们稍后会看到)。由于历史原因,文件的低级名称通常称为 inode 号(inode number)。 目录(director..."

《Operating Systems: Three Easy Pieces》学习笔记(三十) 廉价冗余磁盘阵列(RAID)

"简介 本章将介绍廉价冗余磁盘阵列(Redundant Array of Inexpensive Disks),更多时候称为 RAID,这种技术使用多个磁盘一起构建更快、更大、更可靠的磁盘系统。 优点: 性能。并行使用多个磁盘可以大大加快 I/O 时间。 容量。将多个磁盘合并为逻辑上的一个单磁盘。 可靠性。在多个磁盘上传输数据(无 RAID 技术)会使数据容易受到单个磁盘丢..."

《Operating Systems: Three Easy Pieces》学习笔记(二十九) 磁盘驱动器

"主要介绍磁盘驱动器HDD(hard disk drive)相关技术,不过现在SSD变成主流了,但HDD因为其数据可靠性和价格在特定的领域依旧不可替代 接口 驱动器由大量扇区(512 字节块)组成,每个扇区都可以读取或写入。在具有 n 个扇区的磁盘上,扇区从 0 到 n−1 编号。因此,我们可以将磁盘视为一组扇区,0 到 n−1 是驱动器的地址空间(address space)。 多扇区..."

《Operating Systems: Three Easy Pieces》学习笔记(二十八) I/O 设备

"系统架构 我们先看一个典型系统的架构(见图 36.1)。其中,CPU 通过某种内存总线(memory bus)或互连电缆连接到系统内存。图像或者其他高性能 I/O 设备通过常规的 I/O 总线(I/O bus)连接到系统,在许多现代系统中会是 PCI 或它的衍生形式。最后,更下面是外围总线(peripheral bus),比如 SCSI、SATA 或者 USB。它们将最慢的设备连接到系统,..."

《Operating Systems: Three Easy Pieces》学习笔记(二十七) 基于事件的并发(进阶)

"基于事件的并发(event-based concurrency),在一些现代系统中较为流行,比如 node.js,但它源自于 C/UNIX 系统,我们下面将讨论。 基于事件的并发针对两方面的问题。一方面是多线程应用中,正确处理并发很有难度。 正如我们讨论的,忘加锁、死锁和其他烦人的问题会发生。另一方面,开发者无法控制多线程在某一时刻的调度(由系统调度)。 基本想法:事件循环 我们使用的..."

《Operating Systems: Three Easy Pieces》学习笔记(二十五) 信号量

"由锁和条件变量两篇文章可知条件变量必须和锁配合使用,那为什么不直接封装在一起呢?于是就有个信号量。 信号量只是将锁和单值条件的条件变量封装在一起,所以它不是一个全新的概念,它能实现的事锁加条件变量都能实现。对于比较复杂情况下的条件判断无法使用信号量解决,因为其只内置了一个简单的整型的 value 条件。 信号量的定义 信号量是有一个整数值的对象,可以用两个函数来操作它。在 POSIX ..."

《Operating Systems: Three Easy Pieces》学习笔记(二十二) 锁

"锁的基本思想 lock()和 unlock()函数的语义很简单。调用 lock() 尝试获取锁,如果没有其他线程持有锁(即它是可用的),该线程会获得锁,进入临界区 当持有锁的线程在临界区时,其他线程就无法进入临界区。 Pthread 库 POSIX 库将锁称为互斥量(mutex),因为它被用来提供线程之间的互斥。即当一个线程在临界区,它能够阻止其他线程进入直到本线程离开临界区。 p..."

© Kai. 保留部分权利。

浙ICP备20006745号-2,本站由 Jekyll 生成,采用 Chirpy 主题。