文章目录
1. 什么是操作系统?
操作系统是一种运行在内核态的软件。
它位于硬件和应用程序之间,主要用于管理计算机硬件和软件资源。比如:运行在电脑上的应用程序通过操作系统来调用内存以及磁盘等硬件。
2. 操作系统主要有哪些功能?
- CPU 管理:主要是进程管理。
- 内存管理:主要利用了虚拟内存的方式。
- 外存管理:主要是磁盘管理。
- I/O 管理:对输入/输出设备的管理。
3. 什么是内核?
内核是操作系统的核心,具有很高的权限,可以控制 CPU、内存、磁盘等硬件。
4. 什么是用户态和内核态?
-
用户态:我们运行的进程基本都是运行在用户态,权限比较低。当应用程序需要执行某些需要特殊权限的操作,就需要向操作系统发起系统调用请求,进入内核态。
-
内核态:运行在内核态的进程可以访问计算机的所有资源,权限比较高。
5. 什么是进程和线程?
-
进程是程序的执行过程。
-
一个进程是由多个线程组成的。
6. 进程间通信方式
- 管道:管道可以理解成缓存,从管道的一端写数据,另一端读数据。
- 信号 : 信号就是一种通知,通知指定进程处理信号。比如 kill -9 1050 就表示给 PID 为 1050 的进程发送 终止 信号。
- 信号量:信号量表示资源的数量,是进程同步的一种方式,通过 PV 操作来实现。
- P 操作,会将信号量减 1,如果信号量 < 0,说明资源被占用,进程要阻塞等待;如果信号量 >= 0,说明资源可用,进程可正常继续执行。
- V 操作,会将信号量加 1,如果信号量 <= 0,说明有进程在阻塞队列里,会唤醒当前进程;如果信号量 > 0,说明阻塞队列里没有被阻塞的进程;
- 消息队列:消息队列和管道差不多,能承载更多的数据。
- Socket:用于客户端和服务器之间通过网络进行通信。
7. 什么是死锁?
假设有两个进程 A 和 B,以及两个资源 X 和 Y,它们的分配情况如下:
进程 | 占用资源 | 需求资源 |
---|---|---|
A | X | Y |
B | Y | X |
进程 A 持有资源 X,并且请求资源 Y。
而进程 B 持有资源 Y,并且请求资源 X。
两个进程都在等待对方释放资源,无法继续执行,互相等待,陷入了死锁。
死锁就是多个进程/线程同时被阻塞、相互等待的一种状态。
8. 产生死锁的四个必要条件是什么?
-
- 互斥条件:一个资源每次只能被一个进程使用
-
- 请求与保持条件:一个进程持有了一个资源,又请求其他资源,而该资源被其他进程所占有,同时不释放自己持有的资源
-
- 不可剥夺条件:进程已获得的资源,在没有使用完之前,不能被其他进程抢占
-
- 循环等待条件:形成了一条资源的环形链,有一组进程 {P0, P1,…, Pn}, P0 等待的资源被 P1 占有,P1 等待的资源被 P2 占有,…
9. 解决死锁的基本方法
-
- 预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件
-
- 避免死锁:银行家算法,找出安全序列
-
- 检测死锁:进程-资源分配图