操作系统知识点总结

进程的内存布局中,哪些是线程共享的

什么是缓存溢出

程序在申请内存时,没有足够的内存空间供其使用。

一定要有线程吗?

可以没有,但是线程可以解决并发,切换开销过大的问题。

进程与线程的切换开销?

进程切换

  1. 切换页表全局目录

  2. 切换内核态堆栈

  3. 切换硬件上下文(进程恢复前,必须装入寄存器的数据统称为硬件上下文)

    • ip(instruction pointer):指向当前执行指令的下一条指令

    • bp(base pointer): 用于存放执行中的函数对应的栈帧的栈底地址

    • sp(stack poinger): 用于存放执行中的函数对应的栈帧的栈顶地址

    • cr3:页目录基址寄存器,保存页目录表的物理地址

    • ……

  4. 刷新TLB

  5. 系统调度器的代码执行

线程切换

共享同一内存地址空间、代码段、全局变量、同一打开文件集合。

  1. 切换内核栈
  2. 切换硬件上下文

单cpu能够实现多任务并行吗

不能,只能并发

堆和栈的区别(空间分配、缓存方式)

ipc中效率最高的是哪种方式

共享内存允许多个进程直接对同一个内存区域直接操作。

说说虚拟内存,为什么要这么设计,解决了什么问题

  • 虚拟内存给进程提供了一个更大的内存空间,只在主存里保留活动区域
  • 给每个进程提供了一致的、完整的地址空间。
  • 为程序提供内存管理,内存隔离。

分页和分段的区别

分段:粒度大

分页:粒度小

中断是如何实现的

中断是一种电信号,由硬件设备产生,并直接送入中断控制器(如8259A)的输入引脚上,然后再由中断控制器向处理器发送相应的信号。 处理器一经检测到该信号,便中断自己当前正在处理的工作,转而去处理中断。

哪三种情况会导致用户态到内核态的切换?

  • 系统调用。
  • 异常。
  • 中断。

死锁和活锁

死锁

必要条件

  1. 互斥
  2. 持有并等待
  3. 非抢占
  4. 循环等待

预防

提供锁的全序/偏序(部分序列)。

非抢占

什么场景适合用悲观锁,什么场景适合用乐观锁

悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。 … 像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!