操作系统知识点总结
进程的内存布局中,哪些是线程共享的
什么是缓存溢出
程序在申请内存时,没有足够的内存空间供其使用。
一定要有线程吗?
可以没有,但是线程可以解决并发,切换开销过大的问题。
进程与线程的切换开销?
进程切换
切换页表全局目录
切换内核态堆栈
切换硬件上下文(进程恢复前,必须装入寄存器的数据统称为硬件上下文)
ip(instruction pointer):指向当前执行指令的下一条指令
bp(base pointer): 用于存放执行中的函数对应的栈帧的栈底地址
sp(stack poinger): 用于存放执行中的函数对应的栈帧的栈顶地址
cr3:页目录基址寄存器,保存页目录表的物理地址
……
刷新TLB
系统调度器的代码执行
线程切换
共享同一内存地址空间、代码段、全局变量、同一打开文件集合。
- 切换内核栈
- 切换硬件上下文
单cpu能够实现多任务并行吗
不能,只能并发
堆和栈的区别(空间分配、缓存方式)
ipc中效率最高的是哪种方式
共享内存允许多个进程直接对同一个内存区域直接操作。
说说虚拟内存,为什么要这么设计,解决了什么问题
- 虚拟内存给进程提供了一个更大的内存空间,只在主存里保留活动区域
- 给每个进程提供了一致的、完整的地址空间。
- 为程序提供内存管理,内存隔离。
分页和分段的区别
分段:粒度大
分页:粒度小
中断是如何实现的
中断是一种电信号,由硬件设备产生,并直接送入中断控制器(如8259A)的输入引脚上,然后再由中断控制器向处理器发送相应的信号。 处理器一经检测到该信号,便中断自己当前正在处理的工作,转而去处理中断。
哪三种情况会导致用户态到内核态的切换?
- 系统调用。
- 异常。
- 中断。
死锁和活锁
死锁
必要条件
- 互斥
- 持有并等待
- 非抢占
- 循环等待
预防
提供锁的全序/偏序(部分序列)。
什么场景适合用悲观锁,什么场景适合用乐观锁
悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。 … 像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!