操作系统常见面试题整理
1、说一说进程和线程的定义以及他们的区别
进程是一个程序的实例,它是系统资源分配与管理的基本单位,而线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的、能独立运行的基本单位。一个进程可以有多个线程,多个线程可以并行执行,他们有自己的一组CPU寄存器和栈,共享堆、全局变量、静态变量、文件等公用资源。
2、线程同步的方式有哪些?
互斥锁: 给临界区加锁,防止多个线程同时读写某一块内存区域。
信号量: 一次可以允许n个线程访问,用来保证多个线程不会互相冲突。
事件(信号): 通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
3、进程的通信方式有哪些?
管道、系统IPC(进程间通信)(包括消息队列、信号量、共享内存)、SOCKET,其中管道又分为:匿名管道(pipe)、命名管道(fifo)。
- 匿名管道是半双工的,数据只能单向通信;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。
- 命名管道也是半双工的,但是允许无亲缘关系的进程间进行通信,以FIFO的文件形式存在于文件系统中。
- 消息队列是消息的链表,存放在内核中并由消息队列标识符标识。
- 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。
- 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。