OS 面试简答
1. 什么是系统调用?
在用户程序中,需要用到系统态 (kernel mode) 级别的操作,就需要以系统调用的方式向操作系统申请,让操作系统来完成操作。例如设备管理、文件管理、进程控制、内存管理。
2. 进程与线程的区别?
进程 process
- 操作系统分配资源的最小单元
- 进程是相互独立的
- 通信需要按照进程间的通信方式,例如管道、信号 、信号量、sockets
- 同进程内共享一片内存
- 每个进程中包含多个线程、内存、文件/网络句柄
线程 thread
- 进程中更小的运行单元
- 线程不一定相互独立
- 线程间通信更方便,因为共享一块内存
- 每个线程中包含栈、PC(program counter) 指针指向 → 内存、TLS(线程局部存储)
3. 32位和64位操作系统的区别?
32位
- 寻址空间,即虚拟地址,每个进程的寻址空间是 2^32 = 4G的空间
- 数据总线为32位,每次可传输32位数据,即4个字节
64位
- 寻址空间,即虚拟地址,每个进程的寻址空间是 2^64 = 128G的空间
- 数据总线为64位,每次可传输64位数据,即8字节
4. 什么是死锁?
多个进程相互请求资源,且资源被相互占用,就会导致死锁
5. 进程间的通信方式?
- 管道/命名管道,比如Linux中的 |
- 信号(signal),向进程发送命令 例如 2 = interupt, 9 = kill
- 信号量
- 消息队列
- 套接字(sockets),套接字是支持 TCP/IP 的网络通信的基本操作单元。作为不同机器进程之间的通信。
6. 虚拟地址和物理地址,为什么需要虚拟地址?
CPU 的虚拟寻址过程,即CPU需要将虚拟地址转换为物理地址,才能访问到真实的物理内存。此过程由CPU中的**内存管理单元(MMU)**来执行。
如果没有虚拟地址:
- 程序都是直接访问和操作的都是物理内存,容易造成操作系统崩溃或者应用程序相互影响
虚拟地址的优势:
- 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。
7. 虚拟内存是什么?
虚拟内存是计算机系统内存管理的一种技术,我们可以手动设置自己电脑的虚拟内存,部分可以存储在外部硬盘上。不要单纯认为虚拟内存只是“使用硬盘空间来扩展内存“的技术。虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且 把内存扩展到硬盘空间。
8. 操作系统内存管理是什么?
操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情。