小米澎湃OS - C++开发二面
公众号:阿Q技术站
来源:https://www.nowcoder.com/discuss/610414092750237696
1、linux常用命令举例?
这里小伙伴也给了建议不要举什么cd的,可以说稍微有技术含量的,比如tail 用来查日志,cat 用来查看小文件,ps 用来查看进程,pwd 查看当前目录,grep用来过滤,top 用来查看 cpu 的使用率,chomd 用来修改权限,ash 用来远程登陆。
2、进程,线程区别?
- 定义:
- 进程:是程序的一次执行过程,是操作系统进行资源分配和调度的一个独立单位。
- 线程:是进程的一个执行单元,是操作系统进行调度的最小单位,它可以与同属一个进程的其他线程共享进程所拥有的全部资源。
- 资源拥有:
- 进程:拥有独立的地址空间、文件描述符、堆栈和数据段等资源。
- 线程:共享所属进程的地址空间和其他资源,如文件描述符、堆栈、数据段等。
- 通信和同步:
- 进程:进程间通信(IPC)比较复杂,需要借助于操作系统提供的机制,如管道、信号量、消息队列等。
- 线程:线程间通信(IPC)较为简单,可以直接通过共享内存等方式进行通信。
- 创建和销毁开销:
- 进程:创建和销毁较为复杂,需要分配和回收大量资源。
- 线程:创建和销毁较为简单,开销较小。
- 并发性:
- 进程:进程之间相互独立,因此可以并发执行。
- 线程:同一进程内的多个线程共享进程的资源,可以实现并发执行。
3、进程间通信方式?
- 管道:
- 单向通信,分为匿名管道和命名管道。
- 匿名管道只能用于具有亲缘关系的进程间通信,一般在创建子进程时使用。
- 命名管道可以用于无亲缘关系的进程间通信,通过文件系统中的特殊文件实现。
- 信号:
- 用于通知进程发生了某种事件。
- 可以用于进程间的简单通信,但只能传递少量信息。
- 消息队列:
- 允许一个进程向另一个进程发送消息的队列。
- 消息队列独立于发送和接收进程,可以提供异步通信的能力。
- 共享内存:
- 允许多个进程共享同一段内存空间。
- 由于是直接访问内存,所以速度快,但需要考虑同步和互斥问题。
- 信号量:
- 用于进程间同步和互斥的一种机制。
- 可以用来解决进程对共享资源的争用问题,保证多个进程之间的同步。
- 套接字:
- 在网络编程中用于不同主机间的进程通信,也可以用于同一主机内的进程间通信。
- 提供了一种统一的通信接口,可以实现进程间的数据交换。
- 文件锁:
- 使用文件系统的锁机制来实现进程间的同步。
- 可以通过对文件进行加锁和解锁来控制进程对文件的访问。
4、源文件到可执行文件的过程?
- 预处理:
- 预处理器(如C预处理器)会处理源文件,执行诸如包含头文件、宏展开、条件编译等操作,生成经过预处理的中间文件。
- 编译:
- 编译器(如GCC、Clang等)将预处理后的文件转换为汇编代码(Assembly Code),汇编代码是一种低级的表示,使用特定的汇编语言描述源代码的操作和数据。
- 汇编:
- 汇编器(Assembler)将汇编代码转换为机器码(Machine Code),即二进制指令,这些指令可以被计算机硬件直接执行。
- 链接:
- 链接器(Linker)将编译后的目标文件与所需的库文件链接在一起,生成最终的可执行文件。
- 链接器会解析符号引用(Symbol References),将源文件中引用的函数或变量与其定义所在的位置进行关联,最终生成一个完整的可执行文件。
- 装载(可选):
- 如果生成的可执行文件需要在运行时动态加载库文件,操作系统的加载器会负责将这些库文件加载到内存中。
- 运行:
- 最终生成的可执行文件被操作系统加载到内存中,并由CPU执行,实现了源文件的功能。