[八股] Linux系统编程八股
点个小赞关注一波,持续更新……
[专栏]嵌入式软件校招笔记(点击跳转)
1、Linux中你常用的命令有哪些?(这个很开放,随便哪些都行)
Linux系统中有许多常用的命令,以下是一些例子:
ls
:列出当前目录下的文件和目录。cd [目录名]
:切换到指定的目录。pwd
:显示当前工作目录的路径。touch [文件名]
:如果文件不存在,新建文件。mkdir [目录名]
:创建新的目录。rm [文件名]
:删除指定的文件或目录。cp [源文件] [目标文件]
:复制文件。mv [源文件] [目标文件]
:移动或重命名文件。cat [文件名]
:查看文件内容、创建文件、追加文件内容等功能。more [文件名]
:分屏显示文件内容。grep [word] [文件名]
:在文件中搜索指定的文本。date
:查看或设置系统时间。cal
:显示日历。df
:显示磁盘剩余空间。ps
:查看当前进程的状态。top
:动态显示运行中的进程并排序。kill [进程ID]
:结束指定的进程。
2、什么是软链接和硬链接?
- 软链接:软链接(也称为符号链接)是一个实实在在的文件,该文件指向存放在虚拟目录结构中某个地方的另一个文件。你可以把它想象成我们平时使用的Windows电脑的快捷方式。如果原始文件已删除,那已经创建的软链接显示红色,并且原始文件会一闪一闪的。修改软链接文件内容,原始文件内容也会被修改。删除软链接文件,原始文件仍然存在。
- 硬链接:硬链接创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。但是两者就根本而言是同一个文件。更通俗的说,就是一个文件更名了,实际上是同一文件。原始文件必须已经存在。如果原始文件已删除,那已经创建的硬链接不会被删除。修改硬链接文件内容,原始文件内容也会被修改。删除硬链接文件,原始文件仍然存在。
3、软链接和硬链接有什么区别?
- 本质:硬链接是同一个文件的多个名字,而软链接则是不同的文件。
- 跨分区:硬链接不支持跨分区,而软链接则支持。
- 目录:硬链接不支持链接到目录,而软链接则支持。
- 相互关系:硬链接的文件之间是平等的关系,删除任何一个都不会影响其他的链接。而软链接的目标文件如果被删除,软链接就会失效。
- 文件大小:硬链接文件显示的大小与原文件一样,而软链接文件的大小则是链接路径的长度。
- Inode号:硬链接的原文件和链接文件共享同一个Inode号,说明它们是同一个文件,而软链接的原文件和链接文件拥有不同的Inode号,表明它们是两个不同的文件2。
- 文件属性:在文件属性上,软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等的关系。
- 链接数目:硬链接的链接数目会增加,而软链接的链接数目不会增加。
4、简述Linux系统态与用户态,什么时候会进入系统态?
在Linux系统中,有两种运行级别:用户态和内核态(也称为系统态)。
用户态:在用户态下,应用程序只能执行受限的指令集,并且不能直接访问底层系统资源。大多数代码都运行在用户态。
内核态:在内核态下,操作系统拥有最高的权限和访问系统资源的能力,可以执行特权指令和直接访问硬件设备。当CPU处于内核态,可以随意进入用户态。
切换时机:应用程序无法自由进入内核态,只能通过操作系统提供的API进入,或者中断操作发生的时候进入。例如,当CPU被中断操作(如定时器、键盘输入、I/O)中断时,CPU会停止运行当前它正在运行的程序,切换到内核态,调用中断处理器。
5、进程、线程、协程是什么,有什么区别?
进程、线程和协程都是计算机程序在运行时的不同表现形式。下面是它们的基本定义和区别:
- 进程:进程是操作系统进行资源分配和调度的一个独立单位,是程序执行的实例。每个进程都有自己的独立内存空间和系统资源。进程是程序资源管理的最小单位。
- 线程:线程是进程中的一个执行单元,也是处理器调度和分派的基本单位。一个进程可以包含多个线程,所有线程共享进程的资源,如内存空间和文件描述符等。线程是资源调度的最小单位。
- 协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
区别:
- 进程和线程的主要区别在于它们的内存空间:进程有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,一个进程无法直接访问另一个进程的变量和数据结构,需要通过进程间通信机制(如管道、信号、套接字等)来实现;而同一进程下的所有线程共享同一地址空间和系统资源。
- 线程和协程的主要区别在于协程的调度由用户自己控制,而线程的调度由操作系统内核负责。
6、有了进程,为什么还要有线程?
线程是为了解决进程在并发执行时所付出的时空开销,提高并发性1。线程相比进程有以下优点:
- 资源消耗少:线程是一种非常"节俭"的多任务操作方式,相比进程需要更少的资源。一个进程的开销大约是一个线程开销的30倍左右。
- 切换效率高:运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需的时间比进程切换所需的时间少,从而提高了系统的效率23。
- 共享内存:线程之间共享程序的公共状态,线程之间通过读-写内存中的公共状态来隐式通信2。这使得线程间的通信更为方便,因为它们可以直接访问对方的内存2。
- 提高响应性:在多线程环境中,当一个线程阻塞或进行长时间运算时,其他线程还可以继续运行2。这就使得程序在等待某些资源(如网络响应)的同时,仍然可以对用户输入做出响应2。
- 利用多处理器系统:多线程可以充分利用多处理器系统。在这样的系统中,每个线程可以在不同的处理器上运行2。
7、Linux多进程开发中,怎么创建一个进程?
在Linux多进程开发中,创建一个
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式软件校招笔记 文章被收录于专栏
记录本人校招过程中遇到的问题及笔记整理!后续会持续更新