只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》

简介: 只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》

只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》


目录


😊开讲啦!!!!


😀1、前言

😃2、操作系统概述

🍇2.1、操作系统概念

🍈2.2、操作系统的基本功能

🍉2.3、操作系统的相关概念

😄3、进程管理之进程实体

🍇3.1、为什么需要进程

🍈3.2、进程的实体

😆4、进程管理之五状态模型

🍇4.1、就绪状态

🍈4.2、执行状态

🍉4.2、执行状态

🍊4.3、阻塞状态

🍋4.4、创建状态

🍌4.5、终止状态

😅5、进程管理之进程同步

🍇5.1、进程间同步的原则

🍈5.2、线程同步

🤣6、Linux的进程管理

🍇6.1、Linux进程相关概念

🍈6.2、操作Linux进程的相关命令

😂7、作业管理之进程调度

🍇7.1、进程调度的算法

🙂8、作业管理之死锁

🍇8.1、死锁的产生

🍈8.2、死锁的处理

🙃9、存储管理之内存分配与回收

🍇9.1、内存分配的过程

🍈9.2、内存回收的过程

😉10、存存储管理之段页式存储管理

🍇10.1、页式存储管理

🍈10.2、段式存储管理

🍉10.3、段页式存储管理

😊11、存储管理之虚拟内存

😇12、Linux的存储管理

🍇12.1、Buddy内存管理算法

🥰13、Linux交换空间

😍14、操作系统的文件管理

🍇14.1、文件的逻辑结构

🤩15、辅存的存储空间分配

😘16、Linux文件基本操作

🍇16.1、Linux目录

🍈16.2、Linux文件常用操作

🍉16.3、Linux文件类型

😗17、Linux文件类型

🍇17.1、文件系统概览

🍈17.2、Ext文件系统

☺️18、操作系统的设备管理

🍇18.1、广义的IO设备

🍈18.2、IO设备缓冲区

🍉18.3、SPOOLing技术

😚19、Linux文本编辑器及软件安装

😙20、Ubuntu软件仓库

😋21、终端包管理工具

😛22、阅读手册

😜23、其他查阅手册的方法


🌟作者相关的文章、资源分享🌟


关注苏州程序大白,持续更新技术分享。谢谢大家支持


目录

😊开讲啦!!!!

20210702092947407.gif


😀1、前言


操作系统演进如下:


1、无操作系统


人工操作,用户独占,CPU等待人工操作,资源利用率很低。


2、批处理系统


无需等待人工操作,批量输入任务,资源利用率提升,多道程序设计。


3、分时系统


人-机交互,多用户共享,及时调试程序,资源利用率提升。


多道程序设计设计:


早起批处理系统只能一次处理一个任务,多道程序设计使得批处理系统可以一次处理多个任务。对多道程序的管理是操作系统的重要功能。


多道程序设计是指在计算机内存中同时存放多个程序。


多道程序在计算机的管理程序之下相互穿插运行。


操作系统对多道程序的管理分为五大功能:


进程管理


存储管理


作业管理


文件管理


设备管理


😃2、操作系统概述


🍇2.1、操作系统概念


操作系统是管理计算机硬件和软件资源的计算机程序;管理配置内存、决定资源供需顺序、控制输入输出设备等;操作系统提供

让用户和系统交互的操作界面。该定义不局限于计算机。


🍈2.2、操作系统的基本功能


处理器资源、存储器资源、IO设备资源、文件资源。操作系统统一管理这这些计算机资源。


用户无需面向硬件接口编程。


IO设备管理软件,提供读写接口。


文件管理软件,提供操作文件接口。


实现了对计算机资源的抽象。


提供了用户于计算机之间的接口。


图像窗口形式、命令形式、系统调用形式。


🍉2.3、操作系统的相关概念


并发性


并行是指两个或多个事件可以在同一个时刻发生,并发是指两个或多个事件可以在同一个时刻间隔发生。


对于单处理器来说,有两个程序交替运行,两个程序并发关系;对双处理器来说,两个程序可同一时刻运行,是并行关系,但是对于单个核心,依然是并发关系。


共享性

表现为操作系统中的资源可供多个并发的程序共同使用,这种共同使用的形式称之为资源共享。


资源共享根据属性可以分为两种方式:互斥共享形式、同时访问形式。


互斥共享: 当资源被程序或进程A占用时,只有A使用完之后,其他才可以使用(如打印机);


同时访问: 某种资源在一段时间内并发地被多个程序访问。


虚拟性


虚拟性表现为把一个物理实体转变为若干个逻辑实体,虚拟的技术主要有时分复用技术和空分复用技术。


时分复用技术: 资源在时间上进行复用,不同程序并发使用,多道程序分时使用计算机的硬件资源,提高资源的利用率。其中虚拟处理器技术是借用多道程序设计为每个程序建立进程,多个程序分时复用处理器;虚拟设备技术是物理设备虚拟为多个逻辑设备,每个程序占用一个逻辑设备,多个程序并发访问。


空分复用技术: 用来实现虚拟磁盘、虚拟内存等,提高资源的利用率,提升编程效率。


异步性


表现为多道程序环境下,允许多个进程并发执行;进程在使用资源时可能需要等待或放弃;进程的执行并不是一气呵成的,而是以走走停停的形式推进。


😄3、进程管理之进程实体


🍇3.1、为什么需要进程


进程是系统进行资源分配和调度的基本单位。


进程作为程序独立运行的载体保障程序正常执行。


进程的存在使得操作系统的资源利用率大幅提升。


🍈3.2、进程的实体


标识符,唯一标记一个进程,用于区别其他进程。


状态,标记进程的进程状态,如:运行态。


程序计数器,程序即将被执行的下一条指令的地址。


内存指针,程序代码、进程数据相关指针。


上下文数据,进程执行时处理器存储的数据。


IO状态信息,被进程IO操作所占用的文件列表。


记账信息,使用处理器时间、时钟数总和等。


进程控制块(PCB):


用于描述和控制进程运行的通用数据结构,记录进程当前状态和控制进程运行的全部信息。是使得进程能够独立运行的基本单位。


PCB是操作系统进行调度进程会被读取的信息,PCB是常驻内存的,存放在系统专门开辟的PCB区域内。


进程(Process)与线程(Thread):


一个进程可以有多个线程。线程是操作系统进行运行调度的最小单位,包含在进程之中,是进程中实际运行工作的单位。一个进程可以并发多个线程,每个线程执行不同的任务。


进程 线程

资源 资源分配的基本单位 不拥有资源

调度 独立调度的基本单位 独立调度的最小单位

系统开销 进程系统开销大 线程系统开销小

通信 进程IPC 读写同一进程数据通信


😆4、进程管理之五状态模型


就绪

阻塞

执行

创建

终止

🍇4.1、就绪状态


当进程被分配到除CPU以外所有必要的资源后,只要再获得CPU的使用权,就可以立即运行。


其他资源都准备好,只差CPU资源的状态为就绪状态。


在一个系统中多个处于就绪状态的进程通常排成一个队列。


🍈4.2、执行状态


进程获得CPU,其程序正在执行称为执行状态。


在单处理机中,在某个时刻只能有一个进程是处于执行状态。


🍉4.2、执行状态


进程获得CPU,其程序正在执行称为执行状态。


在单处理机中,在某个时刻只能有一个进程是处于执行状态。


🍊4.3、阻塞状态


进程因某种原因如:其他设备未就绪而无法继续执行,从而放弃CPU的状态称为阻塞状态。


🍋4.4、创建状态


创建进程时拥有PCB但其他资源尚未就绪的状态称为创建状态。

操作系统提供fork函数接口创建进程


🍌4.5、终止状态


进程结束由系统清理或者归还PCB的状态称为终止状态。


2267ca8e675b4bb3b534382c6594a16f.png


😅5、进程管理之进程同步


需要同步的原因:实现进程彼此之间的同步,对竞争资源在多进程间进行使用次序的协调,使得并发执行的多个进程之间可以有效使用资源和相互合作。


🍇5.1、进程间同步的原则


临界资源: 临界资源指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源。当有进程在使用临界资源时,其他进程必须依据操作系统额同步机制等待占用进程释放该共享资源才可重新竞争使用资源。


为了对临界资源使用进行约束,有四个使用原则:


空闲让进:资源无占用,允许使用


忙则等待:资源有占用,请求(其他)进程等待


有限等待:保证(其他进程)有限等待时间能够使用资源


让权等待:等待时,进程需要让出CPU(即进程由运行状态进入阻塞状态)


同步方法:


消息队列 共享存储 信号量(详见下文)


🍈5.2、线程同步


进程内多线程也需要同步


线程同步的方法:


互斥量 读写锁 自旋锁 条件变量(详见下文)


🤣6、Linux的进程管理


🍇6.1、Linux进程相关概念


进程的类型:


前台进程 后台进程 守护进程。


**前台进程:**具有终端,可以和用户交互的进程。


**后台进程:**与前台进程相对,没有占用终端的就是后台进程;后台程序基本上不和用户交互,优先级比前台进程低,不影响前台进程。将需要执行的命令以“&”符号结束。


**守护进程:**守护(daemon)进程是特殊的后台进程;很多守护进程在系统引导的时候启动,一直运行知道系统关闭。crond hhtpd sshd mysqld等。


进程名字以‘d’结尾的一般都是守护进程。


进程的标记


进程ID是进程的唯一标识,每个进程拥有不同的ID。


进程ID表现为一个非负整数,最大值由操作系统限定。


top命令查看系统进程。


ID为0的进程为idle进程,是系统创建的第一个进程。


ID为1的进程是init进程,是0号进程的子进程,完成系统初始化。


Init进程是所有用户进程的祖先进程。


进程的状态标记


状态符号 状态说明

R (TASK_RUNNING),进程正处于运行状态

S (TASK_INTERRUPTIBLE),进程正处于睡眠状态

D (TASK_UNINTERRUPTIBLE),进程正处于IO等待的睡眠状态

T (TASK_STOPPED),进程正处于暂停状态

Z (TASK_DEAD or EXIT_ZOMBIE),进程正处于退出状态,或僵尸进程

man ps命令显示进程相关的命令说明


后台运行一个python程序,打印该进程状态 S状态,处于睡眠状态


f625d2321a8745bf88eeb554a5217618.png


🍈6.2、操作Linux进程的相关命令


ps命令:


ps列出当前的进程


ps aux 打印进程详细信息


ps -u root 查看root用户进程


ps -aux | grep 'pyhton3'查看python3进程。


ps -ef --forest可打印进程父子状态。


ps -aux --sort=pcpu按cpu频率查看进程 pmem 按内存排序。


ps命令产用于显示当前进程的状态。


ps命令常配合aux参数或ef参数和grep命令检索特定进程。


top命令:


1、 2500毫秒刷新一次TOP内容,总共5次,输出内容存放到performace.txt文件中


 top -b -d 2.5 -n 5 > performace.txt


注:要将内容输出到文件中,必须使用-b,表示批处理选项


2、 TOP命令如何快速按%CPU、%MEM、TIME+列排序


 a) %CPU:使用大写字母按键:P
 b) %MEM:使用大写字母按键:M
 c) T IME+使用大写字母按键: T


注:TOP默认排序为倒序,如果确实需要升序排序,可以使用大写字母按键:R


3、TOP命令中显示其它列值、将两列互换等


a). 选择显示列或隐藏列:使用小写字母按键:f
c). 交换列显示顺序:使用小写字母按键: o
b). 选择需要排序的列:使用大写字母按键:F


kill命令:


20131024181009250.jpg


数字表示信号的序号,字符串表示信号名称,传送信号时可以使用信号序号也可以使用信号名称。


◆传送信号时使用kill命令,语法如下:


kill -信号序号 PID,如:kill -9 1234


kill -信号名称 PID,如:kill -SIGKILL 1234 或者 kill -KILL 1234


PID是指进程号,这样该进程会收到对应的信号,如果要对信号进行特殊的处理可以自定义,否则会按照默认的。


◆常用的信号


信号名称 信号序号 说明

INT 2 按Ctrl-C键产生该信号,中断程序

TERM 15 kill命令默认传送该信号(即kill PID),终止程序

KILL 9 强制删除进程,一般kill PID无效时,使用kill -9 PID强制结束进程

TSTP 20 按Ctrl-C键产生该信号,在终端中暂停该进程。


😂7、作业管理之进程调度


进程调度是指计算机通过决策哪个就绪进程可以获得CPU使用权。


保留旧进程的运行信息,请出旧进程(收拾包袱)


选择新进程,准备运行环境并分配CPU(新进驻)


进程调度的三种机制 :


1、就绪队列的排队机制


将就绪进程按照一定的方式排成队列,以便调度程序可以最快找到就绪进程。


2、选择运行进程的委派机制


调度程序以一定的策略选择就绪进程,将CPU资源分配给它。


3、新老进程的上下文切换机制


保存当前进程的上下文信息,装入被委派执行进程的运行上下文。


如果进程调度时候,老进程还没执行完,有两种调度方式:

1、非抢占式的调度抢


处理器一旦分配给某个进程,就让该进程一直使用下去,调度程序不以任何原因抢占正在被使用的处理器,直到进程完成工作或因为IO阻塞才会让出处理器。


2、抢占式的调


允许调度程序以一定的策略暂停当前运行的进程,保存好进程的上下文信息,分配处理器给新进程。


抢占式调度 非抢占式调度

系统开销 频繁切换、开销大 切换次数少、开销小

公平性 相对公平 不公平

应用 通用系统 专用系统


🍇7.1、进程调度的算法


先来先服务调度算法


优先取出队列前面的进程进行调度。


短进程优先调度算法


调度程序优先选择就绪队列中估计运行时间最短的进程,短进程优先调度算法不利于长作业进程的执行。


高优先权先调度算法


进程附带优先权,调度程序优先选择权重高的进程,高优先权优先调度算法使得紧迫的任务可以优先处理。


时间片轮转调度算法


按先来先服务的原则排

列就绪进程,每次从队列头部去除待执行进程,分配一个时间片执行,是相对公平的调度算法,但不能保证及时响应用户。


🙂8、作业管理之死锁


**死锁:**死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。


🍇8.1、死锁的产生


1、竞争资源:共享资源数量不满足各个进程的需求,各个进程之间发生资源进程导致死锁。


2、调用顺序不当。


死锁产生的四个必要条件:


1、互斥条件


进程对资源的使用时排他性的使用,某资源只能由一个进程使用,其他进程需要使用只能等待。


2、请求保持条件


进程至少保持一个资源,又提出新的资源请求,新资源被占用,被阻塞的进程不释放自己保持的资源。


3、不可剥夺条件


进程获得的资源在未完成使用前不能被剥夺,获得的资源只能由进程自身释放。


4、环路等待条件


发生死锁时,必然存在进程-资源环形链。


🍈8.2、死锁的处理


预防死锁的方法


破坏四个必要条件之一


1、摒弃请求保持条件


系统规定进程运行之前,一次性申请所有需要的资源,进程在运行期间不会提出资源请求,从而摒弃请求保持条件。

2、摒弃不可剥夺条件


当一个进程请求新的资源得不到满足时,必须释放占有的资源,进程运行时占有的资源可以被释放,意味着可以被剥夺。


3、摒弃环路等待条件


可用资源线性排序,申请必须按照需要递增申请,线性申请不再形成环路,从而摒弃了环路等待条件。


银行家算法


策略原理:客户申请的贷款是有限的,每次申请需要申请最大资金量,银行家在能够满足贷款时,都应该给用户贷款,客户在使用贷款后,能够及时归还贷款。


d3dfd2f56e4d4c179620f4703424c5eb.gif


🙃9、存储管理之内存分配与回收


早期计算机编程并不需要过多的存储管理,随着计算机和程序越来越复杂,存储管理成为必要。


存储管理的作用:


确保计算机有足够的内存 处理数据。


确保程序可以从可用内存中获取一部分内存使用。


确保程序可以归还使用后的内存以供其他程序使用。


🍇9.1、内存分配的过程


单一连续分配是最简单的内存分配方式,只能在单用户、单进程的操作系统中使用。


固定分区分配:支持多道程序的最简单存储分配方式,内存空间被划分为若干固定大小的区域,每个分区只提供给一个程序使用,互不干扰。


**动态分区分配:**根据进程实际需要,动态分配内存空间,涉及相关数据结构、分配算法。


动态分区空闲表数据结构:将内存分为若干个分区,用一张表来表示分区使用情况:


a40d595ae6af4464a2f5e8584fdec4b9.png


0表示没有被占用,1表示被占用。


动态分区空闲链数据结构: 通过链把未被使用的分区以节点的形式连接起来,同时相邻的分区节点可以进行合并,节点需记录可存储容量。


6724f55d35dc488fb4e035a1a01c76b0.png


动态分区分配算法:


首次适应算法(FF算法):分配内存时从开始顺序查找适合内存区,若没有合适的空闲区,则该次分配失败。每次从头部开始,使得头部空间不断被划分。


最佳适应算法(BF算法):最佳适应算法要求空闲链表按照容量大小排序,遍历空闲区链表找到最佳合适空闲区。


5dadd8c613c14b518cd79020e7561d3c.png


快速适应算法(QF算法):快速适应算法要求有多个空闲区链表,每个空闲区链表存储一种容量的空闲区。


04943cabf90f4cfd8af3373c560666e0.png


🍈9.2、内存回收的过程


情况1 情况2 情况3 情况4

… … … …

空闲区1 回收区 空闲区1 …

回收区 空闲区1 回收区 回收区

… … 空闲区2 …

… … … …

解决方案 不需要新建空闲链表节点,只需要把空闲区1的容量增大为空闲区即可 将回收区与空闲区合并,新的空闲区使用回收区的地址 将空闲区1、空闲区2和回收区合并,新的空闲区使用空闲区1的地址 为回收区创建新的空闲节点,插入到相应的空闲区链表中去


😉10、存存储管理之段页式存储管理


🍇10.1、页式存储管理


页面和字块都是大小一样的一块内存,字块是相对物理设备的定义,页面则是相对逻辑空间的定义。


概念: 将进程逻辑空间等分成若干大小的页面,相应的把物理内存空间分成与页面大小的物理块,以页面为单位把进程空间装进物理内存中分散的物理块。


5bc463fdba9e4d938321c745a0afc0b4.png


页面大小应该适用,过大难以分配,过小内存碎片过多,页面大小通常是512B~8K


页表:记录进程逻辑空间与物理空间的映射


在现代计算机系统中,可以支持非常大的逻辑地址空间(232~264),这样,页表就变得非常大,要占用非常大的内存空间,如,具有32位逻辑地址空间的分页系统,规定页面大小为4KB,则在每个进程中的页表项可达1M(220)个,如果每个页表项占用1Byte,故每个进程仅仅页表就要占用1MB的内存空间。 32位系统进程的寻址空间是4G,4G/4KB=220。


将进程逻辑空间等分成若干大小的页面。


相应的把物理内存空间分成与页面大小的物理块。


以页面为单位把进程空间装进物理内存中分散的物理块。


但是如果有一段连续的逻辑分布在多个页面中,将大大降低执行效率。


🍈10.2、段式存储管理


将进程逻辑空间划分成若干段(非等分),段的长度由连续逻辑的长度决定,主函数MAIN、子程序段X、子函数Y等。


866ff4a4c6e44f6eaa9e0bad20ef5e01.png


段表相比页表多了段长,用来记录逻辑长度。


对比:


段氏存储和页式存储都离散地管理了进程的逻辑空间


页是物理单位,段是逻辑单位。


分页是为了合理利用空间,分段是满足用户要求。


页大小由硬件固定,段长度可动态变化。


页表信息是一维的,段表信息是二维的。


🍉10.3、段页式存储管理


分页可以有效提高内存利用率(虽然说存在页内碎片),分段可以更好满足用户需求,两者结合,形成段页式存储管理。


先将逻辑空间按段式管理分成若干段,再把段内空间按页式管理等分成若干页。


cf25ee1a8fba40658109c0921a1edf59.png


😊11、存储管理之虚拟内存


有些进程实际需要的内存很大,超过物理内存的容量。


多道程序设计,使得每个进程可用物理内存更加稀缺。


不可能无限增加物理内存,物理内存总有不够用的时候。


虚拟内存是操作系统内存管理的关键技术,使得多道程序运行和大程序运行成为现实,把程序使用内存划分,将不封暂时不使用的内存放置在辅存。


程序的局部性原理指的是CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。


程序运行时,无需全部装入内存,装载部分即可,如果访问页不在内存,则发出缺页中断,发起页面置换、从用户层面看,程序拥有很大的空间,即是虚拟内存。


虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存。


虚拟内存的置换算法:先进先出算法(FIFO)、最不经常使用算法(LFU)、最近最少使用算法(LRU)。主存和辅存的替换。


在计算机组成原理中有提到这些算法,应用于高速缓存与主存的替换。在这里将着重对比两种替换而不是算法。


替换策略发生在Cache-主存层次,主存-辅存层次。


Cache-主存层次的替换策略主要是为了解决速度问题。


主存-辅存层次主要是为了解决容量问题。


😇12、Linux的存储管理


🍇12.1、Buddy内存管理算法


Buddy算法是经典的内存管理算法,算法基于计算机处理二进制的优势具有极高的效率,算法主要是为了解决内存外碎片的问题,实际上是将内存外碎片问题转移为了内存内碎片的问题。


页内碎片是已经被分配出去(能明确指出属于哪个进程)的内存空间大于请求所需的内存空间,不能被利用的内存空间就是内部碎片。


页外碎片是指还没有分配出去(不属于任何进程),但是由于太小而无法分配给申请内幕才能空间的新进程的内存空间块。


该算法努力让内存分配与相邻内幕才能合并能快速进行,内存分配原则:


向上取整为2的幂大小 70k→128k 129k→256k

伙伴系统: ‘伙伴’指的是内存的‘伙伴’,一片连续内存的‘伙伴’是相邻的另一片大小一样的连续内存。


假设存储空间有1M大小,来分配100k的内存:


1、100k向上取2的幂;


2、 查询是否有128k的空闲内存块;


3、 没有!查询是否有256k空闲内存块;


4、没有!查询是否有512k空闲内存块;


5、没有!查询是否有1M的空闲内存块;


6、有,摘下1M空闲内存块,分配出去;


7、拆下512k放在512k的空闲链表,其余的分配出去;


8、拆下256k放在256k的空闲链表,其余的分配出去;


9、拆下128k的空闲链表,其余的分配出去;


10、分配完毕;


回收刚才分配的内存:


1、判断刚才分配的内存伙伴在空闲链表上吗?


2、 在!移除伙伴,合并为256k空闲内存,判断


3、 在!移除伙伴,合并为512k空闲内存,判断;


4、 在!移除伙伴,合并为1M空闲内存;


5、插入1M空闲链表,回收完成;


🥰13、Linux交换空间


交换空间(Swap)是磁盘的一个分区,Linux物理内存满时,会把一些内存交换至Swap空间,Swap空间是初始化系统时配置的。top命令可以查询到:


冷启动内存依赖。


系统睡眠依赖。


大进程空间依赖。


交换空间与虚拟内存对比:


Swap空间存在于磁盘,虚拟内存也存在于磁盘。


Swap空间与主存发生置换 ,虚拟内存也是与主存发生置换。


Swap空间是操作系统概念,虚拟内存是进程概念。


Swap空间解决系统物理内存不足的问题,虚拟内存解决物理内存不足的问题。


😍14、操作系统的文件管理


🍇14.1、文件的逻辑结构


18de0f56a38d4790afecdfb956c61907.png


有结构文件:有结构内容由定长记录和可变长记录组成,定长记录存储格式、文件描述等结构化数据项,可变长记录存储文件具体内容:


比如png图片文件,分为png文件标记、png数据块和文件结束标记。定长记录存储文件格式、文件描述等结构化数据项,如png文件标记和文件结束标记。可变长记录存储文件具体内容。


无结构文件: 也称为流式文件,文件内容长度以字节为单位,比如exe,dll,so文件等。


顺序文件: 顺序文件是指按顺序存放在存储介质中的文件,磁带的存储特征使得磁带文件只能存储顺序文件,顺序文件是所有逻辑文件当中存储效率最高的。


索引文件: 可变长文件不适合使用顺序文件格式存储,索引文件是为了解决可变长文件存储而发明的一种文件格式,索引文件需要配合索引表完成存储的操作。


🤩15、辅存的存储空间分配


辅存的分配方式


00fba5f1fd7c486aafe23167456fc30c.png


空闲表: 空闲盘区分分配与内存分配类似,首次适应算法、循环适应算法等,回收过程也与内存回收类似。


空闲链表: 空闲链表法把所有空闲盘区组成一个空闲链表,每个链表节点存储空闲盘块和空闲的数目。


位示图: 每个盘块有0/1比特位表示是否被占用。位示图维护成本低,位示图可以非常容易找到空闲盘块,位示图使用0/1比特位,占用空间很小。该方法在辅存中最为常用。


目录管理


3585877b8787477484667f26b6bca941.png


任何文件或目录都只有唯一路径 例如 A/D/M


😘16、Linux文件基本操作


🍇16.1、Linux目录


Linux一切皆是文件


ea7e21fc44244edfa01ef7f14afd48b3.png


绝对路径 相对路径


🍈16.2、Linux文件常用操作


创建文件 touch 文件名 创建并修改文件 vim 文件名


查看文件vim 也可以使用cat 文件名


删除文件 rm 文件名 创建文件夹 mkdir名字 删除文件夹 rm -r 名字


🍉16.3、Linux文件类型


Linux有这些文件类型:套接字(s)、普通文件(-)、目录文件(d)、符号链接(l)、设备文件(b、c)、FIFO§。


通过ls -al可以查看文件属性,首字母表示文件类型。其中b和c分别表示块设备、字符设备。


c70cea353f2a41a48304447719261163.png


😗17、Linux文件类型


🍇17.1、文件系统概览


FAT、NTFS、EXT2/3/4


FAT(File Allocation Table),分为FAT16、FAT32等,微软Dos/Windows使用的文件系统,使用一张表来保存盘块的信息。


NTFS(New Technology File System),WindowsNT环境的文件系统,NTFS对FAT进行了改进,取代了旧的文件系统。Windows、Linux、MacOS均可识别。


EXT(Extended file system),扩展文件系统。Linux的文件系统。数字表示第几代。Window不能识别。


🍈17.2、Ext文件系统


a4ac41a97ce1454a89098fefdfb44b6d.png


Boot Sector:启动扇区,安装开机管理程序。Block Group:块组,存储数据的实际位置。


每一个Block Group有这些信息:


3e8f22a5e9fd4ec6a08610bc763daf13.png


Inode Table:存放文件Inode的地方,每一个文件(目录)都有一个Inode,是每一个文件(目录)的索引节点,也是该文件唯一标记。Inode存放了文件类型、文件权限、文件物理地址、文件长度、文件连接计数、文件存取时间、文件状态、索引节点编号、访问计数、链接指针等等。


需要注意的是文件名不是存放在Inode节点上的,而是存放在目录的Inode节点,目的在于列出目录文件的时候无需加载文件的Inode。


Inode bitmap,Inode的位示图,记录已分配的Inode和未分配的Inode。


Data block,存放文件内容的地方,每个block都有唯一的编号,文件的block记录在文件的Inode上

Block bitmap,功能与Inode bitmap类似,记录Data block的使用情况。


Superblock,记录整个文件系统相关信息的地方,Block和Inode的使用情况,时间信息、控制信息等。


df -T 查看系统挂载的磁盘信息 dumpe2fs 设备名 查看其中的文件系统信息。


stat 文件名查看具体的文件信息。


48b8d4025b0344469a7320a22dbcaa6b.png


☺️18、操作系统的设备管理


🍇18.1、广义的IO设备


对CPU而言,凡是对CPU进行数据输入的都是输入设备,对CPU而言,凡是CPU进行数据输出的都是输出设备。


可以分别按使用特性分类、按设备的共享属性分类、按信息交换的单位分类、按传输速率分类。


使用特性分类:存储设备(内存、硬盘等)、交互IO设备(键盘、显示器等)。


信息交换单位分配:块设备(磁盘、SD卡)、字符设备(打印机、shell终端)。


共享属性分类:共享设备、独占设备、虚拟设备。


传输速率分类:低速设备、中速、高速。


🍈18.2、IO设备缓冲区


CPU与IO设备的速率不匹配问题,所以有个各个存储器的层次结构。而缓冲区也是为了解决这个问题,它可以减少CPU处理IO请求的频率,提高CPU与IO设备之间的并行性。


可以把需要多次交互的请求放入一个缓冲区,将多个请求写入缓冲区,减少交互次数。


缓冲池:专用缓冲区只适用于特定的IO进程,当这样的IO进程比较多时,对内存的消耗也很大,操作系统划出可供多个进程使用的公共缓冲区,称之为缓冲池。


🍉18.3、SPOOLing技术


是一种慢速字符设备如何与计算机主机交换信息的一种技术,利用高速共享设备将低俗的独享设备模拟为高速的共享设备。逻辑上,系统为每一个用户都分配了一台独立的高速独享设备,所以这是一种虚拟设备技术。


8bd56b562b2344cd8da1dd391e8b8e76.png


假设有三个进程要使用打印机,同步调用的效率会比较低。从磁盘中划出一部分空间叫输出井,各个进程将调用请求放入输出井,由SPOOLing技术来完成输出井到打印机的交互。


SPOOLing技术把同步调用的低速设备改为异步调用


总结起来该技术就是:


在输入、输出之间增加了派对转存储环节(输入井、输出井)。


SPOOLing负责输入(出)井与低速设备之间的调用。


逻辑上,进程直接与高速设备交互,减少了进程等待时间。


😚19、Linux文本编辑器及软件安装


Nano文本编辑器


复制、剪贴和粘贴


复制一整行:Alt+6


剪贴一整行:Ctrl+K


粘贴:Ctrl+U


如果需要复制/剪贴多行或者一行中的一部分,先将光标移动到需要复制/剪贴的文本的开头,按Ctrl+6(或者Alt+A)做标记,然后移动光标到 待复制/剪贴的文本末尾。这时选定的文本会反白,用Alt+6来复制,Ctrl+K来剪贴。若在选择文本过程中要取消,只需要再按一次Ctrl+6。


搜索


按Ctrl+W,然后输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本。


保存


使用Ctrl+O来保存所做的修改


退出


按Ctrl+X


nano file


可以直接路径,没有该文件的话,就会创建一个再编辑。


配置nano编辑器


单个用户配置:


一般通过/home/username路径下的.nanorc文件修改。nano .nanorc

配置语言以set开头:

# 相当于命令后面加 -m 参数 鼠标生效
set mouse
# 相当于 -i 参数 自动缩进
set autoindent
# 激活职能home键 -A参数
set smarthome


全局配置:


/etc/nanorc文件中修改(root用户)
sudo nano /etc/nanorc


配置终端:


单个用户的终端配置文件/home/username/.bashrc


nano ~/.bashrc


bash其实是一种shell,shell用于解释我们输入终端的各种命令的,是用户和操作系统之间的一个命令解释器。


配置.bashrc文件可以修改终端的各种配置,如命令提示符样式,创建命令别名


# 创建别名 alias xx='command'
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'


全局配置的路径:/etc/bash.bashrc,但是家目录下的优先级高于系统的bash.bashrc文件。


profile配置文件

单个用户:~/.profile,全局/etc/profile。


bashrc应用于图形化终端,profile应用于TTY1-TTY6这种需要用户登录的终端。profile文件会调用.bashrc。


7ae60e6cdd264efcaf50a45bd7b7e19a.png


bashrc 和 profile二者修改后都是下次登陆生效,需要立即生效使用source命令:


source .bashrc
source .profile


😙20、Ubuntu软件仓库


对于ubuntu系统,在全世界各地分布有软件仓库。Linux的.deb软件包相较于windows的exe安装包文件,包含了依赖关系的管理,对于依赖的软件会自动下载。


管理软件仓库


如果我们要切换软件仓库,可以通过编辑软件仓库列表文件/etc/apt/sources.list(root模式)


一般来说,这个文件中有作用的行是由以下两个指令开头:


deb: 用于下载软件的二进制版本,大多数情况下我们用的是这个


deb-src: 用于下载软件的源代码


# 举例其中一行
deb http://cn.archive.ubuntu.com/ubuntu/ bionic universe

aa864eab3c51496c9252ec4c722a8a81.png

第二个是仓库地址,第三个bionic是Ubuntu版本代号,第三个universe是软件仓库的区域,也就是要查看的代码仓库的不同分区。


Ubuntu图形界面中software&update中可以直接切换软件仓库,更加方便。


😋21、终端包管理工具


apt-get/apt管理包命令


aptitude:这个命令再卸载软件时可以卸载不用的依赖


sudo apt update更新软件包缓存;sudo apt-cache search搜索软件包;sudo apt install安装软件包;

sudo apt upgrade升级所有已安装软件包;sudo apt autoremove


dpkg命令时apt-get和aptitude两个命令的后端(backend)命令


依赖链:dpkg-->apt-get,aptitude-->Ubuntu Software


使用dpkg可以安装本地的软件包:sudo dpkg -i *.deb,卸载:sudo dpkg -r 包名


😛22、阅读手册


man命令


例如man ls,会出现ls命令的使用说明。手册的各部分区域说明:


NAME


命令的全称


SYNOPSIS


概要,使用此命令的方法


ls [OPTION]... [FILE]...


aa864eab3c51496c9252ec4c722a8a81.png


粗体:原封不动输入。


下划线:用实际内容替代。


[-hvc]中括号内为可选参数。


a|b输入a或b选项。


OPTION参数,省略号表示可输入多个参数。


DESCRIPTION


列出所有参数和用法


其他区域:AUTHOR, REPROTIONG BUGS, COPYRIGHT, SEE ALSO


apropos查找命令


apropos命令后面添加关键字即可(根据手册中的关键字)


例如需要查找控制音量的方法 apropos sound


3e4facad14124519af3d6a0039daa828.png


😜23、其他查阅手册的方法


很多命令都支持-h参数


比man命令的内容稍显简便


whatis命令


man的精简版,显示man的NAME区域


文件查找命令


locate命令


查找速度极快,查找包含关键字的文件。


locate xxx


会查找并列出xxx(目录或文件名包含xxx)所在的所有目录。


缺陷:如果是刚新建的文件locate是查不到的,因为locate不是查找硬盘,是在数据库(包含文件的列表和文件的位置)中查找记录。对于刚创建的文件,没有更新进数据库(一般24小时自动更新)


当然也可以用updatedb命令强制系统立即更新数据库 sudo updatedb。


find命令深入查找


遍历实际的硬盘的文件,还可以对查找的文件进行操作。 查找文件要完全对应关键字,但是可以用正则匹配 功能强大。


find 默认当前子目录查找,也可以指定目录查找;用文件名、创建时间等查找;最后可以对找到的文件进行操作。


例如:find -name 'new_file'根据名字查找当前目录的文件 ; find /var/log -name 'syslog'查找其他目录的文件;


根据文件大小查找


find /var -size +10M查找/var目录下大于10m的文件。


根据文件的最近访问时间查找


find -name '*.txt' -atime -7查找7天内访问的txt文件。


仅查找目录或文件


find -name 'file1' -type d查找名为file1的目录


操作查找结果


格式化输出:find -name 'file1' -printf '%p - %u\n'将查找到的文件格式化输出为文件名 - 用户名的形式。


删除操作:xxx -delete


调用其他命令:


加上-exec参数之后就可以接其他命令了,十分强大


# 将/var目录下的所有txt文件修改权限为600
find /var -name '*.txt' -exec chmod 600 {} \;


大括号表示刚查找到的文件,\;是exec的结尾。


将-exec参数换成-ok参数效果一样,但是会对每个文件都做确认提示!


🌟作者相关的文章、资源分享🌟

🌟让天下没有学不会的技术🌟


学习C#不再是难问题


🌳《C#入门到高级教程》🌳


有关C#实战项目


👉C#RS232C通讯源码👈


👉C#委托数据传输👈


👉C# Modbus TCP 源代码👈


👉C# 仓库管理系统源码👈


👉C# 欧姆龙通讯Demo👈


👉C# 欧姆龙通讯Demo👈


👉2021C#与Halcon视觉通用的框架👈


✨有关C#项目欢迎各位查看个人主页✨


🌟机器视觉、深度学习🌟


🌌《Halcon入门到精通》🌌


🌌《深度学习资料与教程》🌌


有关机器视觉、深度学习实战


👉2021年C#+HALCON视觉软件👈


👉2021年C#+HALCON实现模板匹配👈


👉C#集成Halcon的深度学习软件👈


👉C#集成Halcon的深度学习软件,带[MNIST例子]数据集👈


👉C#支持等比例缩放拖动的halcon WPF开源窗体控件👈


👉2021年Labview联合HALCON👈


👉2021年Labview联合Visionpro👈


👉基于Halcon及VS的动车组制动闸片厚度自动识别模块👈


✨有关机器视觉、深度学习实战欢迎各位查看个人主页✨


🌟Java、数据库教程与项目🌟


🍏《JAVA入门到高级教程》🍏


🍏《数据库入门到高级教程》🍏


有关Java、数据库项目实战


👉Java经典怀旧小霸王网页游戏机源码增强版👈


👉Java物业管理系统+小程序源码👈


👉JAVA酒店客房预定管理系统的设计与实现SQLserver👈


👉JAVA图书管理系统的研究与开发MYSQL👈


✨有关Java、数据库教程与项目实战欢迎各位查看个人主页✨


🌟分享Python知识讲解、分享🌟


🥝《Python知识、项目专栏》🥝


🥝《Python 检测抖音关注账号是否封号程》🥝


🥝《手把手教你Python+Qt5安装与使用》🥝


🥝《用一万字给小白全面讲解python编程基础问答》🥝


🥝《Python 绘制Android CPU和内存增长曲线》🥝


有关Python项目实战


👉Python基于Django图书管理系统👈


👉Python管理系统👈


👉2021年9个常用的python爬虫源码👈


👉python二维码生成器👈


✨有关Python教程与项目实战欢迎各位查看个人主页✨


🌟分享各大公司面试题、面试流程🌟


🍏《2021年金九银十最新的VUE面试题☀️《❤️记得收藏❤️》》🍏


🍏《只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》》🍏


🍏《❤️用一万字给小白全面讲解python编程基础问答❤️《😀记得收藏不然看着看着就不见了😀》》🍏


✨有关各大公司面试题、面试流程欢迎各位查看个人主页✨


3fe9de0a24734c089d7095aadca20179.gif

关注苏州程序大白,持续更新技术分享。谢谢大家支持


1ec459f293fd4bca94be143d14e6af4c.gif

相关文章
|
1月前
|
人工智能 分布式计算 大数据
Linux操作系统:开源力量的崛起与影响###
一场技术革命的火种,如何燎原? 本文将带您深入探索Linux操作系统的诞生背景、核心特性及其对现代科技世界的深远影响。从1991年芬兰学生Linus Torvalds的一个小众项目,到如今成为支撑全球无数服务器、超级计算机及物联网设备的基石,Linux的发展既是一部技术创新史,也是开源文化胜利的见证。通过剖析其设计哲学、安全性、灵活性等关键优势,结合实例展示Linux在云计算、大数据处理等领域的广泛应用,本文旨在揭示Linux为何能在众多操作系统中脱颖而出,以及它如何塑造了我们今天的数字生活。 ###
|
1月前
|
安全 Linux 编译器
探索Linux内核的奥秘:从零构建操作系统####
本文旨在通过深入浅出的方式,带领读者踏上一段从零开始构建简化版Linux操作系统的旅程。我们将避开复杂的技术细节,以通俗易懂的语言,逐步揭开Linux内核的神秘面纱,探讨其工作原理、核心组件及如何通过实践加深理解。这既是一次对操作系统原理的深刻洞察,也是一场激发创新思维与实践能力的冒险。 ####
|
14天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
42 9
|
13天前
|
缓存 运维 网络协议
深入Linux内核架构:操作系统的核心奥秘
深入Linux内核架构:操作系统的核心奥秘
32 2
|
17天前
|
缓存 网络协议 Linux
Linux操作系统内核
Linux操作系统内核 1、进程管理: 进程调度 进程创建与销毁 进程间通信 2、内存管理: 内存分配与回收 虚拟内存管理 缓存管理 3、驱动管理: 设备驱动程序接口 硬件抽象层 中断处理 4、文件和网络管理: 文件系统管理 网络协议栈 网络安全及防火墙管理
36 4
|
16天前
|
安全 网络协议 Linux
Linux操作系统的内核升级与优化策略####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统内核升级的重要性,并详细阐述了一系列优化策略,旨在帮助系统管理员和高级用户提升系统的稳定性、安全性和性能。通过实际案例分析,我们展示了如何安全有效地进行内核升级,以及如何利用调优技术充分发挥Linux系统的潜力。 ####
38 1
|
19天前
|
物联网 Linux 云计算
Linux操作系统的演变与未来趋势####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其在服务器、桌面及嵌入式系统领域的应用现状,并展望了云计算、物联网时代下Linux的未来趋势。通过回顾历史、剖析现状、预测未来,本文旨在为读者提供一个全面而深入的视角,以理解Linux在当今技术生态中的重要地位及其发展潜力。 ####
|
24天前
|
边缘计算 人工智能 运维
Linux操作系统:开源力量的崛起与影响###
一场技术革命的回顾 回溯至1991年,当Linus Torvalds宣布Linux操作系统的诞生时,世界或许并未意识到这一举措将如何深刻地改变技术领域的面貌。本文旨在探讨Linux操作系统的发展历程、核心特性、以及它如何引领了一场开源运动,重塑了软件行业的生态。从最初的个人爱好项目成长为全球最广泛采用的服务器操作系统之一,Linux的故事是技术创新与社区精神共同推动下的辉煌篇章。 ###
|
23天前
|
人工智能 安全 Linux
|
26天前
|
物联网 Linux 5G
Linux操作系统的演变与未来趋势####
本文深入探讨了Linux操作系统的发展历程,从最初的一个学生项目到如今全球最流行的开源操作系统之一。文章将分析Linux的核心优势、关键特性以及它在云计算、物联网和嵌入式系统中的应用前景。通过具体案例展示Linux如何推动技术创新,并预测其在未来技术生态中的角色。本文旨在为读者提供一个全面而深入的理解,帮助他们认识到Linux在现代计算环境中的重要性及其未来的潜力。 ####
下一篇
无影云桌面