linux 概念整理1

本文深入探讨了操作系统中的微内核架构,解释了其将大部分模块移至用户态以提高可靠性的原理。此外,还详细阐述了进程管理,包括进程调度算法如批处理和交互式系统的策略。讨论了页面置换算法,如LRU和最优算法,并介绍了设备驱动程序的角色。文件系统部分,讲解了VFS、inode和目录项等概念,以及文件的存储方式。最后,提到了缓存机制,如页缓存和块缓存,以及它们在读写文件过程中的作用。
摘要由CSDN通过智能技术生成

微内核

  • 为了实现高可靠性
    将操作系统划分成小的、层级之间能够更好定义的模块是很有必要的,只有一个模块 — 微内核 — 运行在内核态,其余模块可以作为普通用户进程运行。由于把每个设备驱动和文件系统分别作为普通用户进程。

在这里插入图片描述

在内核的外部,系统的构造有三层,它们都在用户态下运行,最底层是设备驱动器

保护模式?

程序不能访问内存直接地址

什么是按需分页

在操作系统中进程是以页为单位加载到内存中的,按需分页是一种虚拟内存的管理方式。在使用请求分页的系统中,只有在尝试访问页面所在的磁盘并且该页面尚未在内存中时,也就发生了缺页异常,操作系统才会将磁盘页面复制到内存中。

进程表

操作系统为了跟踪每个进程的活动状态,维护了一个进程表。在进程表的内部,列出了每个进程的状态以及每个进程使用的资源等。

进程调度算法

  • 批处理
  1. 先来先服务
  2. 短作业优先
  3. 最短剩余时间优先
  • 交互式系统
  1. 最短进程
  2. 时间片轮转
  3. 最高优先级调度

高响应比优先
多级反馈队列
https://mp.weixin.qq.com/s/FaHKGRI69TqDj0AJtNiVoA

页面置换

最优算法不可实现,但可以用作基准
NRU(最近未使用) 算法和 LRU 算法很相似
FIFO(先进先出) 算法有可能会抛弃重要的页面
第二次机会算法比 FIFO 有较大的改善
时钟算法实际使用
LRU(最近最少)算法比较优秀,但是很难实现NFU(最不经常使用)算法和 LRU 很类似
老化算法近似 LRU 的高效算法
工作集算法实施起来开销很大
工作集时钟算法比较有效的算法

RAID

RAID 称为 磁盘冗余阵列,简称 磁盘阵列。利用虚拟化技术把多个硬盘结合在一起,成为一个或多个磁盘阵列组,目的是提升性能或数据冗余。

什么是 DMA

DMA 的中文名称是直接内存访问,它意味着 CPU 授予 I/O 模块权限在不涉及 CPU 的情况下读取或写入内存。也就是 DMA 可以不需要 CPU 的参与。这个过程由称为 DMA 控制器(DMAC)的芯片管理。由于 DMA 设备可以直接在内存之间传输数据,而不是使用 CPU 作为中介,因此可以缓解总线上的拥塞。DMA 通过允许 CPU 执行任务,同时 DMA 系统通过系统和内存总线传输数据来提高系统并发性。

什么是设备驱动程序

驱动程序提供了与硬件进行交互的软件接口,使操作系统和其他计算机程序能够访问特定设备,不用需要了解其硬件的具体构造。

进程间的通讯方式

Inter Process Communication,IPC

  • 竞态条件:即两个或多个线程同时对一共享数据进行修改,从而影响程序运行的正确性时
  • 临界区:
    在这里插入图片描述

任何时候两个进程不能同时处于临界区、
不应对 CPU 的速度和数量做任何假设
位于临界区外的进程不得阻塞其他进程
不能使任何进程无限等待进入临界区

通信

请添加图片描述

文件系统

请添加图片描述

虚拟文件系统 vfs

一个操作系统支持多种底层不同的文件系统 (ntfs 、fat(windows)、hive(mac)),为了给内核和用户空间统一文件系统视图,加入抽象层。

主要模块

  1. 超级块(super_block)保存文件系统的所有元数据(一个块一个文件系统),超级块对象常驻内存并缓存
  2. 目录项模块 管理路径的目录项
  3. inode模块 管理一个具体的文件,文件的唯一标识,可链接到address_space缓存
  4. 打开文件列表模块,包含内核已经打开的模块(文件句柄),包含一个列表
  5. file_operations模块 维护一个数据结构,一些列函数指针集合,包含所有使用的调用函数(open,write、read、mmap)
  6. address_space ,文件在页缓存中已经缓存的物理页

Linux 文件系统会为每个文件分配两个数据结构:

索引节点(index node)和目录项(directory entry)

inode (index node) 索引节点

用来记录文件的元信息,比如 inode 编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置等等。索引节点是文件的唯一标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间。

目录项

在这里插入图片描述

用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成目录结构,但它与索引节点不同的是,目录项是由内核维护的一个数据结构,不存放于磁盘,而是缓存在内存。

缓存

cache

cache是高速缓存,用于CPU和内存之间的缓冲

page cache

页缓存
面向文件

buffer cache

块缓存
buffer是I/O缓存,用于内存和硬盘的缓冲

操作层面读文件过程

1、进程调用库函数向内核发起读文件请求;
2、内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项;(检查1)
3、调用该文件可用的系统调用函数read()3、read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode;
4、在inode中,通过文件内容偏移量计算出要读取的页;
5、通过inode找到文件对应的address_space;(检查2)
6、在address_space中访问该文件的页缓存树,查找对应的页缓存结点:
(1)如果页缓存命中,那么直接返回文件内容;
(2)如果页缓存缺失,那么产生一个页缺失异常,创建一个页缓存页,同时通过inode找到文件该页的磁盘地址,读取相应的页填充该缓存页;重新进行第6步查找页缓存;
7、文件内容读取成功。

写文件过程

前5步和读文件一致,在address_space中查询对应页的页缓存是否存在:
6、如果页缓存命中,直接把文件内容修改更新在页缓存的页中。写文件就结束了。这时候文件修改位于页缓存,并没有写回到磁盘文件中去。
7、如果页缓存缺失,那么产生一个页缺失异常,创建一个页缓存页,同时通过inode找到文件该页的磁盘地址,读取相应的页填充该缓存页。此时缓存页命中,进行第6步。
8、一个页缓存中的页如果被修改,那么会被标记成脏页。脏页需要写回到磁盘中的文件块。有两种方式可以把脏页写回磁盘:(1)手动调用sync()或者fsync()系统调用把脏页写回
(2)pdflush进程会定时把脏页写回到磁盘同时注意,脏页不能被置换出内存,如果脏页正在被写回,那么会被设置写回标记,这时候该页就被上锁,其他写请求被阻塞直到锁释放。

文件的存储方式

连续空间存储

读写效率高,
问题:

  1. 磁盘空间碎片
  2. 文件长度不易扩展

非连续空间存储

链表

离散,消除磁盘碎片

问题:
不支持直接访问

索引

支持直接访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值