目录
前言
1. 什么是Linux
2. Windows和Linux的区别
3. Unix和Linux有什么区别?
4. 什么是 Linux 内核?
5. Linux的基本组件是什么?
6. Linux 的体系结构
7. BASH和DOS之间的基本区别是什么?
8. Linux 开机启动过程?
9. Linux系统缺省的运行级别?
10. Linux 使用的进程间通信方式?
11. Linux 有哪些系统日志文件?
12. Linux系统安装多个桌面环境有帮助吗?
13. 什么是交换空间?
14. 什么是root帐户
15. 什么是LILO?
16. 什么是BASH?
17. 什么是CLI?
18. 什么是GUI?
19. 开源的优势是什么?
20. GNU项目的重要性是什么?
21. 简单 Linux 文件系统?
22. Linux 的目录结构是怎样的?
23. 什么是 inode ?
24. 什么是硬链接和软链接?
25. RAID 是什么?
26. 一台 Linux 系统初始化环境后需要做一些什么安全工作?
27. 什么叫 CC 攻击?什么叫 DDOS 攻击?
28. 什么是网站数据库注入?
29. Shell 脚本是什么?
30.如何选择 Linux 操作系统版本?
31. 如何规划一台 Linux 主机,步骤是怎样?
32. 请问当用户反馈网站访问慢,你会如何处理?
33. Linux 性能调优都有哪几种方法?
34. 基本命令
35.Linux 中主要有哪几种内核锁?
36.Linux 中的用户模式和内核模式是什么含意?
37.怎样申请大块内核内存?
38.用户进程间通信主要哪几种方式?
39.通过伙伴系统申请内核内存的函数有哪些?
40.Linux 虚拟文件系统的关键数据结构有哪些?(至少写出四个)
41.对文件或设备的操作函数保存在那个数据结构中?
42.Linux 中的文件包括哪些?
43.创建进程的系统调用有那些?
44.调用 schedule()进行进程切换的方式有几种?
45.Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
46.进程调度的核心数据结构是哪个?
47.如何加载、卸载一个模块?
48.模块和应用程序分别运行在什么空间?
49.Linux 中的浮点运算由应用程序实现还是内核实现?
50.模块程序能否使用可链接的库函数?
51.TLB 中缓存的是什么内容?
52.Linux 中有哪几种设备?
53.字符设备驱动程序的关键数据结构是哪个?
54.设备驱动程序包括哪些功能函数?
55.如何唯一标识一个设备?
56.Linux 通过什么方式实现系统调用?
57.Linux 软中断和工作队列的作用是什么?
前言
作为 Java 的从业者,在找工作的时候,一定会被问及关于Linux 相关的知识。Linux知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。在这里我们将详细的整理常见的Linux面试题目, 提供给大家学习参考。
小编分享的这份金三银四Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等26个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!【持续更新中!】
完整版Java面试题地址:2021最新面试题合集集锦。
序号 |
专题 |
内容 |
链接地址 |
1 |
中间件 |
【金三银四】Java中间件面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/114002362 |
2 |
微服务 |
【金三银四】Java微服务面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/113923549 |
3 |
并发编程 |
【金三银四】Java并发编程面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/113895576 |
4 |
Java基础 |
【金三银四】Java基础知识面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115146056 |
5 |
Spring Boot |
【金三银四】Spring Boot面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115186811 |
6 |
Redis |
【金三银四】Redis面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115188010 |
7 |
Spring MVC |
【金三银四】Spring MVC面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115220638 |
8 |
Spring Cloud |
【金三银四】Spring Cloud面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115220987 |
9 |
MySQL优化 |
【金三银四】MySQL优化面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115254620 |
10 |
JVM |
【金三银四】JVM性能调优面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115283079 |
11 |
Linux |
【金三银四】Linux面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115283583 |
12 |
Mybatis |
【金三银四】Mybatis面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115285732 |
13 |
网络编程 |
【金三银四】TCP,UDP,Socket,Http网络编程面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115464896 |
14 |
设计模式 |
【金三银四】设计模式面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115466449 |
15 |
大数据 |
金三银四】大数据面试题100道(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115484939 |
16 |
Tomcat |
【金三银四】Tomcat面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115486648 |
17 |
多线程 |
【金三银四】多线程面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115487212 |
18 |
Nginx |
【金三银四】Nginx_BIO_NIO_AIO面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115488446 |
19 |
memcache |
【金三银四】memcache面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115494213 |
20 |
java异常 |
【金三银四】java异常面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115530401 |
21 |
Java虚拟机 |
【金三银四】Java虚拟机面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115532365 |
22 |
Java集合 |
【金三银四】Java集合面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115599284 |
23 |
Git常用命令 |
【金三银四】Git常用命令(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115602390 |
24 |
Elasticsearch |
【金三银四】Elasticsearch面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115604293 |
25 |
Dubbo |
【金三银四】Dubbo面试题(2021最新版) |
https://blog.csdn.net/SQY0809/article/details/115605560 |
1. 什么是Linux
Linux
是一套免费使用和自由传播的类似
Unix
操作系统,一般的
WEB
项目都是部署都是放在
Linux操作系统上面。 Linux
是一个基于
POSIX
和
Unix
的多用户、多任务、支持多线程和多
CPU
的操作系统。它能运行主要的Unix
工具软件、应用程序和网络协议。它支持
32
位和
64
位硬件。
Linux
继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
2. Windows和Linux的区别
- Windows是微软开发的操作系统,民用操作系统,可用于娱乐、影音、上网。 Windows操作系统具有强大的日志记录系统和强大的桌面应用。好处是它可以帮我们实现非常多绚丽多彩的效果,可以非常方便去进行娱乐、影音、上网。
- Linux的应用相对单纯很多,没有什么绚丽多彩的效果,因此Linux的性能是非常出色的,可以完全针对机器的配置有针对性的优化,
- 简单来说Windows适合普通用户进行娱乐办公使用,Linux适合软件开发部署
3. Unix和Linux有什么区别?
4. 什么是 Linux 内核?
Linux
系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
- 1. 系统内存管理
- 2. 应用程序管理
- 3. 硬件设备管理
- 4. 文件系统管理
5. Linux的基本组件是什么?
就像任何其他典型的操作系统一样,
Linux
拥有所有这些组件:内核,
shell
和
GUI
,系统实用程序和应用程序。Linux
比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。
6. Linux 的体系结构
从大的方面讲,Linux 体系结构可以分为两块:
7. BASH和DOS之间的基本区别是什么?
8. Linux 开机启动过程?
- 1、主机加电自检,加载 BIOS 硬件信息。
- 2、读取 MBR 的引导文件(GRUB、LILO)。
- 3、引导 Linux 内核。
- 4、运行第一个进程 init (进程号永远为 1 )。
- 5、进入相应的运行级别。
- 6、运行终端,输入用户名和密码。
9. Linux系统缺省的运行级别?
- 关机。
- 单机用户模式。
- 字符界面的多用户模式(不支持网络)。
- 字符界面的多用户模式。
- 未分配使用。
- 图形界面的多用户模式。
- 重启。
10. Linux 使用的进程间通信方式?
- 1、管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
- 2、信号(signal) 。
- 3、消息队列。
- 4、共享内存。
- 5、信号量。
- 6、套接字(socket) 。
11. Linux 有哪些系统日志文件?
比较重要的是
/var/log/messages
日志文件。
12. Linux系统安装多个桌面环境有帮助吗?
通常,一个桌面环境,如
KDE
或
Gnome
,足以在没有问题的情况下运行。尽管系统允许从一个环境切换到另一个环境,但这对用户来说都是优先考虑的问题。有些程序在一个环境中工作而在另一个环境中无法工作,因此它也可以被视为选择使用哪个环境的一个因素。
13. 什么是交换空间?
交换空间是
Linux
使用的一定空间,用于临时保存一些并发运行的程序。当
RAM
没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况。
14. 什么是root帐户
root
帐户就像一个系统管理员帐户,允许你完全控制系统。你可以在此处创建和维护用户帐户,为每个帐户分配不同的权限。每次安装Linux
时都是默认帐户。
15. 什么是LILO?
LILO
是
Linux
的引导加载程序。它主要用于将
Linux
操作系统加载到主内存中,以便它可以开始运行。
16. 什么是BASH?
BASH
是
Bourne Again SHell
的缩写。它由
Steve Bourne
编写,作为原始
Bourne Shell
(由
/ bin /sh表示)的替代品。它结合了原始版本的
Bourne Shell
的所有功能,以及其他功能,使其更容易使用。从那以后,它已被改编为运行Linux
的大多数系统的默认
shell
。
17. 什么是CLI?
18. 什么是GUI?
19. 开源的优势是什么?
开源允许你将软件(包括源代码)免费分发给任何感兴趣的人。然后,人们可以添加功能,甚至可以调试和更正源代码中的错误。它们甚至可以让它运行得更好,然后再次自由地重新分配这些增强的源代码。这最终使社区中的每个人受益。
20. GNU项目的重要性是什么?
这种所谓的自由软件运动具有多种优势,例如可以自由地运行程序以及根据你的需要自由学习和修改程序。它还允许你将软件副本重新分发给其他人,以及自由改进软件并将其发布给公众。
21. 简单 Linux 文件系统?
22. Linux 的目录结构是怎样的?
Linux
文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
23. 什么是 inode ?
24. 什么是硬链接和软链接?
25. RAID 是什么?
26. 一台 Linux 系统初始化环境后需要做一些什么安全工作?
27. 什么叫 CC 攻击?什么叫 DDOS 攻击?
28. 什么是网站数据库注入?
29. Shell 脚本是什么?
一个
Shell
脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell
脚本
)
来完成这些日常工作任务。
30.如何选择 Linux 操作系统版本?
31. 如何规划一台 Linux 主机,步骤是怎样?
32. 请问当用户反馈网站访问慢,你会如何处理?
33. Linux 性能调优都有哪几种方法?
- 1、Disabling daemons (关闭 daemons)。
- 2、Shutting down the GUI (关闭 GUI)。
- 3、Changing kernel parameters (改变内核参数)。
- 4、Kernel parameters (内核参数)。
- 5、Tuning the processor subsystem (处理器子系统调优)。
- 6、Tuning the memory subsystem (内存子系统调优)。
- 7、Tuning the fifile system (文件系统子系统调优)。
- 8、Tuning the network subsystem(网络子系统调优)。
34. 基本命令
- cd (change directory:英文释义是改变目录)切换目录
- pwd (print working directory:显示当前工作目录的绝对路径)
- ls (ls:list的缩写,查看列表)查看当前目录下的所有文件夹(ls 只列出文件名或目录名)
- ll (ll:list的缩写,查看列表详情)查看当前目录下的所有详细信息和文件夹(ll 结果是详细,有时间,是否可读写等信息)
- touch (touch:创建文件)创建文件
- mkdir (mkdir:创建目录) 创建目录
- cat (concatenate:显示或把多个文本文件连接起来)查看文件命令(可以快捷查看当前文件的内容)(不能快速定位到最后一页)
- more (more:更多的意思)分页查看文件命令(不能快速定位到最后一页)
- tail(尾巴) 查看文件命令(看最后多少行)
- cp(copy单词缩写,复制功能)
- mv(move单词缩写,移动功能,该文件名称功能)
- rm(remove:移除的意思)删除文件,或文件夹
- fifind (fifind:找到的意思)查找指定文件或目录
- 回车:向下n行,需要定义,默认为1行。
- 空格键:向下滚动一屏或Ctrl+F
- B:返回上一层或Ctrl+B
- q:退出more
- less -m 显示类似于more命令的百分比。
- less -N 显示每行的行号。(大写的N)
- 两参数一起使用如:less -mN 文件名,如此可分页并显示行号。
- 空格键:前下一页或page down。
- 回车:向下一行。
- b:后退一页 或 page up。
- q:退出。
- d:前进半页。
- u:后退半页
- tail -10 ;文件名 看最后10行
- cp /opt/java/java.log /opt/logs/ ;把java.log 复制到/opt/logs/下
- cp /opt/java/java.log /opt/logs/aaa.log ;把java.log 复制到/opt/logs/下并且改名为
- aaa.log
- cp -r /opt/java /opt/logs ;把文件夹及内容复制到logs文件中
- mv /opt/java/java.log /opt/mysql/ ;移动文件到mysql目录下
- mv java.log mysql.log ;把java.log改名为mysql.log
- -f或--force 强制删除文件或目录。删除文件不包括文件夹的文件
- -r或-R或--recursive 递归处理,将指定目录下的所有文件及子目录一并删除。
- -rf 强制删除文件夹及内容
- rm 文件名 ;安全删除命令 (yes删除 no取消)
- rm -rf 强制删除文件夹及内容
- rm -rf * 删除当前目录下的所有内容。
- rm -rf /* 删除Linux系统根目录下所有的内容。系统将完蛋。vi (VIsual:视觉)文本编辑器 类似win的记事本 (操作类似于地下的vim命令,看底下vim 的操
- 作)
- vim (VI IMproved:改进版视觉)改进版文本编辑器 (不管是文件查看还是文件编辑 按 Shift + 上或
- 者下可以上下移动查看视角)
- | 管道命令(把多个命令组合起来使用)
- * 表示0~多个任意字符。
- find -name 文件名;按照指定名称查找在当前目录下查找文件
- find / -name 文件名按照指定名称全局查找文件
- find -name '*文件名' ;任意前缀加上文件名在当前目录下查找文件
- find / -name '*文件名*' ;全局进行模糊查询带文件名的文件
- 输入”vim 文件名” 打开文件,刚刚时是”一般模式”。
- 一般模式:可以浏览文件内容,可以进行文本快捷操作。如单行复制,多行复制,单行删除,多行删除,(退
- 出)等。
- 插入模式:可以编辑文件内容。
- 底行模式:可以进行强制退出操作,不保存 :q!
- 可以进行保存并退出操作 :wq
- 按下”i”或”a”或”o”键,从”一般模式”,进入”插入模式(编辑模式)”。
- 在编辑模式下按”Esc” 即可到一般模式
- 在一般模式下按”:”,冒号进入底行模式。
- 在一般模式下的快捷键
- dd ;删除一整行
- X ;向前删除 等同于windowns系统中的删除键
- x ;向后删除和大写x相反方向
- Ctrl + f ;向后看一页
- Ctrl + b ;向前看一页
- u ;撤销上一步操作
- /word ;向下查找word关键字 输入:n查找下一个,N查找上一个(不管是哪个查找都是全局查找 只不过
- n的方向相反)
- ?log ;向上查找log关键字 输入:n查找上一个,N查找下一个
- :1,90s/redis/Redis/g ;把1-90行的redis替换为Redis。语法n1,n2s/原关键字/新关键字/g,n1
- 代表其实行,n2代表结尾行,g是必须要的
- :0 ;光标移动到第一行
- :$ ;光标移动到最后一行
- :300 ;光标移动到300行,输入多少数字移动到多少行
- :w ;保存
- :w! ;强制保存
- :q ;退出
- :q! ;强制退出
- 5dd ;删除后面5行,打一个参数为自己填写
- 5x ;删除此光标后面5个字符
- d1G ;删除此光标之前的所有
- d0 ;从光标当前位置删除到此行的第一个位置
- yy ;复制
- p ;在光标的下面进行粘贴
- P ;在光标的上门进行粘贴grep (grep :正则表达式)正则表达式,用于字符串的搜索工作(模糊查询)。不懂可以先过
- yum install -y lrzsz 命令(实现win到Linux文件互相简单上传文件)
- tar (解压 压缩 命令)
- ps (process status:进程状态,类似于windows的任务管理器)
- 管道命令的语法:命令1 | 命令2 | 命令3。
- 单独使用:
- grep String test.java ;在test.java文件中查找String的位置,返回整行
- 一般此命令不会单独使用下面列几个常用的命令(地下通过管道命令组合起来使用)
- ps aux|grep java ;查找带java关键字的进程
- ll |grep java ;查找带java关键字的文件夹及文件
- #(实际上就是在Linux系统中下载了一个插件)下了了此安装包后就可以实现win系统到linux之间拉文件拉
- 文件
- #等待下载完了就可以输入:
- rz 从win系统中选择文件上传到Linux系统中
- sz 文件名 选择Linux系统的文件复制到win系统中
- 常用的组合命令:
- -z 是否需要用gzip压缩。
- -c 建立一个压缩文件的参数指令(create) –压缩
- -x 解开一个压缩文件的参数指令(extract) –解压
- -v 压缩的过程中显示文件(verbose)
- -f 使用档名,在f之后要立即接档中(file)
- 常用解压参数组合:zxvf
- 常用压缩参数组合:zcvf
- 解压命令:
- tar -zxvf redis-3.2.8.tar.gz ;解压到当前文件夹
- tar -zxvf redis-3.2.8.tar.gz -C /opt/java/ ;解压到指定目录
- 压缩命令:(注意 语法有点反了,我反正每次都搞反)
- tar -zcvf redis-3.2.8.tar.gz redis-3.2.8/ ;语法 tar -zcvf 压缩后的名称 要压缩的
- 文件
- tar -zcvf 压缩后的文件(可指定目录) 要压缩的文件(可指定目录)
- 常用组合:ps -ef 标准的格式查看系统进程
- ps -aux BSD格式查看系统进程
- ps -aux|grep redis BSD格式查看进程名称带有redis的系统进程(常用技巧)
- //显示进程的一些属性,需要了解(ps aux)
- USER //用户名
- PID //进程ID号,用来杀死进程的
- %CPU //进程占用的CPU的百分比
- %MEM //占用内存的的百分比clear 清屏命令。(强迫症患者使用)
- ifconfifig命令
- ping (用于检测与目标的连通性)语法:ping ip地址
- free 命令 (显示系统内存)
- top 命令
- netstat 命令
- VSZ //该进程使用的虚拟內存量(KB)
- RSS //该进程占用的固定內存量(KB)
- STAT //进程的状态
- START //该进程被触发启动时间
- TIME //该进程实际使用CPU运行的时间
- kill 命令用来中止一个进程。(要配合ps命令使用,配合pid关闭进程)
- (ps类似于打开任务管理器,kill类似于关闭进程)
- kill -5 进程的PID ;推荐,和平关闭进程
- kill -9 PID ;不推荐,强制杀死进程
- 用于查看和更改网络接口的地址和参数,包括IP地址、网络掩码、广播地址,使用权限是超级用户。(一般是用来查看的,很少更改)
35.Linux 中主要有哪几种内核锁?
36.Linux 中的用户模式和内核模式是什么含意?
37.怎样申请大块内核内存?
38.用户进程间通信主要哪几种方式?
39.通过伙伴系统申请内核内存的函数有哪些?
在物理页面管理上实现了基于区的伙伴系统(zone based buddy system)。对不同区的内存使用单独的伙伴系统(buddy system)管理,而且独立地监控空闲页。相应接口alloc_pages(gfp_mask, order),_ _get_free_pages(gfp_mask, order)等。
40.Linux 虚拟文件系统的关键数据结构有哪些?(至少写出四个)
struct super_block,struct inode,struct file,struct dentry;
41.对文件或设备的操作函数保存在那个数据结构中?
struct file_operations
42.Linux 中的文件包括哪些?
执行文件,普通文件,目录文件,链接文件和设备文件,管道文件。
43.创建进程的系统调用有那些?
clone(),fork(),vfork();系统调用服务例程:sys_clone,sys_fork,sys_vfork;
44.调用 schedule()进行进程切换的方式有几种?
- 1.系统调用 do_fork();
- 2.定时中断 do_timer();
- 3.唤醒进程 wake_up_process
- 4.改变进程的调度策略 setscheduler();
- 5.系统调用礼让 sys_sched_yield();
45.Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
Liunx 调度程序是根据根据进程的动态优先级来调度进程的,但是动态优先级又是根据静态优先级根据算法计算出来的,两者是两个相关联的值。因为高优先级的进程总是比低优先级的进程先被调度,为防止多个高优先级的进程占用 CPU 资源,导致其他进程不能占有 CPU, 所以引用动态优先级概念。
46.进程调度的核心数据结构是哪个?
struct runqueue
47.如何加载、卸载一个模块?
insmod 加载,rmmod 卸载
48.模块和应用程序分别运行在什么空间?
模块运行在内核空间,应用程序运行在用户空间
49.Linux 中的浮点运算由应用程序实现还是内核实现?
应用程序实现,Linux 中的浮点运算是利用数学库函数实现的,库函数能够被应用程序链接后 调用,不能被内核链接调用。这些运算是在应用程序中运行的,然后再把结果反馈给系统。 Linux 内核如果一定要进行浮点运算,需要在建立内核时选上 math-emu,使用软件模拟计算 浮点运算,据说这样做的代价有两个:用户在安装驱动时需要重建内核,可能会影响到其他的应用程序,使得这些应用程序在做浮点运算的时候也使用 math-emu,大大的降低了效率。
50.模块程序能否使用可链接的库函数?
模块程序运行在内核空间,不能链接库函数。
51.TLB 中缓存的是什么内容?
TLB,页表缓存,当线性地址被第一次转换成物理地址的时候,将线性地址和物理地址的对应 放到 TLB 中,用于下次访问这个线性地址时,加快转换速度。
52.Linux 中有哪几种设备?
字符设备和块设备。网卡是例外,他不直接与设备文件对应,mknod 系统调用用来创建设备文件。
53.字符设备驱动程序的关键数据结构是哪个?
字符设备描述符 struct cdev,cdev_alloc()用于动态的分配 cdev 描述符,cdev_add()用于注册一个 cdev 描述符,cdev 包含一个 struct kobject 类型的数据结构它是核心的数据结构
54.设备驱动程序包括哪些功能函数?
open(),read(),write(),llseek(),realse();
55.如何唯一标识一个设备?
Linux 使用一个设备编号来唯一的标示一个设备,设备编号分为:主设备号和次设备号,一般主设备号标示设备对应的驱动程序,次设备号对应设备文件指向的设备,在内核中使用 dev_t 来表示设备编号,一般它是 32 位长度,其中 12 位用于表示主设备号,20 位用于表示次设备号, 利用 MKDEV(int major,int minor);用于生成一个 dev_t 类型的对象。
56.Linux 通过什么方式实现系统调用?
靠软件中断实现的,首先,用户程序为系统调用设置参数,其中一个编号是系统调用编号,参数设置完成后,程序执行系统调用指令,x86 上的软中断是有 int 产生的,这个指令会导致一个异常,产生一个事件,这个事件会导致处理器跳转到内核态并跳转到一个新的地址。并开始处理那里的异常处理程序,此时的异常处理就是系统调用程序。
57.Linux 软中断和工作队列的作用是什么?
Linux 中的软中断和工作队列是中断处理。
- 1.软中断一般是“可延迟函数”的总称,它不能睡眠,不能阻塞,它处于中断上下文,不能进城切换,软中断不能被自己打断,只能被硬件中断打断(上半部),可以并发的运行在多个 CPU 上。所以软中断必须设计成可重入的函数,因此也需要自旋锁来保护其数据结构。
- 2.工作队列中的函数处在进程上下文中,它可以睡眠,也能被阻塞,能够在不同的进程间切换。已完成不同的工作。可延迟函数和工作队列都不能访问用户的进程空间,可延时函数在执行时不可能有任何正在运行的进程,工作队列的函数有内核进程执行,他不能访问用户空间地址。
面试题答案解析完整文档:【Linux面试题【完整版文档集锦】】
最后
篇幅有限,其他内容就不在这里一一展示了,整理不易,欢迎大家一起交流,喜欢小编分享的文章记得关注我点赞哟,感谢支持!