操作系统面经

操作系统面经总结,持续更新中

1.malloc底层实现

1)小于128k调用brk函数

维护一根break指针,表示堆的大小,brk函数的目的就是移动指针

2)大于128k调用mmap函数(在虚拟内存中找一块来分配给用户)

mmap函数的主要用途是进行文件的映射的,但是也可以用来进行内存分配。

其实完全可以用mmap来实现malloc但是因为mmap每次分配都是以页为单位所以当分配小的内存的时候会造成浪费。

每次进行内存分配都会调用系统调用而从用户态切换到内核态,会花费很多时间,所以由一种内存池的方式,预先分配一大段内存由用户库

进行管理,主要有几种算法:首次适配,下次适配,最差适配,最佳适配。

2.线程切换和进程切换的区别

线程切换和进程切换最主要的区别是虚拟地址的切换

进程拥有独立的地址空间,而线程共享进程的地址空间,虚拟地址的切换体现在页表的切换

有个硬件叫作TLB来缓存页表 而进程切换后TLB里面的缓存就失效了,所以就体现在程序运行变慢。

3.进程切换的步骤

进程上下文包括 寄存器信息 代码 数据 PCB

1.保存进程上下文 寄存器信息(保存在私有栈中)

2.运行调度算法选择一个进程进行执行

3.切换页表 恢复进程上下文。

4.操作系统的启动过程(转载)

https://blog.csdn.net/wchstrife/article/details/78879554

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值