1 GNU和GPL分别指的是什么
在Linux系统中,GNU和GPL分别指的是:
- GNU:全称为GNU's not unix,是由自由软件基金会(FSF)制定和发布的一种操作系统。它是由许多软件组件组成的,包括Emacs、gcc、bash、gawk等,这些组件加上自己的内核构成了GNU自己的系统。
- GPL:全称为General Public License,即通用公共许可证,是一种自由软件许可证。它保证任何人有共享和修改自由软件的自由。在Linux内核中遵循GPL协议,但并不是GNU项目的部分。基于GPL的软件允许商业化销售,但不允许封闭源代码。
2简要叙述Linux操作系统产生的四个支柱
Linux操作系统的诞生、发展和成长过程始终依赖着以下四个支柱:
- UNIX操作系统:UNIX操作系统是Linux的原型,提供了Linux的大部分基础功能。
- MINIX操作系统:MINIX是Linux的启蒙老师,Linus Torvalds 就是受到它的启发开始编写自己的操作系统。
- GNU计划:GNU计划推动了自由软件的发展,其开发的一套自由软件运动系统为Linux提供了软件基础。
- POSIX标准:POSIX标准使得Linux可以与其他UNIX类操作系统进行兼容,为其提供了进一步的发展空间。
3linux系统有哪些明显特点
Linux系统有许多显著的特点,以下列举一些:
- 免费和开放:Linux操作系统是免费的,用户可以方便地获取和使用。此外,Linux的源代码是开放的,用户可以进行代码改进,满足特定需求。
- 多用户:Linux系统可以支持多个用户同时使用,每个用户对自己的资源(例如:文件、设备)有特定的权限,且互相影响。
- 多任务:Linux可以同时执行多个程序,而各个程序的运行互相独立。
- 良好的用户界面:Linux提供了两种界面,包括用户界面和系统调用。此外,Linux还提供了图形用户界面,使用户操作更为直观和方便。
- 设备独立性:Linux将所有外部设备统一当作文件来处理,只要安装它们的驱动程序,任何用户都可以像操作文件一样来操作这些设备。
- 丰富的网络功能:Linux内置网络功能,支持多种网络协议,包括FTP、Telnet、NFS等。
- 可靠的安全系统:Linux采取了许多安全技术措施,包括对读、写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。
- 可移植性:Linux支持许多为所有Unix提出的的标准,符合Unix的标准,可将Linux上完成的程序移植到其他Unix机器上运行。
4什么是Linux的发行版本,列举三个比教有影响的Linux发行版
Linux的发行版本是预先集成好Linux操作系统及各种应用软件的版本,用户可以直接安装使用,而不需要重新编译。Linux的发行版本可以通过软件包管理系统来进行应用软件的管理。
以下是三个比较有影响的Linux发行版:
- Ubuntu(Canonical公司):Ubuntu是一款非常流行的Linux发行版,由Canonical公司开发。它提供了强大的功能和易用性,包括桌面环境、办公套件、媒体播放器等。Ubuntu在云计算领域也有广泛的应用。
- Fedora(Red Hat):Fedora是Red Hat公司开发的Linux发行版,它以创新和新技术而闻名。Fedora提供了丰富的软件包和更新,以及强大的社区支持。
- Debian:Debian是另一个广受欢迎的Linux发行版,它以稳定性和高度可定制性而闻名。Debian提供了多种桌面环境,包括GNOME、KDE等。
5Linux内核在计算机系统中的作用是什么,有哪些的主要特征
Linux内核在计算机系统中的作用是至关重要的。它负责整个硬件的驱动,提供各种系统所需的核心功能,包括内存管理、进程管理、设备驱动程序以及系统调用和安全防护等。
Linux内核的主要特征包括:
- 内存管理:追踪记录有多少内存存储了什么以及存储在哪里。
- 进程管理:确定哪些进程可以使用中央处理器(CPU)、何时使用以及持续多长时间。
- 设备驱动程序:充当硬件与进程之间的调解程序/解释程序。
- 系统调用和安全防护:从流程接受服务请求。
6Linux内核主要由五大组成模块构成:
- 进程调度模块:主要负责控制进程对CPU资源的使用。它采取的调度策略能使各进程能够公平合理地访问CPU,同时保证内核能及时地执行硬件操作。
- 内存管理模块:用于确保所有进程能够安全地共享机器主内存区。它还支持虚拟内存管理方式,使得Linux支持进程使用比实际内存空间更多的内存容量,并可以利用文件系统,对暂时不用的内存数据块交换到外部存储设备上去,当需要时再交换回来。
- 文件系统模块:用于支持对外部设备的驱动和存储。虚拟文件系统模块通过向所有的外部存储设备提供一个通用的文件接口,隐藏了各种硬件设备的不同细节,从而提供并支持与其它操作系统兼容的多种文件系统格式。
- 进程间通信模块:主要用于控制不同进程间在用户空间的同步、数据共享和交换。
- 网络接口模块:是Linux内核中负责网络功能的核心组件,它提供了对网络协议和服务的支持,如TCP/IP、UDP、ARP等。
7试分析进程和程序的异同点
进程和程序在以下几个方面存在异同点:
- 概念定义:程序是静态的,指一组指令的集合,而进程是动态的,是程序的执行过程。一个程序可以对应多个进程,但一个进程不能对应多个程序。
- 运行环境:程序是静态的,无法直接与操作系统进行交互。而进程是动态的,可以与操作系统进行交互。
- 资源占用:程序本身不占用系统资源,而进程在运行时会占用系统资源,如CPU、内存、I/O设备等。
- 执行过程:程序是一个静态的实体,不需要执行就可以存在于计算机中。而进程是一个动态的实体,需要经过创建、调度和终止等过程。
- 实例:一个程序在系统中的实例可以通过进程来体现,同一个程序可以同时运行多个实例,每个实例对应一个进程。
8 linux的进程状态有哪些,如何进行转换
Linux的进程状态有以下几种:
- 就绪状态(Runnable):进程已获得处理器,并等待被调度执行。
- 执行状态(Running):进程正在处理器上执行。
- 阻塞状态(Blocked):正在执行的进程因等待某个事件发生而无法执行时,会进入阻塞状态。引起进程阻塞的事件可能有很多种,如等待I/O完成、申请缓冲区不能满足、等待信号等。
- 可中断阻塞状态(interruptible sleep):进程因等待某个事件发生而无法执行时,会进入可中断阻塞状态。不可中断指的是进程不响应信号。处于不可中断阻塞状态的进程排成一个不可中断阻塞状态进程队列。该队列中的阻塞进程,不可被其他进程唤醒,只有被使用wake_up()函数明确唤醒时才能转换到可运行的就绪状态。
- 暂停状态(Stopped):当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号,让进程转换到可运行状态。
- 僵死状态(Zombie):处于退出状态的进程即将被销毁,EXIT_DEAD非常短暂,几乎不可能通过ps命令捕捉到。
进程状态的转换如下:
- 就绪->执行:处于就绪状态的进程,当进程调度程序为之分配了处理器后,该进程便由就绪状态转变为执行状态。
- 执行->就绪:处于执行状态的进程在其执行进程中,因分配给它的一个时间片已用完而不得不让处理器,于是进程从执行状态转换成就绪状态。
- 执行->阻塞:正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
- 阻塞->就绪:处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
9常用的与进程控制相关的系统调用算法有哪些,其作用是什么?
常用的进程调度算法有以下几种:
- 先进先出算法(FIFO):按照进程就绪的先后次序来调度进程。实现简单,但没有考虑进程的优先级。
- 短作业优先算法(SJF/SPF):选择就绪队列中估计运行时间最短的进程投入运行。平均周转时间、带权平均周转时间都改善,但对长作业非常不利,不能保证紧迫性进程得到及时处理。
- 时间片轮转算法(RR—Round Robin):给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完成后便调度下一个进程执行。兼顾长短作业,有较好的响应时间,可行性强,适用于各种作业环境。
- 优先权调度算法(HPF—Highest Priority First):优先选择就绪队列中优先权最高的进程投入运行。
- 多级反馈队列算法:将时间片轮转与优先级调度相结合,把进程按优先级分成不同的队列,先按优先级调度,优先级相同的,按时间片轮转。
这些算法各有优势,可以根据具体应用场景进行选择。
10如何评价一个进程调度算法的优劣
评价一个进程调度算法的优劣主要可以从以下几个方面进行:
- 公平性:进程调度算法应该公平地对待每个进程,避免某些进程得到过多的CPU时间或者某些进程被长时间地等待。对于每个进程,应该按照它们的优先级、到达时间、等待时间等因素进行合理调度,使得每个进程都有公平的机会使用CPU。
- 吞吐量:进程调度算法应该尽可能地提高系统的吞吐量,即单位时间内完成的任务数量。高效的进程调度算法可以减少CPU空闲时间,从而提高系统的吞吐量。同时,应该避免饥饿问题的出现,即不能让某些进程长时间得不到运行。
- 响应时间:进程调度算法应该尽可能地减少系统的响应时间,即从用户提交请求到系统响应用户所需要的时间。快速的响应时间可以提高用户的使用体验,对于交互式系统尤其重要。
- 资源利用率:进程调度算法应该尽可能地提高系统资源的利用率,避免出现某些资源闲置不用的情况。高效的资源利用可以减少浪费和能源消耗,提高系统的整体性能。
- 可扩展性:进程调度算法应该具有良好的可扩展性,能够在不同规模的系统上运行并保持良好的性能。在大规模系统中,调度算法的复杂度和性能要求更高,因此需要设计高效的算法来满足系统的需求。
- 稳定性:进程调度算法应该具有稳定性,即系统在长时间运行后仍然能够保持稳定的状态。稳定的调度算法可以避免系统出现异常情况或者崩溃,提高系统的可靠性和稳定性。
- 实时性:对于一些需要实时响应的进程,进程调度算法应该能够保证其实时性,即能够在规定的时间内完成任务。实时性对于一些需要快速响应的场景非常重要,如实时控制系统、航空交通控制系统等。
12虚拟地址,物理地址与虚实地址转换分别指的是什么
虚拟地址和物理地址是操作系统中重要的概念,它们涉及到进程如何访问内存以及操作系统如何管理内存。
虚拟地址是指一种逻辑意义上的地址,当进程想要访问某个虚拟地址时,需要将其转换为物理地址才能够真实地访问到。虚拟地址不是直接送到内存地址总线上,而是送到内存管理单元MMU。MMU由一个或一组芯片组成,一般存在与协处理器中,其功能是把虚拟地址映射为物理地址。
物理地址指的是实际存在的物理内存地址,比如一个2G的内存芯片,系统的物理内存就是2G,需要访问该内存中的一个地址时,就需要对应的物理内存地址。
虚实地址转换是指虚拟地址到物理地址的转换,这个转换是由硬件执行的,比如在ARM32 Linux系统中,每个进程都享有4G大小的虚拟地址空间,而物理地址大小要看设备配置了多大的物理内存,这个是实际存在的物理内存,比如2G。
13进程是运行在虚拟内存空间还是物理内存空间?有什么好处
进程是运行在虚拟内存空间中的。虚拟内存是操作系统内核为了对进程地址空间进行管理而精心设计的一个逻辑意义上的内存空间概念。虚拟内存是逻辑意义上的内存空间,为了能够让程序在物理机器上运行,必须有一套机制可以让这些假象的虚拟内存空间映射到物理内存空间(实实在在的RAM内存条上的空间),这其实就是操作系统中页映射表( page table)所做的事情。
运行在虚拟内存空间的好处是:
- 隔离:每个进程都有自己的虚拟内存空间,可以相互隔离,防止不同进程间的互相干扰和数据泄露。
- 动态扩展:虚拟内存可以动态地扩展和收缩,从而有效地管理内存资源,提高系统的性能。
- 保护:虚拟内存空间的设计可以有效地防止物理内存被随意改写,从而保护了系统的稳定性和安全性。
- 高效:虚拟内存空间的设计可以使CPU和内存的访问速度得到有效的平衡,从而提高系统的整体性能。
14如何理解虚拟内存页到物理内存页的映射关系
虚拟内存到物理内存的映射关系是通过页表(page table)来实现的。页表是一种数据结构,它记录了虚拟地址到物理地址的映射关系。每个进程都有自己的页表,用来将该进程的虚拟地址映射到物理地址。
在虚拟内存中,每个页面都被映射到物理内存中的一个页面。当进程访问虚拟内存时,会通过页表来查询对应的物理内存地址。页表中的每一项称为一个页表项,它记录了虚拟页面号和物理页面号之间的映射关系。
当进程运行时,操作系统会将程序加载到虚拟内存中。此时,程序看到的仍然是虚拟地址,而不是物理地址。当程序需要访问内存时,它会使用虚拟地址。操作系统会根据页表将虚拟地址转换为物理地址,然后从物理内存中读取数据。
如果虚拟内存中没有对应的物理内存页,就会发生页面缺失(page fault)事件。这时,操作系统会通过缺页异常机制将需要的页面从硬盘上的临时空间(即页面文件)中加载到物理内存中,并将虚拟地址和物理地址建立映射关系。
总之,虚拟内存和物理内存之间的映射关系是通过页表来实现的。操作系统通过查询页表可以将虚拟地址转换为物理地址,从而实现虚拟内存到物理内存的映射。
15 Linux内存缺页异常处理的总体方案是什么?
Linux内存管理中的缺页异常处理是操作系统内核处理中的重要环节,它对于保证系统稳定性和性能具有关键作用。缺页异常主要处理以下四种情形:
- 请求调页:当进程调用malloc()之类的函数调用时,并未实际上分配物理内存,而是仅仅分配了一段线性地址空间。在实际访问该页框时才实际去分配物理页框,这样可以节省物理内存的开销。还有一种情况是在内存回收时,该物理页面的内容被写到了磁盘上,被系统回收了,这时候需要再分配页框,并且读取其保存的内容。
- 写时复制:当fork()一个进程时,子进程并未完整的复制父进程的地址空间,而是共享相关的资源,父进程的页表被设为只读的。当子进程进行写操作时,会触发缺页异常,从而为子进程分配页框。
- 地址范围外的错误:内核访问无效地址,用户态进程访问无效地址等。
16简述伙伴算法的工作原理。
伙伴算法是一种用于管理操作系统动态内存分配的算法,主要用于在系统中对大块的内存进行管理。这个算法是由Robert W. Buddy在20世纪60年代提出的。
工作原理:
- 将可用内存块划分为等大小的块,并将它们组织成为一颗完全二叉树。每个节点表示块的大小,而叶子节点表示实际可分配的内存块。
- 当需要分配内存时,系统会从根节点开始搜索空闲块,找到合适大小的块之后,将块进行拆分,分配给程序使用。
- 如果一块内存不够用了,那么系统将把它与其“伙伴”合并成更大的块。这样做的目的是为了避免内存碎片的产生。
- 每当一个块被分配或释放时,相关的位也要更新。当合并两个伙伴块时,就可以根据它们的位的状态来确定它们应该合并到哪一个较大的块中去。
伙伴算法的优点是它可以高效地管理内存,避免了内存碎片的产生,并保证了内存的分配速度。但缺点是浪费了一些内存,因为它要把内存块分解成为等大小的块,而实际分配给程序的内存不一定需要这么大。
17伙伴算法和Slab机制之间的关系是什么
伙伴算法和Slab机制是操作系统内存管理的两个重要机制。它们之间的关系可以从以下几个方面来理解:
- 目的和设计:伙伴算法是为了有效管理内存碎片,提高内存利用率和系统性能而设计的。它通过将内存分为不同大小的块,并使用二叉树来维护这些块的使用情况,以高效地分配内存。Slab机制则是为了提高内核对象的内存分配效率,减少内存碎片,提高内存分配的速度而设计的。它通过将内存分为不同的slab,每个slab管理一类内核对象,以提高内存的利用率和访问速度。
- 实现方式:在实现上,伙伴系统和slab通常是一起使用的。当需要为内核对象分配内存时,slab会先从伙伴系统中分配出一块合适大小的物理内存,然后将该物理内存划分为slab,并在其中管理内核对象。因此,可以说伙伴系统和slab是相互配合的内存管理机制。
- 关联和互补:伙伴算法主要针对大块的内存区域进行管理,如页框等。它通过将大的内存块不断分割成两个较小的伙伴块,并按照块大小将伙伴块归入不同的空闲链表中,以便快速找到符合要求的内存块。Slab机制则主要针对内核对象的内存分配。它将内存分为不同的slab,每个slab管理一类内核对象。这样可以高效地分配和释放内存,减少内存碎片的产生。因此,可以说伙伴算法是内存管理的基石,而slab是在其基础上实现的内存分配器。两者在实际应用中经常一起使用,以高效地管理和分配内存。
综上所述,伙伴算法和Slab机制是操作系统内存管理的两个重要机制。它们之间存在密切的关联和互补关系。在实际应用中,它们通常一起使用,以高效地管理和分配内存,提高系统的性能和稳定性。
18有哪些可以供选择的页交换时机?各种页交换时机的优缺点是什么?
在操作系统中,选择何时进行页面交换是非常重要的。以下是几种可供选择的页面交换时机:
- 缺页中断:当进程在运行过程中发生缺页中断,即所需页面在内存中不存在时,可以进行页面交换。此时,操作系统会选择一个页面进行替换,以便为所需页面腾出空间。这种交换时机的优点是及时响应缺页中断,减少页面缺失率,提高系统性能。但是缺点是可能会频繁地发生页面交换,导致系统开销增加。
- 页面过期:页面过期是指操作系统设置的一个时间限制,当一个页面在内存中停留超过这个时间限制时,操作系统会将其视为无效页面,并将其交换出去。这种交换时机的优点是可以及时清理内存中的无效页面,提高内存利用率。但是缺点是可能会出现频繁的页面过期和页面交换,增加系统开销。
- 基于预测的页面交换:基于预测的页面交换是指根据预测算法预测出进程接下来可能会访问的页面,提前将这些页面加载到内存中。这种交换时机的优点是可以减少缺页中断和页面过期的情况,提高系统性能。但是缺点是预测算法的准确性难以保证,如果预测不准确,可能会导致内存浪费或者页面缺失率增加。
- 基于LRU(最近最少使用)算法的页面交换:LRU算法是一种常见的页面置换算法,它选择最近最久未使用的页面进行替换。这种交换时机的优点是可以减少内存碎片和页面缺失率,提高系统性能。但是缺点是实现复杂度较高,需要记录每个页面的使用情况,增加了系统的开销。
综上所述,选择合适的页面交换时机需要根据具体情况进行权衡和选择。不同的交换时机都有各自的优缺点,需要根据实际情况进行选择。
19什么是临界资源?如何实现临界资源的访问?
临界资源是一次仅允许一个进程使用的共享资源。通俗来说,同一时刻只能由一个进程进行访问的资源。在多任务操作系统环境中,许多任务可能会竞争同一临界资源。
实现临界资源的访问主要有两种方法:
- 关闭中断:避免了其他任务和中断来破坏,即这时候中断和任务调度无法正常进行。在FreeRTOS提供的读写队列、信号量、互斥量等API函数里面,均实现了临界区的访问,其采用的均是关闭中断的方法来进行临界区的访问。这时候中断和任务调度无法正常进行。
- 关闭调度器:避免了其他任务破坏,但这时候中断还是可以发生和处理的。在事件组的相关API函数内部进入临界区的方法均是采用关闭调度器的方法。“暂停调度器”void vTaskSuspendAll( void ); “恢复调度器”BaseType_t xTaskResumeAll( void );
20.如何用信号量实现生产者——消费者进程的同步?
信号量是一种非常常用的同步工具,可以用于解决生产者——消费者问题。下面是一个使用信号量实现生产者——消费者进程同步的示例:
首先,我们需要定义三个信号量:
empty
:表示缓冲区中空闲的位置,初始值为缓冲区的大小。
full
:表示缓冲区中已经生产出来的产品数量,初始值为0。
mutex
:用于保护对缓冲区的访问,初始值为1。
生产者进程:
P(empty)
:如果缓冲区没有满,生产者可以进入缓冲区。
- 在缓冲区中添加一个产品。
V(full)
:增加缓冲区中的产品数量。
V(mutex)
:释放对缓冲区的访问权。
消费者进程:
P(full)
:如果缓冲区不为空,消费者可以进入缓冲区。
- 从缓冲区中取出一个产品。
V(empty)
:减少缓冲区中的空闲位置。
V(mutex)
:释放对缓冲区的访问权。
在这个例子中,empty
和full
信号量用于控制生产者和消费者进程的同步,而mutex
信号量则用于保护对缓冲区的互斥访问。通过这种方式,我们可以确保生产者和消费者进程正确地同步和互斥地访问缓冲区。
21.常见进程间的高级通信方式有哪些?各自有什么优缺点
常见的进程间高级通信方式包括:
-
消息队列:
- 优点:可以实现任意进程间的通信,并通过系统调用函数来实现消息发送和接收之间的同步,无需考虑同步问题,方便。
- 缺点:信息的复制需要额外消耗CPU的时间,不适宜于信息量大或操作频繁的场合。
-
共享内存:
- 优点:最快的一种通信方式,多个进程可同时访问同一片内存空间,相对其他方式来说具有更少的数据拷贝,效率较高。
- 缺点:需要结合信号灯或其他方式来实现多个进程间同步,自身不具备同步机制。
-
管道(匿名管道和命名管道):
- 优点:基于操作系统内核提供的缓冲区,通过将一个进程的输出连接到另一个进程的输入来实现进程间通信。简单方便。
- 缺点:只能用于有亲缘关系进程之间的通信;只支持单向数据流,如果要双向通信需要多创建一个管道来实现。
-
socket:
- 优点:使用socket通信的方式实现起来简单,可以使用因特网域和UNIX域来实现,使用因特网域可以实现不同主机之间的进出通信。随进程持续。自带同步机制。
- 缺点:自身不携带同步机制,需要额外的方式来辅助实现同步。
-
信号:
- 优点:这种通信可携带的信息极少,适合用于需要经常携带数据的通信。随内核持续。
- 缺点:自身不携带同步机制,需要额外的方式来辅助实现同步。只适合用于传递简单的信号,不适合用于频繁且数据量大的通信。
以上是常见的高级进程间通信方式及其优缺点,不同的方式适用于不同的应用场景,需要根据具体需求来选择合适的通信方式。
22.LINUX常见的进程通信方式是什么
在Linux系统中,常见的进程通信方式有以下几种:
- 管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,通常用于父子进程之间的通信。它包括匿名管道和命名管道两种形式。
- 信号(signal):信号是一种异步通信方式,进程不必通过任何操作来等待信号的到达。它可以用来通知接收进程某个事件已经发生。
- 消息队列(message queue):消息队列是消息的链表,存放在内核中并由消息队列标识符标识。它允许一个或多个进程向它写入与读取消息。
- 共享内存(shared memory):共享内存允许多个进程直接读写同一块内存空间,是针对其他通信机制运行效率较低而设计的。进程可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。但是,我们通常需要用其他的机制来同步对共享内存的访问。
- 信号量(semaphore):信号量实质上就是一个标识可用资源数量的计数器,它的值总是非负整数。它可以用来控制多个进程对共享资源的访问。
- 套接字(socket):套接口也是一种进程间通信机制,与其他通信机制不同的是,除了本机的进程间通信,它也可用于不同机器间的进程通信。
23.什么是文件?什么是文件系统?
文件是一段程序或数据的集合,在计算机系统中,文件被解释为一组赋名的相关联字符流的集合,或者是相关联记录的集合。文件具有三个基本特征:文件的内容为一组相关信息、文件具有保存性、文件可按名存取。
文件系统是操作系统中负责管理和存取文件的程序模块,也称为信息管理系统。它是由管理文件所需的数据结构(如文件控制块、存储分配表)和相应的管理软件以及访问文件的一组操作所组成。文件系统负责为用户建立、撤销、读写、修改和复制文件,还负责完成对文件的按名存取和进行存取控制。为了合理的存放文件,必须对磁盘等辅助存储器空间进行统一管理。为了实现按名存取,需要有一个用户可见的文件逻辑结构,用户按照文件逻辑结构所给定的方式进行信息的存取和加工。为了便于存放和加工信息,文件在存储设备上应按一定的顺序存放。此外,文件系统还需要完成对存放在存储设备上的文件信息的查找、完成文件的共享和提供保护功能。
根据对文件的操作权限,文件系统可以分为只允许用户通过系统调用来执行的文件、允许用户对其进行读取和执行的库文件,以及用户委托文件系统保存的文件这三种类型。
24 Linux下的文件类型有哪些?如何标识?
在Linux系统中,文件的类型主要有以下几种:
- 普通文件:这是最常见的文件类型,包括文本文件、图片文件、压缩文件等。通常用“-”符号表示。
- 目录文件:用“d”表示,是文件系统的一个目录。
- 字符设备文件:字符设备使用“c”表示,例如鼠标、键盘等I/O设备。
- 块设备文件:块设备文件使用“b”表示,例如硬盘、CD光驱等。
- 链接文件:链接文件使用“l”表示,相当于Windows下的快捷方式。
这些文件类型都可以通过命令file [文件名]
来确定,该命令可以查看文件的类型。
25.试分析虚拟文件系统与实际文件系统的区别和联系
虚拟文件系统与实际文件系统的主要区别和联系如下:
-
区别:
- 实际文件系统是实际存储和管理文件的系统,而虚拟文件系统则是对文件系统的抽象和统一表示,使得应用程序可以不用考虑底层文件系统的细节。
- 文件系统包含了文件的物理存储结构,而虚拟文件系统则是对文件的逻辑结构的描述,包括文件名、权限、大小等。
- 文件系统是面向存储设备的,而虚拟文件系统则是面向进程的,为进程提供了访问文件的接口。
-
联系:
- 虚拟文件系统与实际文件系统都是用于管理文件的系统,它们共同协作,使得文件可以被正确地存储、管理和访问。
- 虚拟文件系统通过抽象和统一化底层实际文件系统的细节,提供了一种更高级别的文件管理接口,使得应用程序可以更方便地与底层实际文件系统交互。
- 虚拟文件系统和实际文件系统都需要考虑文件的存储、访问、共享和管理等问题,它们的设计和实现有很多相似之处。
26.VFS有哪些主要对象?各自存放什么信息?
VFS的主要对象包括超级块对象(superblock object)、索引节点对象(inode object)和文件对象(file object)。
- 超级块对象:存放已安装文件系统有关的信息,例如文件系统的控制块信息。所有的超级块对象都以双向循环链表的形式链接在一起,每个节点有自旋锁避免此链表受到多处理器系统上的同时访问。
- 索引节点对象:存放具体文件的一般信息(内核在操作文件或目录时需要的全部信息)。一个索引节点代表文件系统中的一个文件,但是索引节点仅当文件被访问时,才在内存中创建。
- 文件对象:它代表由进程打开的文件。存放打开文件与进程之间进行交互的有关信息。这些信息仅当进程访问文件期间存放在内核中。