1、 进程与线程的区别?
- 进程:独立数据空间,进程间不共享数据,系统调度
- 线程:执行程序的最小单元,进程内线程间同步资源,系统调度
- 一个进程可以有多个线程,多个线程也可以并发执行
2、 进程有哪些状态?
- 就绪状态:已获得处理机(CPU)以外的所需资源,等待分配处理机资源
- 运行状态:占用处理机资源运行,此状态进程数 <= CPU 数
- 阻塞状态:进程等待某种条件,在条件满足之前无法执行
3、 进程同步与互斥的区别?
互斥:
- 某一资源同时只允许一个访问者对其进行访问
- 具有唯一性和排他性
- 互斥无法限制访问者对资源的访问顺序,即访问是无序的
同步:
- 基于互斥,经其他机制实现访问者对资源的有序访问
- 大多数情况下,同步已经实现了互斥,写入资源是互斥的
- 少数情况下,可以允许多个访问者同时访问资源
4、 进程间通信包括哪些?
- 管道:半双工通信方式,数据单向流动,父子进程间
- 命名管道:半双工通信方式,无亲缘关系进程间通信
- 信号量:计数器,锁机制,控制多进程对资源访问
- 消息队列:消息链表,存放在内核中由消息队列标识符标识
- 信号:比较复杂的通信方式,通知进程某个事件已经发生
- 共享内存:映射一段能被多个进程可访问的内存
5、 进程的调度算法有哪些?
- 先来先服务(FCFS, First Come First Service)
- 短作业优先(SJF, Shortest Process Next)
- 时间片轮转调度算法(RR, Round Robin)
- 高响应优先(HRRN, Highest Response Ratio Next)
- 优先权调度算法
- 多级队列调度算法
6、 死锁产生的原因?
- 1、 资源竞争;2、 进程推进顺序不当
- 必要条件:互斥、不剥夺、请求与保持、环路等待
- 预防死锁:破坏四个必要条件之一
7、 页面的置换算法都有哪些?
- 最佳置换算法
- 先进先出置换算法
- 最近最久未使用置换算法
- Clock 置换算法(最近未使用算法)
- 最少使用置换算法
8、 makefile 的作用是什么?(http://www.ruanyifeng.com/blog/2015/02/make.html)
- 定义规则,指定哪些文件先编译、后编译、重新编译
- makefile 的好处,自动化编译
- makefile 需要 make 工具解释执行
9、 什么是虚存、实存、共享内存?
虚存(VIRT = SWAP + RES):
- 进程“需要的”虚拟内存大小
- 包括进程使用的库、代码、数据,以及 malloc、new 分配的堆空间和分配的栈空间等
- 申请 10 MB,使用 1 MB,增长 10 MB
实存(RES = CODE + DATA):
- 包括使用中的 malloc、new 分配的堆空间和分配的栈空间,但不包括 swap out 量
- 包含其他进程的共享
- 虚存包括实存
- 申请 10 MB,使用 1 MB,增长 1 MB
共享内存(SHR):
- 自身,也包括其他进程的共享内存
- 进程只使用了几个共享库的函数,但包含整个共享库大小
- 某个进程所占的物理内存大小:RES - SHR
- swap out 后,它将会降下来
欢迎关注微信公众号"测试开发Stack"