操作系统二轮复习
牛客网,为什么os在c++那里
1、请你介绍一下死锁,产生的必要条件,产生的原因,怎么预防死锁
- 死锁:两个或以上的进程争夺共享资源而互相等待而导致进程都无法执行
- 必要条件:互斥、不可抢占、请求与保持、循环等待
- 死锁的处理
- 预防
- 破坏请求与保持:一次性分配
- 破坏不剥夺:申请不到主动释放
- 破坏循环等待:顺序申请反序释放
- 避免:银行家算法
- 检测
- 释放
- 预防
2、说一说进程通信的方式有哪些?
- 匿名管道
- 有名管道
- 信号
- 信号量
- 共享内存
- 消息队列
- socket套接字
3、请你说说进程和线程的区别
- 资源分配和执行
- 进程是程序运行的基本单位,线程是程序运行的最小单位;
- 进程是资源分配的最小单位,进程有独立的地址空间,线程有自己的堆栈和局部变量(java中没有堆),但线程之间没有单独的地址空间
- 对应关系
- 一个进程可以包含多个线程
- 并发性
- 进程的并发性较低,线程的并发性较高
- 上下文切换
- 进程的上下文切换消耗的资源开销更多
- 崩溃造成的影响
- 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉
4、说一说 epoll 的原理
- epoll 是一种更加高效的 IO 复用技术,本质是通过一个线程监视多个文件描述符,当内核缓存完数据后再执行对应的操作
- 解决问题
- select和poll轮询的方式消耗资源
- 不需要频繁的切换内核和用户态
- 原理:通过在内核中创建应该结构体,等内核缓存数据结束后会放入就绪队列并通知对应线程执行
- 命令:
- epoll_create:创建结构体
- epoll_ctrl:向结构体中(红黑树)添加文件描述符
- epoll_wait:检测就绪事件
5、说一说常用的 Linux 命令
- cd:切换当前目录
- ls:查看当前文件与目录
- grep:通常与管道命令一起使用,用于对一些命令的输出进行筛选加工
- cp:复制文件或文件夹
- mv:移动文件或文件夹
- rm:删除文件或文件夹
- ps:查看进程情况
- kill:向进程发送信号
- tar:对文件进行打包
- cat:查看文件内容
- top:查看操作系统的信息,如进程、CPU占用率、内存信息等(实时)
- free:查看内存使用情况 pwd:显示当前工作目录