面试过程中,对于Linux系统的理论还是有一定要求的,但相比之下,常用shell命令的考察频率会更高一点,这里简单总结了一下可能会问到的理论。
1、Unix和Linux有什么区别?
- Linux是一款开源操作系统,不需要付费,即可使用;Unix是一款对源码实行知识产权保护的传统商业软件,使用需要付费授权使用。
- Linux操作系统具有良好的跨平台性能,可运行在多种硬件平台上;Unix操作系统跨平台性能较弱,大多需与硬件配套使用。
- Linux除了进行命令行操作,还有窗体管理系统;Unix只是命令行下的系统。
- Linux操作系统对硬件的要求较低,安装方法更易掌握;Unix对硬件要求比较苛刻,按照难度较大
2、Linux的基本组件是什么?
就像任何其他典型的操作系统一样,Linux拥有所有这些组件:**内核,shell和GUI,系统实用程序和应用程序。**Linux比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。
3、什么是 Linux 内核?
Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
- 系统内存管理
- 应用程序管理
- 硬件设备管理
- 文件系统管理
4、Linux 的体系结构?
从大的方面讲,Linux 体系结构可以分为两块:
- 用户空间(User Space) :用户空间又包括用户的应用程序(User Applications)、C 库(C Library) 。
- 内核空间(Kernel Space) :内核空间又包括系统调用接口(System Call Interface)、内核(Kernel)、平台架构相关的代码(Architecture-Dependent Kernel Code) 。
5、简述Linux 文件系统?
在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。即“一切都是文件”
Linux 支持 5 种文件类型,如下图所示:
文件类型6、软链接和硬链接
软链接
符号链接:相当于Windows的快捷方式,如果源文件移动或者删除,软链接失效。
创建命令:
ln -s 文件名 软链接的名字
img硬链接
- 硬链接指通过索引节点来进行连接
- 在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)
- 在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接
创建命令:
ln 源文件 硬链接文件名
实际场景下,基本是使用软链接。总结区别如下:
- 硬链接不可以跨分区,软件链可以跨分区。
- 硬链接指向一个 inode 节点,而软链接则是创建一个新的 inode 节点。
- 删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。
7、讲一下虚拟内存?
-
虚拟内存技术,对于提升计算机性能有着一定的作用,当内存资源不足时,合理的设置虚拟内存大小,可以缓解计算机系统的压力,有效的帮助系统更快的运行。
-
linux有一个swap分区。Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间中的信息被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。系统总是在物理内存不够时,才进行Swap交换。
-
你电脑打开了一个音乐播放器,但是也没播放歌曲,然后你几天不关机,也一直没关闭这个音乐播放器,随着运行的程序越来越多,内存快不够用了,所以操作系统就选择将这个音乐播放器的内存状态(包括堆栈状态等)都写到磁盘上的swap区进行保存。这样就腾出来一部分内存供其他需要运行的程序使用。你啥时候想听歌了,就找到了这个音乐播放器程序操作。此时, 系统会从磁盘中的swap区重新读取该音乐播放器的相关信息,送回内存接着运行。
-
在window下也有类作用的硬盘空间,属于对用户不可见的匿名磁盘空间(在C盘)。
小结
- **通过 虚拟内存可以让程序可以拥有超过系统物理内存大小的可用内存空间。**为进程提供看起来速度足够快并且容量足够大的存储;
- 另外,虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)。这样会更加有效地管理内存并减少出错。
- 虚拟内存可以控制进程对物理内存的访问,隔离不同进程的访问权限,提高系统的安全性;
8、什么是交换空间?
交换空间是Linux使用的一定空间,用于临时保存一些并发运行的程序。当RAM没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况。
9、为什么 Linux 体系结构要分为用户空间和内核空间的原因?
- 1、现代 CPU 实现了不同的工作模式,不同模式下 CPU 可以执行的指令和访问的寄存器不同。
- 2、Linux 从 CPU 的角度出发,为了保护内核的安全,把系统分成了两部分。
- 用户态和内核态是程序执行的两种不同的状态,我们可以通过两种方式完成用户空间到内核空间的转移:1)系统调用;2)硬件中断。
10、讲一下用户态和内核态?
- 用户态:**只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取 **
- 内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序
- 用户态切换到内核态的 3 种方式:系统调用、异常、外设中断
- 区别:每个进程都有完全属于自己的,独立的,不被干扰的内存空间;用户态的程序就不能随意操作内核地址空间,具有一定的安全保护作用;内核态线程共享内核地址空间;
11、为什么要区分用户态与内核态?
-
在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机N回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权级别分为4个级别:
RING0
、RING1
、RING2
、RING3
。 -
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。
- 当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。
- 当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。这样,用户态的程序就不能 随意操作内核地址空间,具有一定的安全保护作用。
- 处理器总处于以下状态中的一种:
- 内核态,运行于进程上下文,内核代表进程运行于内核空间;
- 内核态,运行于中断上下文,内核代表硬件运行于内核空间;
- 用户态,运行于用户空间。
12、用户态到内核态怎样切换?
从用户态到内核态切换可以通过三种方式:
-
**系统调用:**这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。
-
异常: 当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
-
外设中断: 当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的。
13、对MMU 地址转换了解多少?
- MMU 是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件
- 分段机制把一个逻辑地址转换为线性地址
- 分页机制把一个线性地址转换为物理地址
分段机制
- 段选择符
- 为了方便快速检索段选择符,处理器提供了 6 个分段寄存器来缓存段选择符,它们是:cs,ss,ds,es,fs 和 gs
- 段的基地址(Base Address):在线性地址空间中段的起始地址
- 段的界限(Limit):在虚拟地址空间中,段内可以使用的最大偏移量
- 分段实现
-
逻辑地址的段寄存器中的值提供段描述符,然后从段描述符中得到段的基地址和段界限,然后加上逻辑地址的偏移量,就得到了线性地址
img
分页机制(32 位)
- 分页机制是在分段机制之后进行的,它进一步将线性地址转换为物理地址
- 10 位页目录,10 位页表项, 12 位页偏移地址
- 单页的大小为 4KB
14、讲一下页面置换算法?
地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断 。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统 必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法,页面置换算法的作用是 实现虚拟存储管理。
- OPT页面置换算法(最佳页面置换算法) :理想情况,不可能实现,一般作为衡量其他置换算法的方法。
- FIFO页面置换算法(先进先出页面置换算法) : **总是淘汰最先进入内存的页面,**即选择在内存中驻留时间最久的页面进行淘汰。
- LRU页面置换算法(最近未使用页面置换算法) :LRU(Least Currently Used)算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间T,当须淘汰一个页面时,选择现有页面中其T值最大的,即最近最久未使用的页面予以淘汰。
- LFU页面置换算法(最少使用页面排序算法) : LFU(Least Frequently Used)算法会让系统维护一个按最近一次访问时间排序的页面链表,链表首节点是最近刚刚使用过的页面,链表尾节点是最久未使用的页面。访问内存时,找到相应页面,并把它移到链表之首。缺页时,置换链表尾节点的页面。也就是说内存内使用越频繁的页面,被保留的时间也相对越长。
15、讲一下共享内存?
- 它允许多个不相关的进程去访问同一部分逻辑内存
- 两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案
- 两个运行中的进程共享数据,是进程间通信的高效方法,可有效减少数据拷贝的次数
- Shm 接口
- shmget 创建共享内存
- shmat 启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间
- shmdt 将共享内存从当前进程中分离
16、int类型在32位虚拟机和64位虚拟机分别占的内存是多少
16位操作系统中,int 占16位;在32位操作系统中,int 占32位。但是现在人们已经习惯了 int 占32位,因此在64位操作系统中,int 仍为32位。
分享一道智力题,面试也经常问到哦!
300斤土豆从A运到B, 距离一共100公里,只有一匹马儿,马儿每走一公里要吃一斤土豆,马儿最多鸵100斤,最多可以送过去多少斤?
答案:
末
【面试系列】会持续更新,欢迎关注公众号“任冬学编程”,一起学习与进步!
- END -