malloc申请内存时为什么如此占用CPU?

操作系统保护的部分叫做kernel space,

然后每一个process不需要调用操作系统的接口就可以完成的操作,就叫做user space,很多工作都不需要系统调用的就叫做user space,

很多工作都不需要系统调用,比如做数学运算,呼叫自己写的函数等等,需要操作系统调用的操作都是开销比较大的操作,比如I/O,但是

对于一些特别频繁的输入输出,都有特定芯片去处理,不需要消耗CPU的资源,比如键盘的输入,但是对于内存的分配属于一种特别重的系统

调用。现在的cpu权限分为ring0 到ring3,只有操作系统可以执行一些直接和硬件关键资源打交道的CPU指令,这些指令需要ring0权限,

然后操作系统只给所有的processes ring3权限,也就是说,很多CPU指令,比如和物理内存打交道的,影响CPU状态的100多个ring0指令,process(也就是跑在操作系统上的程序),根本无权执行,你就算会写汇编代码,强行写入那些高权限的CPU指令,操作系统也不给你执行的,这个和CPU硬件层面的设计都是绑定的,所以操作系统,和CPU架构,其实是一起成长起来的,而且Linux Kernel的内存管理这部分代码特别复杂,基本都是Intel的员工贡献的,它们自己维护。

MacOS的FreeBSD内核是开源的,linux的kernel是开源的,

https://en.wikipedia.org/wiki/Protection_ringIntel CPU的ring权限体系

https://www.freebsd.org/MacOS系统的内核是基于它

https://en.wikipedia.org/wiki/Application_binary_interface UNIX和Linux都是基于ABI标准

这个是编译器对操作系统接口的一个接口标准,只要操作系统实现了这个标准,那么编译器就能在你的系统上编译你的代码。比如你在Linux上写的C代码,你就可以在FreeBSD上编译。当然,写Python,Java这些高级平台语言,就不涉及这个问题,因为Python和Java本身去操心操作系统之间的差别了,

你写的Python或Java代码,能在Python和Java提供的环境里运行就可以了。倒退十年,这都是非常先进的技术了,所以说Lisp语言特别超前,

50年前,它就是跨平台语言,自己管理内存,提供GC,提供一个虚拟机的层面,而且是用来做人工智能研究的。




你可能感兴趣的:(malloc申请内存时为什么如此占用CPU?)