1.死锁相关
简述什么是死锁?死锁出现的原因?
死锁:多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进
死锁出现的原因:
1.竞争资源
2.进程间推进顺序非法
死锁四个必要条件
1.互斥条件:进程要求对所分配的资源进行排他性控制
2.请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放
3.不可剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放
4.循环等待条件
避免死锁的方式
允许进程同时访问某些资源
进程在运行前一次性地向系统申请它所需要的全部资源
允许进程强行从占有者那里夺取某些资源
把资源事先分类编号,按号分配,杜绝环路
检测死锁
1.首先为每个进程和每个资源指定一个唯一的号码
2.建立资源分配表和进程等待表
解除死锁的方法
剥夺资源
撤销进程
2.进程和线程
进程和线程的区别,哪个效率高,为什么?以及各自的通信方式,内核对他们有区分吗?如何实现?在操作系统中线程进程内部存储结构?
区别:
1.线程是任务调度的最小单位,进程是操作系统分配资源的最小单位
2.一个进程由多个线程组成,线程是一个进程中代码的不同执行路线
3.进程之间相互独立,同一进程下各个线程之间共享进程的地址空间
4.线程上下文切换比进程上下文切换快得多
内核区分:
进程和线程在内核中是相同的,没有严格做区分
进程间的通信方式:
管道
信号量
信号
消息队列
共享内存
套接字
进程间的同步方式:
信号量
P、V原语
生产者-消费者模型
线程间的通信方式:
锁机制
信号量机制
信号机制
进程间通信方式
1.管道
2.信号
3.信号量
4.消息队列
5.共享内存
6.套接字
同一个进程内出现符号冲突怎么办(待解决)
进程fork子进程,两个进程占用内存情况
新建一个线程消耗的资源
分配内存、列入调度、同时在线程切换的时候还要执行内存换页,CPU的缓存被清空,切换回来的时候还要重新从内存中读取信息
进程间是否有共享对象,对象是否在内存里
有。在共享内存里
3.调度
操作系统有哪些调度方式?
1.先来先服务:按进程先后顺序执行调度
2.优先级调度:按优先级执行调度
3.时间片轮转调度:分配时间片
4.多级反馈调度:
设置多个就绪队列,并为各个队列赋予不同的优先级。优先级越高,时间片越小
当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,若它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列末尾
仅当第一队列空闲时,调度程序才调度第二队列中的进程运行
如果让你实现按照优先级的抢占式调度,你会如何实现?有0-15个优先级,0是最高的优先级
用十六个任务队列,每次从优先级最高的任务队列头取出
4.操作系统基础
用户态和内核态
操作系统对执行权限进行分级。
用户态:用户态相较于内核态有较低的执行权限,很多操作不被操作系统允许
内核态:有ring 0的权限,可以执行任何cpu指令,也可以引用任何内存地址
用户态和内核态的切换
1.系统调用
2.异常
3.外围设备中断
用户态和内核态切换很耗时
fork操作具体执行了哪些事情 系统空间如何开辟的
fork()系统调用通过复制一个现有进程来创建一个全新的进程.进程被存放在一个叫做任务队列的双向循环链表中
fork被调用一次,能够返回可能三种不同的返回值
1)父进程中,fork返回新创建的子进程的进程ID
2)子进程,fork返回0
3)出现错误,fork返回一个负值
在fork函数执行完毕后,如果创建新进程成功,则会出现两个进程,一个子进程,一个父进程。子进程中,fork返回0,父进程中fork返回创建子进程的进程ID。可以通过fork的返回值判断当前进程是子进程还是父进程
free命令下的cache和buffer的区别?
都是占用内存
cache:作为page cache的内存,文件系统的cache
buffer:作为buffer cache的内存,是块设备的读写缓冲区
buffer是即将要被写入磁盘的,cache是从磁盘中读出来