CPU
平均负载:每个CPU上的运行的进程数
利用率:CPU的使用率
操作系统负责进程的调度
CPU有个时钟中断
操作系统和硬件是有关联的,不是相互独立的
内核空间有一些特权的操作
操作系统跑在内核空间
用户写的程序跑在用户空间
用户空间程序不能访问硬件
必须通过内核空间
操作系统运行在内核空间
操作系统可以访问硬件
linux把物理内存映射为虚拟内存(不是swap,是操作系统原理里面,说以进程的角度去看内存,怎么去看),对于应用软件来说,物理内存是透明的
应用软件需要使用内存时会向内核发起申请,内核返回一个虚拟内存的映射,虚拟内存可以映射到物理内存分区
写Python不涉及内存分配,写C语言涉及栈内存是系统分的,堆内存是程序员自己去分,C语言的程序员写到系统级程序的时候,很多内存得自己去分,自己分完了之后,还得回收。如果不回收的话会导致内存泄漏。
内存泄漏一般发生在动态请求内存之后,函数结束之后,堆内存没有释放
堆内存和数据结构的堆好像没有太大关系
什么是内存泄漏?
memory leak
也就是内存跑了,内存被某些进程占用之后不释放,就一点一点没有了,这个程序每跑一次,内存就被占用了一点,而且不释放,这样一点一点,久而久之内存就漏完了,系统崩溃。所以叫memory leak
很多高级语言都有GC垃圾回收机制来解决这个问题。C++没有自动回收,需要程序员手动去写回收代码,类似于delete指针的这种
内存映射,把虚拟内存和物理内存做映射
linux:swap 交换空间
windows: 虚拟内存
脏内存释放不了,在内存里面改了,但是还没有写到硬盘上的数据,叫脏数据,这一部分数据占用的内存,叫脏内存
当应用请求内存时,如果没有足够的空闲内存,则内核会使用LRU最近最少使用原则,尝试释放特定的内存,这个过程叫回收。
buff和cache是缓存硬盘上的数据的
buff/cache只会占用那些应用程序暂时没用的内存空间。应用程序需要时,可以立刻还给应用程序。
buff和cache就是从硬盘上先多读到内存上的数据,如果程序要用,就给用就好了,不用就先缓存着硬盘上的数据。
Dirty 脏数据(内存缓存与磁盘不同步的数据)
reboot之前先敲两个sync; sync 会先将脏数据写入
/proc目录下的内容是伪文件系统