基础
Linux指令
可以使用 man
命令查阅更多的详细信息,如man find。
类别 | 命令 | 用法 | 说明 |
---|---|---|---|
文件/目录操作 | ls | ls [选项] [目录] | 列出指定目录下的文件和子目录 |
pwd | pwd | 显示当前工作目录的绝对路径 | |
cd | cd [目录] | 切换工作目录 | |
tree | tree [目录] | 以树形结构显示目录和文件 | |
touch | touch [文件名] | 创建空文件或更新文件时间戳 | |
mkdir | mkdir [目录名] | 创建新目录 | |
rmdir | rmdir [目录名] | 删除空目录 | |
rm | rm [选项] [文件或目录] | 删除文件或目录 | |
文件查看 | cat | cat [文件名] | 查看文件内容,适用于小文件 |
more | more [文件名] | 分页查看文件内容 | |
less | less [文件名] | 分页查看文件内容,支持向上滚动 | |
head | head -n [行数] [文件名] | 查看文件的前几行 | |
tail | tail -n [行数] [文件名] | 查看文件的最后几行 | |
文件操作 | cp | cp [源文件] [目标文件或目录] | 复制文件或目录 |
mv | mv [源文件] [目标文件或目录] | 移动或重命名文件或目录 | |
zip | zip [选项] [压缩文件名.zip] [文件或目录] | 创建压缩文件 | |
unzip | unzip [压缩文件名.zip] | 解压缩文件 | |
tar | tar [选项] [压缩文件名.tar] [文件或目录] | 创建或解压缩 tar 压缩包 | |
搜索/文本处理 | find | find [路径] [条件] | 查找文件或目录 |
grep | grep [选项] '模式' [文件名] | 搜索文件中符合模式的文本 | |
时间/日期 | date | date | 显示或设置系统日期和时间 |
cal | cal [选项] | 显示日历 | |
系统信息 | uname | uname [选项] | 显示系统信息,如内核名、版本等 |
bc | bc | 基本计算器,用于执行数学计算 | |
帮助命令 | man | man [命令] | 查看命令的详细手册 |
操作系统概述
1.操作系统的特征
并发:多个事件在同一时间间隔内发生(宏观并行,微观串行)
共享:系统资源可供内存中多个并发执行的进程共同使用
互斥共享:一段时间内只允许一个进程访问该资源,常见的写互斥共享
同时共享:在一段时间内可以由多个进程并发访问,常见的读共享
虚拟:将一个物理实体进行映射成为多个逻辑对应物
时分复用:虚拟处理器技术:多道程序并发执行分时使用,轮流占用处理器
空分复用:虚拟内存:每个进程拥有各自的虚拟地址空间,真正使用时,才会通过mmp映射到物理内存的页
异步:由于资源有限,并发的进程执行过程不可准确预测,但是相同运行环境必须保证运行结果确定性
操作系统功能有文件管理,内存管理,进程管理,设备管理四种,下文将详细进行介绍。
内存管理
类别 | 应用 | 功能说明 |
---|---|---|
内存管理 | 分页(Paging) | 将内存分割成固定大小的页面,并将进程的地址空间映射到物理内存中的页面,以提高内存利用率和减少外部碎片。 |
分段(Segmentation) | 将内存划分为不同长度的段,每个段对应不同类型的数据或代码段,允许更加灵活的内存使用。 | |
虚拟内存(Virtual Memory) | 使用磁盘作为扩展内存,允许程序使用比物理内存更大的地址空间,提升系统多任务处理能力。 | |
缓存管理(Cache Management) | 使用高速缓存存储器来保存频繁使用的数据,减少访问主内存的时间。 | |
交换空间(Swapping) | 将不活跃的进程从物理内存移到磁盘(交换空间)中,以腾出物理内存给其他进程使用。 |
内存管理分配方式
内存分配方式 | 描述 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
连续内存分配 | 分配连续的物理内存块 | 实现简单,寻址效率高 | 容易产生内存碎片,内存利用率低 | 小型程序或不需要动态分配的场景 |
分页 | 将内存分割为固定大小的页块,分配不连续的内存 | 减少外部碎片,灵活分配 | 地址转换带来额外开销 | 现代操作系统广泛应用 |
分段 | 根据逻辑段分配不连续的内存 | 更符合程序结构,灵活性高 | 容易产生外部碎片,段表管理复杂 | 适用于复杂程序管理 |
段页式结合 | 结合分段与分页的优点 | 既有分段灵活性,也减少了碎片 | 需要维护多个表,开销较大 | 大型复杂系统的内存管理 |
堆内存分配 | 动态分配内存,通常用于数据结构如链表、树等 | 动态灵活 | 容易导致内存泄漏或碎片 | 需要动态内存分配的数据结构 |
栈内存分配 | 用于函数调用和局部变量的临时数据存储 | 分配释放迅速,不易产生碎片 | 空间有限,不能处理大量或长期占用内存的数据 | 函数调用、局部变量存储 |
伙伴系统 | 使用 2 的幂次划分内存块,适应不同大小的分配需求 | 合并和分裂高效,碎片问题可控 | 可能产生内部碎片 | 操作系统内核和嵌入式系统 |
虚拟内存
内存映射步骤
在MMU进行地址转化时,如有效位未0,表示该页面并没有映射到真正的物理页面,就会页面中断
页面中断步骤
TLB 是页表的高速缓存,保存了最常访问的页表项 (PTE)。由于 TLB 是硬件实现的,速度极快。当 MMU 收到虚拟地址 (VA) 时,首先查询 TLB,如果命中且权限合法,直接返回对应的物理页框号 (PPN)。若未命中,则查询主存页表并将新的 PTE 存入 TLB,必要时替换现有的 PTE。
TLB 命中流程:
1. CPU 生成虚拟地址 (VA);
2. MMU 从 TLB 取出 PTE;
3. MMU 将 VA 翻译成物理地址 (PA);
4. 高速缓存/主存返回 PA 对应的数据给 CPU。
TLB 不命中流程:
1. CPU 生成虚拟地址 (VA);
2. 查询 TLB 失败,进入主存页表查询并将 PTE 存入 TLB,必要时替换;
3. MMU 翻译 VA 为物理地址 (PA);
4. 高速缓存/主存返回 PA 对应的数据给 CPU。
多级页表
多级页表通过将大页表拆分为多级结构来减少内存开销。以二级页表为例,假设虚拟地址为 32 位,其中 10 位用于一级页表索引,10 位用于二级页表索引,12 位用于地址偏移量。每个页表项 (PTE) 为 4 字节,页面大小为 4KB,共需 2^20 个 PTE。一级页表每个 PTE 映射 4MB 虚拟地址空间,由 1024 个连续的页面组成,整个 4GB 地址空间只需 1024 个一级 PTE。
多级页表的优势在于,只为实际使用的地址分配二级页表,未使用的一级页表项不需要对应的二级页表,从而节省大量内存。对于大多数程序,大部分虚拟内存空间都未分配,因此带来显著的内存节约。
进程管理
类别 | 应用 | 功能说明 |
---|---|---|
进程管理 | 进程创建(Process Creation) | 使用系统调用(如 fork() )创建新进程,允许操作系统执行并行任务。 |
进程调度(Process Scheduling) | 根据特定的调度算法(如时间片轮转、优先级调度)分配 CPU 资源给各个进程,确保系统的公平性和效率。 | |
进程同步(Process Synchronization) | 通过使用锁、信号量或其他同步机制,协调多个进程之间的运行顺序,避免数据冲突或竞争。 | |
进程通信(Interprocess Communication, IPC) | 允许进程之间通过消息队列、共享内存、信号等方式进行数据交换与通信。 | |
死锁处理(Deadlock Handling) | 通过检测、预防或解除死锁的方式来避免或解决进程间资源争用的死锁问题。 |
详看这篇文章
文件管理
类别 | 应用 | 功能说明 |
---|---|---|
文件管理 | 文件系统(File System) | 定义文件的存储结构和访问方法,允许用户创建、删除、读取和修改文件,常见文件系统有 NTFS、FAT32、EXT4 等。 |
目录管理(Directory Management) | 提供目录结构,用于组织文件的层次结构,支持文件路径查找、文件分类管理等功能。 | |
文件权限(File Permissions) | 控制用户和进程对文件的访问权限,常见权限包括读取、写入、执行权限。 | |
文件锁定(File Locking) | 通过锁定机制,防止多个进程同时修改文件,从而避免文件数据的不一致。 | |
文件备份与恢复(Backup and Restore) | 提供文件数据的备份和恢复功能,以防止数据丢失或损坏。 |
设备管理
类别 | 应用 | 功能说明 |
---|---|---|
设备管理 | 设备驱动程序(Device Drivers) | 操作系统通过设备驱动程序与硬件设备进行通信,提供设备的输入/输出接口。 |
中断处理(Interrupt Handling) | 操作系统捕获设备发出的中断信号,及时响应设备的请求,并执行相应的处理程序。 | |
设备分配(Device Allocation) | 管理设备资源的分配和释放,确保设备被合理地分配给进程,并避免资源冲突。 | |
I/O调度(I/O Scheduling) | 通过 I/O 调度算法(如电梯算法、FCFS 等)优化设备的输入/输出操作,减少等待时间,提高系统性能。 | |
缓冲区管理(Buffer Management) | 为设备和主内存之间的数据交换提供缓冲区,以减少设备和 CPU 之间的速度差异,确保数据传输的高效性。 |
磁盘调度算法
算法名称 | 描述 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
FCFS | 按请求到达顺序处理 | 简单,无饥饿问题 | 寻道时间长,效率低 | 适合负载不重且顺序访问的场景 |
SSTF | 优先处理距离最近的请求 | 寻道时间短 | 可能造成饥饿 | 适合较少请求、随机访问的场景 |
SCAN | 磁头往返移动处理请求(电梯算法) | 平均寻道时间短,较少饥饿 | 往返增加延迟 | 适合大量请求,访问较为集中的场景 |
C-SCAN | 磁头单向移动,处理后回到起点重新扫描 | 请求等待时间均匀 | 往返不处理请求,寻道时间略高 | 适合请求位置分散的场景 |
LOOK | 类似 SCAN,但只到有请求的位置 | 减少不必要的移动,效率更高 | 平均等待时间略长于 SSTF | 适合大多数磁盘访问场景 |
C-LOOK | 类似 C-SCAN,但只处理到有请求的位置 | 等待时间均匀,减少无效移动 | 寻道时间略高于 LOOK | 适合请求频繁的随机访问场景 |
如果请求的顺序如下:
98,183,37,122,14,124,65,67
先来先服务算法
大量应用进程竞争使用磁道,访问的磁道一般比较分散,这种算法性能低下,寻道时间过长。
最短寻道算法
该算法优先选择从当前磁头位置所需寻道时间最短的请求,那么磁盘的写入顺序为:65,67,37,14,98,122。
该算法相对于先来先服务寻道时间会减少很多,但是会造成饥饿现象,因为我们的磁盘的请求随时都可能产生,假设后续的请求都是小于183磁道,那么183磁道的请求永远不会被响应,于是就产生了饥饿现象。
扫描算法
扫描算法(电梯算法)规定:磁头在一个方向上移动,访问所有未完成的请求,直到磁头到达该方向上的最后的磁道才调换方向。假设前进的方向是磁道号减少的方向,那么处理请求的顺序是37,14,0,65,67,98,122,124,183
扫描算法虽然不会产生饥饿,但是对于中间部分的磁道来说响应较快,边缘部分响应较慢。
循环扫描算法
循环扫描算法规定:磁头只能朝某个方向移动,返回时直接复位磁头(这个很快),并且返回过程中不处理任何请求。
循环扫描算法相比于扫描算法,每个磁道的响应频率比较平均。
LOOK与C-LOOK算法
LOOK算法和C-LOOK算法分别是对扫描算法和循环扫描算法的优化,优化的思路就是:磁头在移动到最远的请求位置,然后立刻向反方向移动。
- LOOK算法反向移动途中会响应请求
- C-LOOK反向移动途中不响应请求
参考文献
1.https://blog.csdn.net/qq_43840665/article/details/131600761