2024全新版 操作系统入门与实践-参透技术本质

2024-04-15 22:22:03 浏览数 (1)

2024全新版 操作系统入门与实践-参透技术本质

操作系统(Operating System,简称OS)是计算机系统中的核心软件,它管理计算机硬件资源,提供程序运行的环境,并作为用户与计算机硬件之间的接口。操作系统的主要目标是提高计算效率,简化用户操作,并使计算机系统的使用更加方便和高效。

操作系统的主要功能

  1. 进程管理:操作系统负责创建、调度和管理进程,以及处理进程间的同步与通信。
  2. 内存管理:操作系统负责分配和管理内存资源,确保每个程序都有足够的内存空间运行,同时提高内存的使用效率。
  3. 文件系统管理:操作系统提供文件管理功能,包括文件的创建、删除、读取、写入和权限控制等。
  4. 设备管理:操作系统负责管理所有的输入输出设备,如键盘、鼠标、显示器、打印机等,通过设备驱动程序与硬件进行交互。
  5. 用户界面:操作系统提供用户界面,可以是命令行界面(CLI)或图形用户界面(GUI),以便用户与计算机系统交互。

操作系统的类型

  1. 批处理系统:早期的操作系统,用户提交一批作业,系统依次处理。
  2. 分时系统:允许多个用户同时使用计算机资源,系统在用户之间快速切换。
  3. 实时系统:能够及时响应外部事件的系统,分为硬实时和软实时。
  4. 个人操作系统:为个人计算机设计,如Windows、macOS。
  5. 网络操作系统:支持网络计算环境,如UNIX、Linux。
  6. 分布式操作系统:管理分布在不同地理位置的计算机资源,如Google的Android。

操作系统入门与实践-参透技术本质 - 锁是如何实现

锁(Lock)是一种同步机制,用于控制对共享资源的并发访问,以防止多个线程或进程同时修改同一资源,从而避免数据不一致和竞争条件。锁的实现方式有多种,下面介绍几种常见的锁及其实现原理:

1. 互斥锁(Mutex)

互斥锁是最基本的锁类型,确保同一时间只有一个线程可以访问共享资源。互斥锁的实现通常依赖于原子操作和操作系统提供的同步原语。

实现原理

  • 当线程想要访问共享资源时,它首先尝试获取锁。
  • 如果锁是可用的(即没有其他线程持有锁),该线程就会成功获取锁,并继续执行。
  • 如果锁已被其他线程占用,请求锁的线程将被阻塞,直到锁被释放。
  • 当持有锁的线程完成对共享资源的访问后,它会释放锁,允许其他线程获取锁并访问资源。

2. 递归锁(Recursive Lock)

递归锁是一种特殊类型的互斥锁,允许同一个线程多次获取同一个锁。这在递归函数或可重入代码块中非常有用。

实现原理

  • 递归锁内部维护一个计数器,记录锁被当前线程获取的次数。
  • 当线程第一次获取锁时,计数器增加。
  • 每次线程再次获取同一个锁时,计数器再次增加。
  • 当线程释放锁时,计数器减少。只有当计数器归零时,锁才真正被释放,其他线程才有机会获取锁。

3. 读写锁(Read-Write Lock)

读写锁允许多个线程同时读取共享资源,但只允许一个线程写入。这种锁在读多写少的场景下提高了性能。

实现原理

  • 读写锁维护两个独立的锁:一个用于读取(读锁),另一个用于写入(写锁)。
  • 当多个线程尝试获取读锁时,它们可以同时持有读锁,但不允许获取写锁。
  • 当一个线程尝试获取写锁时,它会阻塞所有等待的读锁和写锁。
  • 一旦写锁被释放,等待的读锁可以按照一定的策略(如先到先服务)获取锁。

4. 自旋锁(Spinlock)

自旋锁是一种用于多核处理器上的锁,当线程尝试获取锁时,如果锁不可用,它会在一个循环中不断检查锁的状态,而不是进入睡眠状态。

实现原理

  • 自旋锁通常用于锁持有时间非常短的情况。
  • 当线程尝试获取锁时,如果锁被占用,它会在一个忙等待循环(spin loop)中不断检查锁是否已释放。
  • 一旦锁被释放,忙等待的线程会立即获取锁并继续执行。
  • 自旋锁减少了线程上下文切换的开销,但在等待锁的过程中可能会消耗较多的CPU资源。

0 人点赞