您的位置:

深入浅出操作系统:从OSTEP的视角掌握操作系统

一、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、具备换入/换出:使用虚拟内存命中率不高的物理块,可以通过在磁盘上创建有效的分页文件,实现物理页面和磁盘之间的平衡。

示例代码:

#include

int 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技术可以进行磁盘数据的备份和恢复,有效提高了系统的容错能力,防止数据丢失。

示例代码:

#include 

int main()
{
   FILE *fp;

   //以写方式打开文件 
   fp = fopen("file.txt", "w");

   //写入数据
   fprintf(fp, "This is the content of the file.\n");

   //关闭文件
   fclose(fp);

   return 0;
}

  

六、总结

本文从OSTEP的角度阐述了操作系统的基本概念,包括虚拟内存、并发性和持久化等方面,在实现代码方面给出了简单易懂的示例。操作系统作为计算机科学的基础知识,深入研究操作系统能够提高我们对计算机系统底层的理解,也有助于我们开发更加高效、稳定的应用程序。