一、OSTEP简介
1、OSTEP(Operating Systems: Three Easy Pieces)是由康奈尔大学的三位教授编写的开源操作系统教材。
2、OSTEP提供了一种全新的学习操作系统的方法,不需要学习大量的机器语言或者汇编语言,即可深入学习操作系统。
3、OSTEP的思路清晰,内容生动有趣,是学习操作系统的绝佳教材。
二、OSTEP教材概述
1、OSTEP教材仅需具备Python或C语言的基础,并不需求掌握操作系统底层知识或汇编语言。
2、OSTEP主要包含三个部分:虚拟内存、并发性和持久化。
3、虚拟内存部分主要涉及虚拟内存管理和动态内存分配,包括内存地址转换、虚拟内存的需求以及页表的实现等内容。
4、并发性部分主要涉及进程和线程、调度器、同步以及通信等概念,深入剖析多线程的工作原理及其实现。
5、持久化部分主要探讨磁盘的物理性质,文件系统的实现以及RAID等知识点。
三、操作系统中的虚拟内存
1、抽象:在进行虚拟内存的管理时,内存空间被抽象成为多个物理块和多个虚拟块,这些块可以是大小相同的页面或者是较为灵活的段。
2、保护:使用虚拟内存作为缓存,可以防止存储器中的程序互相覆盖或破坏。
3、共享:通过虚拟内存的共享特性,可以节省系统资源,并使不同程序间调用相同函数时,共享代码段,减少内存占用。
4、懒惰加载:虚拟内存中的页面不会一次性全部加载,而是在程序首次运行时才会被调入内存,提高运行效率。
5、具备换入/换出:使用虚拟内存命中率不高的物理块,可以通过在磁盘上创建有效的分页文件,实现物理页面和磁盘之间的平衡。
示例代码:
#includeint main() { printf("Hello, World!"); return 0; }
四、操作系统中的并发性
1、线程和进程:一个程序一般包含多个线程或进程,线程是进程的基本单位,而进程是操作系统的基本单位。
2、调度器:负责管理可执行进程的运行顺序,保证多个进程之间的公平性和响应度。
3、同步和通信:同步是指多个线程或进程之间的执行关系,通信则是多个线程或进程之间的信息传递。
4、死锁和饥饿:当多个线程或进程之间相互依赖时,可能会发生死锁或饥饿现象,造成系统无法正常响应。
示例代码:
#include#include void *thread(void *vargp) { printf("Hello, world!\n"); return NULL; } int main() { pthread_t tid; // create a new thread, 调用thread函数 pthread_create(&tid, NULL, thread, NULL); // 等待线程结束 pthread_join(tid, NULL); return 0; }
五、操作系统中的持久化
1、磁盘的物理性质:磁盘是由多个盘片组成,每个盘片有多个磁道,每个磁道又按照一定规律划分成多个扇区。
2、文件系统的实现:文件系统是操作系统管理磁盘数据的一种机制,常见的文件系统有FAT、NTFS和EXT3等。文件系统必须要具备存储、读取、删除文件以及目录等基本功能。
3、RAID:在磁盘的读取方面使用RAID技术可以进行磁盘数据的备份和恢复,有效提高了系统的容错能力,防止数据丢失。
示例代码:
#includeint main() { FILE *fp; //以写方式打开文件 fp = fopen("file.txt", "w"); //写入数据 fprintf(fp, "This is the content of the file.\n"); //关闭文件 fclose(fp); return 0; }
六、总结
本文从OSTEP的角度阐述了操作系统的基本概念,包括虚拟内存、并发性和持久化等方面,在实现代码方面给出了简单易懂的示例。操作系统作为计算机科学的基础知识,深入研究操作系统能够提高我们对计算机系统底层的理解,也有助于我们开发更加高效、稳定的应用程序。