操作系统与Linux面试题

2024-09-07 05:28

本文主要是介绍操作系统与Linux面试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 什么是操作系统的内核(Kernel)

  1. 操作系统的内核是操作系统的核心部分,负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
  2. 操作系统的内核是连接应用程序和硬件的桥梁,决定着操作系统的性能和稳定性。

2. CPU和内核的区别

  1. 操作系统的内核属于操作系统层面,而CPU属于硬件。
  2. CPU主要提供运算,处理指令的能力,内核主要负责系统管理,比如内存管理。他屏蔽了对硬件的操作。

3. 什么是系统调用

在运行的用户程序中,凡是和系统态级别的资源相关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用的方式向操作系统提出服务请求,并由操作系统代为完成。
这些系统调用按功能分为如下几类:

  1. 设备管理
  2. 文件管理
  3. 进程控制
  4. 进程通信
  5. 内存管理

4. 进程间通信方式有哪些

  1. 管道/匿名管道(Pipes) : 用于具有亲缘关系的父子进程间或者兄弟进程间通信。
  2. 有名管道(Names Pipes):匿名管道由于没有名字,只能用于亲缘关系的进程间通信,为了克服这个缺点,提出了有名管道。有名管道严格遵循先进先出。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
  3. 信号(Signal): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
  4. 消息队列:消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。管道和消息队列的通信数据都是先进先出的原则,与管道不同的是消息队列存放在内核中,只有在内核重启或者显示的删除一个消息队列时,消息队列才会被真正删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,比FIFO更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  5. 信号量:信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在与进程间同步,这种通信方式主要用于解决和同步相关的问题并避免竞争条件。
  6. 共享内存:多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。
  7. 套接字:此方法主要用于在客户端和服务器之间通过网络进行通信。套接字是支持TCP/IP网络通信的基本操作单元。可以看作是不同主机之间的进程进行双向通信的端点。

5. 进程间同步的方式以及优缺点

  1. 临界区:通过对多线程的串行化来访问公共资源或者一段代码。
    优点:保证某一时刻只有一个线程能访问数据的简便方法。
    缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。
  2. 互斥量:互斥量和临界区类似,互斥对象只有一个,只有拥有互斥对象的线程才能访问资源。
    优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。
    缺点:互斥量可以跨越进程使用,所以创建互斥量需要的资源更多。
  3. 信号量:为控制一个具有有限数量用户资源而设计。允许多个线程在同一时刻访问同一资源。当信号量的最大资源数=1时就是互斥量了。
  4. 事件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

6. 僵尸进程、孤儿进程是什么

  1. 僵尸进程:通常来说,使用fork()系统调用从一个父进程创建出一个子进程,子进程退出,是需要父进程调用wait()或者是waitpid()函数来收回子进程的资源,如果父进程没有调用,子进程的信息就会一直在内存中,而不会被回收,变成僵尸进程
  2. 孤儿进程:就是父进程先退出了,他的子进程会被init进程接管(init进程是内核启动时,创建出来的进程,是一个以root身份运行的普通用户进程,是永远不会停止的),由他来收集子进程的状态。

7. 说一下常见的内存管理机制

块式管理:远古时代的计算机操作系统的内存管理方式,将内存分为几个固定大小的块。每个块中只包含一个进程,如果程序需要内存的话,操作系统就会分配给他一块。
页式管理:把主存分为大小相等且固定的一页一页的形式,页较小,相对于块式管理的划分力度更大,提高了内存利用率,减少了内存碎片。页式管理通过页表对应逻辑地址和物理地址。
段式管理:段式管理把主存分为一段段的,每一段的空间又要比页的空间小很多。

8. 什么是块表和多级页表

在分页内存管理中,很重要的两点:

  • 虚拟地址到物理地址的转换要快。
  • 解决虚拟地址空间大、页表也会很大的问题。

快表
为了解决虚拟地址到物理地址的转换速度,操作系统在页表方案基础上加入了快表来加速虚拟地址到物理地址的转换。可以把快表理解为一种特殊的高速缓冲存储器,其中的内容是页表的一部分或者全部内容。作为页表的cache,他的作用和页表类似,但是提高了访问速率。
多级页表
引入多级页表主要目的是为了避免把页表全部一直放在内存中占用过多空间,特别是那些根本就不需要的页表。

9. 为什么linux体系结构要分为用户空间和内核空间

  1. 现代CPU实现了不同的工作模式,不同模式下CPU可以执行的指令和访问的寄存器不同。
  2. Linux从CPU角度出发,为了保护内核安全,把系统分为两部分。

用户空间和内核空间是程序执行的两种不同的状态,我们可以通过两种方式完成用户空间到内核空间的转换。

  • 系统调用
  • 硬件中断。

10. inode是什么?有什么作用?

inode是linux/unix文件系统的基础。
硬盘的最小存储单位是扇区,块由多个扇区组成。文件数据存储在块中。块的常见大小是4kb,约为8个连续的扇区组成(每个扇区的)。一个文件可能会占用多个block,但是一个块只能放一个文件。
虽然将文件存储在了block中,但是还需要一个空间来存储文件的元信息;如某个文件分为几块、每一块在的地址、文件拥有者、创建时间、权限等。这种存储文件元信息的区域就叫inode
可以使用istat命令查看文件的inode信息,Linux/Unix操作系统不使用文件名来区分文件,而是使用inode号码区分不同的文件。
总结:

  • inode:记录文件的属性信息,可以使用istat命令查看inode信息。
  • block:实际文件的内容,如果一个文件大于一个块,那么将占用多个block。

11. 什么是硬链接和软链接

  • 硬链接:Linux下的文件是通过索引节点(inode)识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针。系统不为他重新分配inode,每添加一个硬链接,文件的链接数加1.
    不足:(1). 不可以在不同文件系统的文件间建立链接;(2).只有超级用户才可以为目录创建硬链接

  • 软链接:软链接克服了硬链接的限制,任何用户可以创建指向目录的符号链接。

实际场景下,基本是使用软链接。总结区别如下:

  1. 硬链接不可以跨分区,软链接可以跨分区。
  2. 硬链接指向一个inode节点,而软链接创建一个新的inode节点。

12. Linux中有哪些文件类型

  1. 普通文件:存储信息和数据。
  2. 目录文件
  3. 符号链接文件:保留了指向文件的地址而不是文件本身。
  4. 字符设备:用来访问字符设备比如硬盘。
  5. 设备文件:用来访问块设备。
  6. 管道文件:一种特殊类型的文件,用于进程间通信。
  7. 套接字:用于进程间的网络通信。

13. Linux的权限命令

在Linux中,权限一般分为读、写、执行。分为三组,分别对应文件的属主(owner)、属组(group)、和其他用户(other)。
Linux中的权限分为以下几种

  • r:代表权限是可读,用数字4表示
  • w: 代表权限是可写,用数字2表示
  • x: 代表权限可执行,用1表示

14. Linux如何进行用户管理以及用户组管理

  • useradd 选项 用户名. 添加用户账号
  • userdel 选项 用户名。删除用户账号
  • usermod 选项 用户名 修改账号
  • passwd 用户名。更改或创建用户密码
  • passwd -S 用户名 显示用户账号密码信息
  • passwd -d 用户名 删除用户密码
  • groupadd 选项 用户组:增加一个新的用户组
  • groupdel 用户组。删除一个用户组
  • groupmod 选项 用户组 修改用户组的属性

这篇关于操作系统与Linux面试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144177

相关文章

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.