面试准备系列之操作系统
linux内存管理部分物理内存、虚拟内存、分段分页、mmu、页表、tlb的基本概念进程的内存模型:栈、文件映射区、栈、data段、bss段、text段物理内存管理:buddy和slab,参考这篇文章虚拟内存管理:brk和mmap,参考这篇文章,申请虚拟内存时还没有分配物理内存,缺页异常时申请物理内存并进行映射。标准库:malloc,通过brk和mmap向操作系统申请内存,为了减少不必要的系统调用,malloc也会管理内存,参考这篇文章用户层:malloc的定位是一个通用型的内存管理器,必须要平衡各种情况。在用户层可以针对特殊场景定制内存池,减少开销(比如定长内存块申请、单线程管理)、便于监控和debug等等。参考这篇文章进程、线程和协程进程和线程的区别和联系
进程作为资源管理的基本单位,线程作为调度的基本单位,一个进程对应着一个到多个线程。
如果是不同进程的线程切换,等价于进程切换,如果是相同进程的线程切换,则对于共享资源(内存)不需要切换,这意味着不需要切换页表和tlb,也不需要使cache失效。如果架构支持ASID,则进程切换也不需要清理tlb。什么是协程?协作式调度、用户态切换
独立栈:分配多了浪费空间,分配少了有栈溢出风险。共享栈:切换时需要拷贝栈空间参考这里
进程作为资源管理的基本单位,线程作为调度的基本单位,一个进程对应着一个到多个线程。
进程切换、线程切换
简述进程切换的流程:
如果是不同进程的线程切换,等价于进程切换,如果是相同进程的线程切换,则对于共享资源(内存)不需要切换,这意味着不需要切换页表和tlb,也不需要使cache失效。如果架构支持ASID,则进程切换也不需要清理tlb。什么是协程?协作式调度、用户态切换
相比于异步代码,协程的意义?
在付出可控资源的情况下,用同步逻辑写异步代码,降低复杂度(情况复杂的时候异步代码的状态太多了,复杂度太高)。有栈协程
独立栈:分配多了浪费空间,分配少了有栈溢出风险。共享栈:切换时需要拷贝栈空间参考这里
无栈协程
状态机+闭包不能被非协程函数嵌套调用需要编译器支持协程切换为什么比线程切换开销低?
参考这个问题下的回答
版权声明
本文仅代表作者观点,不代表博信信息网立场。