操作系统面试题(1)Linux基础

操作系统面试题(1)Linux基础

1 Linux有什么特点和优势?

(1)稳定性:Linux具有良好的崩溃恢复机制,即使在系统故障或意外情况下也能保持稳定。
(2)可定制性:Linux系统可以根据用户的需求进行高度定制。用户可以自由选择和配置不同的组件、桌面环境和工具,以创建符合个人或组织需求的定制化系统。
(3)开放源代码:Linux是一个开放源代码的操作系统,这意味着用户可以自由地查看、修改和分发系统的代码。这种开放性促进了创新、安全性和可定制性。
(4)社区支持:Linux拥有庞大的开源社区,包括开发者、用户和贡献者。这个社区为用户提供了丰富的文档、教程、支持和解决方案,帮助用户解决问题和获得技术支持。
(5)安全性:Linux系统在安全性方面表现出色。由于其开放源代码的特性,安全漏洞可以及时发现和修复。此外,Linux提供了丰富的安全功能和工具,例如访问控制、防火墙和加密,以保护系统和数据的安全。
(6)多用户多任务:Linux支持多用户环境,可以同时为多个用户提供服务。它还具有良好的多任务处理能力,可以同时运行多个应用程序,并有效地管理系统资源。

2 Linux的基本组件有哪些?

Kernel:Linux 内核是操作系统的核心部分,负责管理和控制硬件资源,并提供基本的系统功能。它处理进程管理、内存管理、设备驱动程序、文件系统、网络协议栈等重要任务。Linux 内核具有模块化的设计,使得用户可以根据需要添加或删除特定的模块。

Shell: Shell 是 Linux 用户和内核之间的接口。在 shell 中,命令由用户发出,然后由操作系统执行。
系统库:这些是特殊程序或函数,它们负责实现操作系统的大部分功能,而不依赖于内核模块的代码访问权限。

GNU 工具:这些GNU 工具是一组由 GNU 项目开发的实用工具集合,用于完成各种任务。这些工具包括常见的命令行工具,如文本编辑器(例如 Emacs 和 Vim)、文件操作工具(例如 ls、cp 和 rm)、文本处理工具(例如 grep 和 sed)等。GNU 工具是 Linux 系统的重要组成部分。

系统库:Linux 提供了广泛的系统库,用于应用程序开发。最常用的是 GNU C 库(glibc),它提供了 C 语言标准函数和系统调用的封装。此外,还有其他库,如 libstdc++(C++ 的标准库)、libpthread(线程库)、libm(数学函数库)等,它们为开发者提供了丰富的函数和功能。

X Window System:X Window System 是 Linux 中常用的图形窗口系统,它提供了图形界面环境以及与图形硬件和输入设备的交互。X Window System 使用客户端-服务器模型,其中 X 服务器负责图形显示和输入设备控制。用户可以通过 X 客户端连接到 X 服务器,并在其上运行图形化应用程序。

桌面环境:Linux 上有多个桌面环境可供选择,每个桌面环境都具有自己的外观、特性和工具集GNOME 和 KDE 是两个最受欢迎的桌面环境,它们提供了完整的图形用户界面和一系列应用程序,包括文件管理器、文本编辑器、终端模拟器等。

文件系统:Linux 支持多种文件系统,用于组织和管理存储设备上的文件和目录。常见的文件系统包括 EXT4、XFS 等。文件系统负责维护文件的元数据以及文件数据的物理存储位置。它还提供了对文件的访问和操作的接口。

3 Linux内核有什么作用?

Process Scheduler,也称作进程管理、进程调度。负责管理CPU资源,以便让各个进程可以以尽量公平的方式访问CPU。

IPC(Inter-Process Communication),进程间通信。IPC不管理任何的硬件,它主要负责Linux系统中进程之间的通信。

Memory Manager,内存管理。负责管理Memory(内存)资源,以便让各个进程可以安全地共享机器的内存资源。另外,内存管理会提供虚拟内存的机制,该机制可以让进程使用多于系统可用Memory的内存,不用的内存会通过文件系统保存在外部非易失存储器中,需要使用的时候,再取回到内存中。

VFS(Virtual File System),虚拟文件系统。Linux内核将不同功能的外部设备,例如Disk设备(硬盘、磁盘、NAND Flash、Nor Flash等)、输入输出设备、显示设备等等,抽象为可以通过统一的文件操作接口(open、close、read、write等)来访问。这就是Linux系统“一切皆是文件”的体现。

Network,Linux 内核支持各种网络协议,如 TCP/IP、UDP、HTTP、FTP 等。网络协议栈是在内核中实现的协议和算法的集合,它使得 Linux 能够进行网络通信。Linux 提供了丰富的网络工具和命令,如 ifconfig、ping、netstat 等,用于配置网络接口、测试连接和监控网络状态。。

4 为什么需要进程间通信,有哪些通信方式?

进程是操作系统的概念。每当我们执行一个程序,就创建了一个进程,在这个过程中伴随着资源的分配和释放。进程是一个程序的一次执行过程。进程用户空间是相互独立的,一般而言是不能相互访问的。很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。进程间通信的场景有:
(1)数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。
(2)共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
(3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
(4)资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
(5)进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

进程间通信主要有3种:
(1)管道:依托于文件系统,分为匿名管道、pipe命名管道。
(2)System V进程间通信:聚焦在本地通讯,System V 消息队列、System V 共享内存、System V 信号量。
(3)POSIX进程间通信:让通信过程可以跨主机,消息队列、共享内存、信号量、互斥量、条件变量、读写锁。

5 Linux文件系统有什么特点?

Linux的一切皆文件。Linux 中的文档、目录、键盘、监视器、硬盘、可移动媒体设备、打印机、调制解调器、虚拟终端,还有进程间通信(IPC)和网络通信等输入/输出资源都是定义在文件系统空间下的字节流, 一切都可看作是文件。一切皆文件和文件目录树的资源管理方式一起构成了Linux的文件体系。

6 软链接和硬链接有什么区别?

硬链接是指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号号(Inode Index)或者Inode,它是文件或者目录在一个文件系统中的唯一标识,文件的实际数据放置在数据区域(data block),它存储着文件重要参数信息,也就是元数据 (metadata),比如创建时间、修改时间、文件大小、属主、归属的用户组、读写权限、数据所在block号等,

软链接(也叫符号链接),类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。软链接是建立了另一个新的独立的文件,它指向源文件,因为源文件没了。在删除源文件的时候,系统则将链接数减1,当链接数为0的时候,inode就会被系统回收,文件的内容才会被删除。

7 Linux常见系统目录的作用?

(1)/ 根目录
(2)/boot 引导程序,内核等存放的目录
(3)/sbin 超级用户可以使用的命令的存放目录
(4)/bin 普通用户可以使用的命令的存放目录
(5)/lib 根目录下的所程序的共享库目录
(6)/dev 设备文件目录,在Linux中设备都是以文件形式出现,这里的设备可以是硬盘,键盘,鼠标,网卡,终端,等设备,通过访问这些文件可以访问到相应的设备。
(7)/home 普通用户的家目录
(8)/root 用户root的$HOME目录
(9)/etc 全局的配置文件存放目录
(10)/usr 这个目录中包含了命令库文件和在通常操作中不会修改的文件。
(11)/proc 特殊文件目录。这个目录采用一种特殊的文件系统格式,有助于我们了解系统内部信息。
(12)/opt 可择的文件目录,这个目录表示的是可择的意思,些自定义软件包或者第方工具,就可以安装在这里。
(13)/mnt 临时挂载目录。这个目录一般是用于存放挂载储存设备的挂载目录的,比如磁盘,光驱,网络文件系统等,当我们需要挂载某个磁盘设备的时候,可以把磁盘设备挂载到这个目录上去,这样我们可以直接通过访问这个目录来访问那个磁盘了
(14)/media 挂载的媒体设备目录。挂载的媒体设备目录,一般外部设备挂载到这里。
(15)/var 内容经常变化的目录,此目录下文件的大小可能会改变,如缓冲文件,日志文件,缓存文件,等一般都存放在这里。
(16)/tmp 临时文件目录
(17)/lost+found 恢复文件存放的位置

8 Linux内存管理机制是什么?

Linux 内存管理机制是Linux 操作系统的重要组成部分,可以提高系统的性能和稳定性,高效地利用内存资源,主要功能包括:
(1)内存分配:Linux 内核可以通过内存分配程序将系统可用的内存资源分配给应用程序或内核模块使用。
(2)内存释放:当应用程序或内核模块不再需要使用内存时,Linux 内核会将其释放回系统可用的内存池中,以便其他程序或模块使用。
(3)内存回收:当系统内存资源不足时,Linux 内核会回收不再使用的内存资源,以便系统能够继续运行。
(4)内存管理:Linux 内核会对系统中的内存资源进行管理和优化,以确保系统能够高效地利用可用的内存资源。

使用 Linux 内存管理机制需要注意以下几点:
(1)合理设置内存参数:Linux 内核有很多内存参数可以设置,如内存大小、内存分配策略、页面交换设置等。应该根据系统的实际情况合理设置这些参数,以提高系统的性能和稳定性。
(2)避免内存泄漏:内存泄漏是指应用程序或内核模块在使用内存时没有及时释放内存资源,导致系统内存资源不足。应该编写高质量的代码,避免内存泄漏的发生。
(3)避免过度使用页面交换:页面交换是指将内存中的数据暂时保存到硬盘上,以便系统能够继续运行。过度使用页面交换会降低系统的性能,应该根据系统的实际情况合理设置页面交换参数。

Linux使用虚拟内存和内存映射来管理内存,每个进程都有独立的虚拟地址空间,通过将虚拟地址映射到物理内存,实现对内存的管理和访问。

(1)虚拟地址空间划分:32位系统中,内核空间占1GB,用户空间占3GB;64位系统中,内核空间和用户空间分别占用了128TB。
(2)内存映射:通过页表将虚拟地址映射到物理地址。每个进程有自己的页表,存储在CPU的内存管理单元(MMU)中,实现快速地址转换。
(3)缺页异常:当进程访问的虚拟地址在页表中找不到对应的物理地址时,触发缺页异常。系统分配物理内存并更新页表,实现地址映射。
(4)多级页表和HugePage:为减少页表项数量和访问时间,Linux采用多级页表和HugePage机制。多级页表通过层次结构减小页表大小,HugePage将多个物理页合并为一个大页面。

通过虚拟内存和内存映射,Linux进程拥有独立的虚拟地址空间,只分配实际使用的物理内存,这提高了系统的灵活性、效率和安全性。

参考(摘抄的文字版权属于原作者)
https://www.cnblogs.com/msjhw/p/17302784.html
https://zhuanlan.zhihu.com/p/573952449
https://blog.csdn.net/lx473774000/article/details/131122502
https://blog.csdn.net/gx714433461/article/details/130880576

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注